<div class="mt-2">
<eg-grid #fundDetailsAllocationsGrid idlClass="acqfa" [dataSource]="acqfaDataSource"
[sortable]="true" persistKey="acq.fund.fund_allocation"
+ [cellTextGenerator]="cellTextGenerator"
[filterable]="true" [stickyHeader]="true">
- <eg-grid-column path="funding_source"></eg-grid-column>
+ <ng-template #sourceTmpl let-row="row">
+ <a href="/eg2/staff/admin/acq/funds/funding_source/{{row.funding_source().id()}}" target="_blank">
+ {{row.funding_source().code()}} ({{getOrgShortname(row.funding_source().owner())}})
+ </a>
+ </ng-template>
+ <eg-grid-column path="funding_source" [cellTemplate]="sourceTmpl"></eg-grid-column>
<eg-grid-column path="amount"></eg-grid-column>
<eg-grid-column path="create_time"></eg-grid-column>
<eg-grid-column path="allocator"></eg-grid-column>
<div class="mt-2">
<eg-grid #fundDetailsTransfersGrid idlClass="acqftr" [dataSource]="acqftrDataSource"
[sortable]="true" persistKey="acq.fund.fund_transfer"
+ [cellTextGenerator]="cellTextGenerator"
[filterable]="true" [stickyHeader]="true">
- <eg-grid-column path="src_fund"></eg-grid-column>
+ <ng-template #sourcefundTmpl let-row="row">
+ <ng-container *ngIf="row.src_fund().id() === fundId">
+ {{row.src_fund().code()}} ({{row.src_fund().year()}}) ({{getOrgShortname(row.src_fund().org())}})
+ </ng-container>
+ <ng-container *ngIf="row.src_fund().id() !== fundId">
+ <a href="/eg2/staff/admin/acq/funds/fund/{{row.src_fund().id()}}" target="_blank">
+ {{row.src_fund().code()}} ({{row.src_fund().year()}}) ({{getOrgShortname(row.src_fund().org())}})
+ </a>
+ </ng-container>
+ </ng-template>
+ <eg-grid-column path="src_fund" [cellTemplate]="sourcefundTmpl"></eg-grid-column>
<eg-grid-column path="src_amount"></eg-grid-column>
- <eg-grid-column path="dest_fund"></eg-grid-column>
+ <ng-template #destfundTmpl let-row="row">
+ <ng-container *ngIf="row.dest_fund().id() === fundId">
+ {{row.dest_fund().code()}} ({{row.dest_fund().year()}}) ({{getOrgShortname(row.dest_fund().org())}})
+ </ng-container>
+ <ng-container *ngIf="row.dest_fund().id() !== fundId">
+ <a href="/eg2/staff/admin/acq/funds/fund/{{row.dest_fund().id()}}" target="_blank">
+ {{row.dest_fund().code()}} ({{row.dest_fund().year()}}) ({{getOrgShortname(row.dest_fund().org())}})
+ </a>
+ </ng-container>
+ </ng-template>
+ <eg-grid-column path="dest_fund" [cellTemplate]="destfundTmpl"></eg-grid-column>
<eg-grid-column path="dest_amount"></eg-grid-column>
<eg-grid-column path="transfer_time"></eg-grid-column>
<eg-grid-column path="transfer_user"></eg-grid-column>
<eg-grid-column path="note"></eg-grid-column>
+ <ng-template #fsCredTmpl let-row="row">
+ <a href="/eg2/staff/admin/acq/funds/funding_source/{{row.funding_source_credit().funding_source().id()}}" target="_blank">
+ {{row.funding_source_credit().funding_source().code()}} ({{getOrgShortname(row.funding_source_credit().funding_source().owner())}})
+ </a>
+ </ng-template>
+ <eg-grid-column path="funding_source_credit" [cellTemplate]="fsCredTmpl"></eg-grid-column>
<eg-grid-column path="id" [hidden]="true"></eg-grid-column>
</eg-grid>
</div>
<ng-template ngbNavContent>
<div class="mt-2">
<eg-grid #fundDetailsDebitsGrid idlClass="acqfdeb" [dataSource]="acqfdebDataSource"
+ [cellTextGenerator]="cellTextGenerator"
[sortable]="true" persistKey="acq.fund.fund_debit"
[filterable]="true" [stickyHeader]="true">
<eg-grid-column path="origin_amount"></eg-grid-column>
<eg-grid-column path="origin_currency_type"></eg-grid-column>
<eg-grid-column path="create_time"></eg-grid-column>
- <eg-grid-column path="invoice_entry"></eg-grid-column>
+ <ng-template #liTmpl let-row="row">
+ <a href="/eg/staff/acq/legacy/po/view/{{row.po_id}}?focus_li={{row.li_id}}" target="_blank">
+ {{row.li_id}}
+ </a>
+ </ng-template>
+ <eg-grid-column path="li_id" i18n-label label="Line Item" [cellTemplate]="liTmpl" [filterable]="false" [sortable]="false"></eg-grid-column>
+ <ng-template #poTmpl let-row="row">
+ <a href="/eg/staff/acq/legacy/po/view/{{row.po_id}}" target="_blank">
+ {{row.po_name}}
+ </a>
+ </ng-template>
+ <eg-grid-column path="po_id" i18n-label label="Purchase Order" [cellTemplate]="poTmpl" [filterable]="false" [sortable]="false"></eg-grid-column>
+ <ng-template #invTmpl let-row="row">
+ <a href="/eg/staff/acq/legacy/invoice/view/{{row.invoice_id}}" target="_blank">
+ {{row.vendor_invoice_id}}
+ </a>
+ </ng-template>
+ <eg-grid-column path="invoice_id" i18n-label label="Invoice" [cellTemplate]="invTmpl" [filterable]="false" [sortable]="false"></eg-grid-column>
+ <eg-grid-column path="invoice_entry" [hidden]="true"></eg-grid-column>
<eg-grid-column path="id" [hidden]="true"></eg-grid-column>
<eg-grid-column path="fund" [hidden]="true" [filterable]="false"></eg-grid-column>
</eg-grid>
import {AuthService} from '@eg/core/auth.service';
import {PcrudService} from '@eg/core/pcrud.service';
import {StoreService} from '@eg/core/store.service';
+import {OrgService} from '@eg/core/org.service';
import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component';
-import {GridDataSource} from '@eg/share/grid/grid';
+import {GridDataSource, GridCellTextGenerator} from '@eg/share/grid/grid';
import {Pager} from '@eg/share/util/pager';
import {NgbModal} from '@ng-bootstrap/ng-bootstrap';
import {StringComponent} from '@eg/share/string/string.component';
import {ToastService} from '@eg/share/toast/toast.service';
import {FundTagsComponent} from './fund-tags.component';
import {FundTransferDialogComponent} from './fund-transfer-dialog.component';
+import {map, mergeMap} from 'rxjs/operators';
+import {Observable, forkJoin, of} from 'rxjs';
@Component({
selector: 'eg-fund-details-dialog',
activeTab = 'summary';
defaultTabType = 'summary';
+ cellTextGenerator: GridCellTextGenerator;
constructor(
private idl: IdlService,
private auth: AuthService,
private pcrud: PcrudService,
private store: StoreService,
+ private org: OrgService,
private format: FormatService,
private toast: ToastService,
private modal: NgbModal
this.onOpen$.subscribe(() => this._initRecord());
this.idlDef = this.idl.classes['acqf']
this.fieldOrder = 'name,code,year,org,active,currency_type,balance_stop_percentage,balance_warning_percentage,propagate,rollover';
+
+ this.cellTextGenerator = {
+ src_fund: row => row().code(),
+ dest_fund: row => row().code(),
+ funding_source: row => row().code(),
+ li_id: row => row.li_id,
+ po_id: row => row.po_name,
+ invoice_id: row => row.vendor_invoice_id
+ };
}
private _initRecord() {
{ dest_fund: this.fundId }
]
});
+ searchOps['flesh'] = 2;
+ searchOps['flesh_fields'] = {
+ 'acqftr': ['funding_source_credit'],
+ 'acqfscred': ['funding_source']
+ }
} else if (idlClass === 'acqfdeb') {
search.push({ fund: this.fundId });
+ searchOps['flesh'] = 2;
+ searchOps['flesh_fields'] = {
+ 'acqfdeb': ['invoice_entry'],
+ 'acqie': ['invoice','purchase_order','lineitem']
+ }
}
Object.keys(gridSource.filters).forEach(key => {
});
});
- return this.pcrud.search(
- idlClass, search, searchOps, reqOps);
+ return this.pcrud.search(idlClass, search, searchOps, reqOps)
+ .pipe(mergeMap((row) => this.doExtraFleshing(row)));
};
return gridSource;
}
+ doExtraFleshing(row: IdlObject): Observable<IdlObject> {
+ if (row.classname === 'acqfdeb') {
+ row['vendor_invoice_id'] = null;
+ row['invoice_id'] = null;
+ row['po_id'] = null;
+ row['po_name'] = null;
+ row['li_id'] = null;
+ if (row.invoice_entry()) {
+ if (row.invoice_entry().invoice()) {
+ row['invoice_id'] = row.invoice_entry().invoice().id();
+ row['vendor_invoice_id'] = row.invoice_entry().invoice().inv_ident();
+ }
+ if (row.invoice_entry().purchase_order()) {
+ row['po_id'] = row.invoice_entry().purchase_order().id();
+ row['po_name'] = row.invoice_entry().purchase_order().name();
+ }
+ if (row.invoice_entry().lineitem()) {
+ row['li_id'] = row.invoice_entry().lineitem().id();
+ }
+ }
+ }
+ return of(row);
+ }
formatCurrency(value: any) {
return this.format.transform({
value: value,
this.defaultTabType = this.activeTab;
this.store.setLocalItem('eg.acq.fund_details.default_tab', this.activeTab);
}
+
+ getOrgShortname(ou: any) {
+ if (typeof ou === 'object') {
+ return ou.shortname();
+ } else {
+ return this.org.get(ou).shortname();
+ }
+ }
}