Extend Manual Journal entry to support Asset Externalization

This commit is contained in:
Jose Alberto Hernandez
2025-06-26 21:44:06 -05:00
parent 3d83f84730
commit 2f575aa7eb
22 changed files with 114 additions and 19 deletions
@@ -62,6 +62,7 @@ import { ProvisioningJournalEntriesResolver } from './provisioning-entries/view-
import { ViewJournalEntryTransactionComponent } from 'app/shared/accounting/view-journal-entry-transaction/view-journal-entry-transaction.component';
import { JournalEntryTransactionResolver } from './common-resolvers/journal-entry-transaction.resolver';
import { ExternalAssetOwnerJournalEntryResolver } from 'app/loans/common-resolvers/external-asset-owner-journal-entry.resolver';
import { ExternalAssetConfigurationResolver } from './common-resolvers/external-asset-configuration.resolver';
/** Accounting Routes */
const routes: Routes = [
@@ -105,7 +106,8 @@ const routes: Routes = [
offices: OfficesResolver,
currencies: CurrenciesResolver,
paymentTypes: PaymentTypesResolver,
glAccounts: GlAccountsResolver
glAccounts: GlAccountsResolver,
globalConfig: ExternalAssetConfigurationResolver
}
},
{
@@ -419,7 +421,8 @@ const routes: Routes = [
ProvisioningEntryEntriesResolver,
LoanProductsResolver,
ProvisioningCategoriesResolver,
ProvisioningJournalEntriesResolver
ProvisioningJournalEntriesResolver,
ExternalAssetConfigurationResolver
]
})
export class AccountingRoutingModule {}
@@ -0,0 +1,27 @@
/** Angular Imports */
import { Injectable } from '@angular/core';
/** rxjs Imports */
import { Observable } from 'rxjs';
/** Custom Services */
import { SystemService } from 'app/system/system.service';
/**
* Offices data resolver.
*/
@Injectable()
export class ExternalAssetConfigurationResolver {
/**
* @param {AccountingService} accountingService Accounting service.
*/
constructor(private systemService: SystemService) {}
/**
* Returns the offices data.
* @returns {Observable<any>}
*/
resolve(): Observable<any> {
return this.systemService.getConfigurationByName(SystemService.CONFIG_ASSET_EXTERNALIZATION);
}
}
@@ -16,7 +16,7 @@
</mat-error>
</mat-form-field>
<mat-form-field class="flex-48">
<mat-form-field class="flex-24">
<mat-label>{{ 'labels.inputs.Currency' | translate }}</mat-label>
<mat-select required formControlName="currencyCode">
<mat-option *ngFor="let currency of currencyData" [value]="currency.code">
@@ -29,6 +29,11 @@
</mat-error>
</mat-form-field>
<mat-form-field class="flex-24" *ngIf="assetExternalizationEnabled">
<mat-label>{{ 'labels.inputs.External Asset Owner' | translate }}</mat-label>
<input matInput formControlName="externalAssetOwner" />
</mat-form-field>
<div
class="flex-fill layout-row-wrap responsive-column"
formArrayName="debits"
@@ -1,13 +1,7 @@
/** Angular Imports */
import { Component, OnInit, TemplateRef, ElementRef, ViewChild, AfterViewInit } from '@angular/core';
import {
UntypedFormGroup,
UntypedFormBuilder,
Validators,
UntypedFormArray,
ReactiveFormsModule
} from '@angular/forms';
import { Router, ActivatedRoute, RouterLink } from '@angular/router';
import { UntypedFormGroup, UntypedFormBuilder, Validators, UntypedFormArray, UntypedFormControl } from '@angular/forms';
import { Router, ActivatedRoute } from '@angular/router';
import { MatDialog } from '@angular/material/dialog';
/** Custom Services */
@@ -54,6 +48,9 @@ export class CreateJournalEntryComponent implements OnInit, AfterViewInit {
paymentTypeData: any;
/** Gl Account data. */
glAccountData: any;
/** Asset Externalization */
assetExternalizationConfig: any;
assetExternalizationEnabled = false;
/* Reference of create journal form */
@ViewChild('createJournalFormRef') createJournalFormRef: ElementRef<any>;
@@ -81,12 +78,16 @@ export class CreateJournalEntryComponent implements OnInit, AfterViewInit {
private configurationWizardService: ConfigurationWizardService,
private popoverService: PopoverService
) {
this.route.data.subscribe((data: { offices: any; currencies: any; paymentTypes: any; glAccounts: any }) => {
this.officeData = data.offices;
this.currencyData = data.currencies.selectedCurrencyOptions;
this.paymentTypeData = data.paymentTypes;
this.glAccountData = data.glAccounts;
});
this.assetExternalizationEnabled = false;
this.route.data.subscribe(
(data: { offices: any; currencies: any; paymentTypes: any; glAccounts: any; globalConfig: any }) => {
this.officeData = data.offices;
this.currencyData = data.currencies.selectedCurrencyOptions;
this.paymentTypeData = data.paymentTypes;
this.glAccountData = data.glAccounts;
this.assetExternalizationConfig = data.globalConfig;
}
);
}
/**
@@ -192,6 +193,9 @@ export class CreateJournalEntryComponent implements OnInit, AfterViewInit {
this.settingsService.dateFormat
);
}
if (!journalEntry['externalAssetOwner']) {
delete journalEntry['externalAssetOwner'];
}
this.accountingService.createJournalEntry(journalEntry).subscribe((response) => {
this.router.navigate(
[
@@ -228,6 +232,10 @@ export class CreateJournalEntryComponent implements OnInit, AfterViewInit {
this.showPopover(this.templateCreateJournalFormRef, this.createJournalFormRef.nativeElement, 'top', true);
});
}
this.assetExternalizationEnabled = this.assetExternalizationConfig.enabled;
if (this.assetExternalizationEnabled) {
this.journalEntryForm.addControl('externalAssetOwner', new UntypedFormControl());
}
}
/**