Replaced checked in package-lock.json by regenerated one. Ran ng update @angular/core@20 @angular/cli@20 Ran npm install @angular-builders/jest@^20.0.0 @fortawesome/angular-fontawesome@^3.0.0 @swimlane/ngx-graph@^11 Ran npm install ngx-mat-select-search@^8.0.2. Ran ng update @angular/material@20. Updated all eslint and typescript to the latest versions. Removed @angular-devkit/schematics. Updated fontawesome. Updated rxjs and tslib. Moved required node version from 16 to 20. Updated jest-preset-angular. Set preserveWhitespaces to false. Corrected two type declarations in two typescript files to make ng serve run without errors. Removed unused angular-devkit/schematics from view-user.component.ts . Updated list of supported browsers. Upgraded prettier. Ran prettier . --write the first time. Ran prettier . --write the second time. Ran ng generate @angular/core:inject with defaults, excepted a handful of files. Fixed remaining eslint problems. Added dist directory to ignores in eslint.config.js. Let prettier fix formatting, almost everything is just line breaks. Made htmlhint ignore @if and @for Angular constructs. Updated node version in Github workflow to 22.12.0 (build.yml). Updated .env.ts. Updated Angular datetime format strings from YYYY-MM-DD to yyyy-MM-dd. Merged changes from dev into angular20 branch.
364 lines
16 KiB
HTML
364 lines
16 KiB
HTML
<div class="container">
|
|
<mat-card>
|
|
<div class="layout-row responsive-column gap-20px">
|
|
<div class="flex-50">
|
|
<mat-nav-list>
|
|
<mat-list-item *mifosxHasPermission="'CREATE_JOURNALENTRY'">
|
|
<div class="menu-list-item-content">
|
|
<div class="menu-left-section" [routerLink]="['journal-entries/frequent-postings']">
|
|
<mat-icon matListIcon>
|
|
<fa-icon icon="sync" size="sm"></fa-icon>
|
|
</mat-icon>
|
|
<div matLine>
|
|
{{ 'labels.heading.Frequent Postings' | translate }}
|
|
@if (arrowBooleans[0]) {
|
|
<p matLine [routerLink]="['journal-entries/frequent-postings']" class="menu-explanation">
|
|
{{ 'labels.text.These are predefined postings' | translate }}
|
|
</p>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="menu-right-section">
|
|
@if (!arrowBooleans[0]) {
|
|
<fa-icon (click)="arrowBooleansToggle(0)" icon="arrow-down" size="md"></fa-icon>
|
|
}
|
|
@if (arrowBooleans[0]) {
|
|
<fa-icon (click)="arrowBooleansToggle(0)" icon="arrow-up" size="md"></fa-icon>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
|
|
<div #createJournalEntries>
|
|
<mat-list-item *mifosxHasPermission="'CREATE_JOURNALENTRY'">
|
|
<div class="menu-list-item-content">
|
|
<div class="menu-left-section" [routerLink]="['journal-entries/create']">
|
|
<mat-icon matListIcon>
|
|
<fa-icon icon="plus" size="sm"></fa-icon>
|
|
</mat-icon>
|
|
<div matLine>
|
|
{{ 'labels.heading.Create Journal Entries' | translate }}
|
|
@if (arrowBooleans[1]) {
|
|
<p matLine [routerLink]="['journal-entries/create']" class="menu-explanation">
|
|
{{ 'labels.text.Manual journal entry transactions recorded in a journal' | translate }}
|
|
</p>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="menu-right-section">
|
|
@if (!arrowBooleans[1]) {
|
|
<fa-icon (click)="arrowBooleansToggle(1)" icon="arrow-down" size="md"></fa-icon>
|
|
}
|
|
@if (arrowBooleans[1]) {
|
|
<fa-icon (click)="arrowBooleansToggle(1)" icon="arrow-up" size="md"></fa-icon>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
</div>
|
|
|
|
<mat-list-item *mifosxHasPermission="'READ_JOURNALENTRY'">
|
|
<div class="menu-list-item-content">
|
|
<div class="menu-left-section" [routerLink]="['journal-entries']">
|
|
<mat-icon matListIcon>
|
|
<fa-icon icon="search" size="sm"></fa-icon>
|
|
</mat-icon>
|
|
<div matLine>
|
|
{{ 'labels.heading.Search Journal Entries' | translate }}
|
|
@if (arrowBooleans[2]) {
|
|
<p matLine [routerLink]="['journal-entries']" class="menu-explanation">
|
|
{{ 'labels.text.Advanced search option for journal entries' | translate }}
|
|
</p>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="menu-right-section">
|
|
@if (!arrowBooleans[2]) {
|
|
<fa-icon (click)="arrowBooleansToggle(2)" icon="arrow-down" size="md"></fa-icon>
|
|
}
|
|
@if (arrowBooleans[2]) {
|
|
<fa-icon (click)="arrowBooleansToggle(2)" icon="arrow-up" size="md"></fa-icon>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
|
|
<div #accountsLinked>
|
|
<mat-list-item *mifosxHasPermission="'READ_FINANCIALACTIVITYACCOUNT'">
|
|
<div class="menu-list-item-content">
|
|
<div class="menu-left-section" [routerLink]="['financial-activity-mappings']">
|
|
<mat-icon matListIcon>
|
|
<fa-icon icon="link" size="sm"></fa-icon>
|
|
</mat-icon>
|
|
<div matLine>
|
|
{{ 'labels.heading.Accounts Linked to Financial Activities' | translate }}
|
|
@if (arrowBooleans[3]) {
|
|
<p matLine [routerLink]="['financial-activity-mappings']" class="menu-explanation">
|
|
{{ 'labels.text.List of Financial Activities and GL Account Mappings' | translate }}
|
|
</p>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="menu-right-section">
|
|
@if (!arrowBooleans[3]) {
|
|
<fa-icon (click)="arrowBooleansToggle(3)" icon="arrow-down" size="md"></fa-icon>
|
|
}
|
|
@if (arrowBooleans[3]) {
|
|
<fa-icon (click)="arrowBooleansToggle(3)" icon="arrow-up" size="md"></fa-icon>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
</div>
|
|
|
|
<div #migrateOpeningBalances>
|
|
<mat-list-item *mifosxHasPermission="'READ_JOURNALENTRY'">
|
|
<div class="menu-list-item-content">
|
|
<div class="menu-left-section" [routerLink]="['migrate-opening-balances']">
|
|
<mat-icon matListIcon>
|
|
<fa-icon icon="hand-holding-usd" size="sm"></fa-icon>
|
|
</mat-icon>
|
|
<div matLine>
|
|
{{ 'labels.heading.Migrate Opening Balances (Office-wise)' | translate }}
|
|
@if (arrowBooleans[4]) {
|
|
<p matLine [routerLink]="['migrate-opening-balances']" class="menu-explanation">
|
|
{{ 'labels.text.Set or update office-level opening balances for GL accounts' | translate }}
|
|
</p>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="menu-right-section">
|
|
@if (!arrowBooleans[4]) {
|
|
<fa-icon (click)="arrowBooleansToggle(4)" icon="arrow-down" size="md"></fa-icon>
|
|
}
|
|
@if (arrowBooleans[4]) {
|
|
<fa-icon (click)="arrowBooleansToggle(4)" icon="arrow-up" size="md"></fa-icon>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
</div>
|
|
</mat-nav-list>
|
|
</div>
|
|
|
|
<div class="flex-50">
|
|
<mat-nav-list>
|
|
<div #chartofAccounts>
|
|
<mat-list-item *mifosxHasPermission="'READ_GLACCOUNT'">
|
|
<div class="menu-list-item-content">
|
|
<div class="menu-left-section" [routerLink]="['chart-of-accounts']">
|
|
<mat-icon matListIcon>
|
|
<fa-icon icon="sitemap" size="sm"></fa-icon>
|
|
</mat-icon>
|
|
<div matLine>
|
|
{{ 'labels.heading.Chart of Accounts' | translate }}
|
|
@if (arrowBooleans[5]) {
|
|
<p matLine [routerLink]="['chart-of-accounts']" class="menu-explanation">
|
|
{{ 'labels.text.List of accounts used by the organization' | translate }}
|
|
</p>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="menu-right-section">
|
|
@if (!arrowBooleans[5]) {
|
|
<fa-icon (click)="arrowBooleansToggle(5)" icon="arrow-down" size="md"></fa-icon>
|
|
}
|
|
@if (arrowBooleans[5]) {
|
|
<fa-icon (click)="arrowBooleansToggle(5)" icon="arrow-up" size="md"></fa-icon>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
</div>
|
|
|
|
<div #closingEntries>
|
|
<mat-list-item *mifosxHasPermission="'READ_GLCLOSURE'">
|
|
<div class="menu-list-item-content">
|
|
<div class="menu-left-section" [routerLink]="['closing-entries']">
|
|
<mat-icon matListIcon>
|
|
<fa-icon icon="archive" size="sm"></fa-icon>
|
|
</mat-icon>
|
|
<div matLine>
|
|
{{ 'labels.heading.Closing Entries' | translate }}
|
|
@if (arrowBooleans[6]) {
|
|
<p matLine [routerLink]="['closing-entries']" class="menu-explanation">
|
|
{{ 'labels.text.Journal entries made at the end of accounting period' | translate }}
|
|
</p>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="menu-right-section">
|
|
@if (!arrowBooleans[6]) {
|
|
<fa-icon (click)="arrowBooleansToggle(6)" icon="arrow-down" size="md"></fa-icon>
|
|
}
|
|
@if (arrowBooleans[6]) {
|
|
<fa-icon (click)="arrowBooleansToggle(6)" icon="arrow-up" size="md"></fa-icon>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
</div>
|
|
|
|
<mat-list-item *mifosxHasPermission="'READ_ACCOUNTINGRULE'">
|
|
<div class="menu-list-item-content">
|
|
<div class="menu-left-section" [routerLink]="['accounting-rules']">
|
|
<mat-icon matListIcon>
|
|
<fa-icon icon="list" size="sm"></fa-icon>
|
|
</mat-icon>
|
|
<div matLine>
|
|
{{ 'labels.heading.Accounting Rules' | translate }}
|
|
@if (arrowBooleans[7]) {
|
|
<p matLine [routerLink]="['accounting-rules']" class="menu-explanation">
|
|
{{ 'labels.text.List of all accounting rules' | translate }}
|
|
</p>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="menu-right-section">
|
|
@if (!arrowBooleans[7]) {
|
|
<fa-icon (click)="arrowBooleansToggle(7)" icon="arrow-down" size="md"></fa-icon>
|
|
}
|
|
@if (arrowBooleans[7]) {
|
|
<fa-icon (click)="arrowBooleansToggle(7)" icon="arrow-up" size="md"></fa-icon>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
|
|
<mat-list-item *mifosxHasPermission="'EXECUTE_PERIODICACCRUALACCOUNTING'">
|
|
<div class="menu-list-item-content">
|
|
<div class="menu-left-section" [routerLink]="['periodic-accruals']">
|
|
<mat-icon matListIcon>
|
|
<fa-icon icon="calendar" size="sm"></fa-icon>
|
|
</mat-icon>
|
|
<div matLine>
|
|
{{ 'labels.heading.Accruals' | translate }}
|
|
@if (arrowBooleans[8]) {
|
|
<p matLine [routerLink]="['periodic-accruals']" class="menu-explanation">
|
|
{{ 'labels.text.Accrues income, expenses and liabilities' | translate }}
|
|
</p>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="menu-right-section">
|
|
@if (!arrowBooleans[8]) {
|
|
<fa-icon (click)="arrowBooleansToggle(8)" icon="arrow-down" size="md"></fa-icon>
|
|
}
|
|
@if (arrowBooleans[8]) {
|
|
<fa-icon (click)="arrowBooleansToggle(8)" icon="arrow-up" size="md"></fa-icon>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
|
|
<mat-list-item *mifosxHasPermission="'VIEW_PROVISIONING_ENTRIES'">
|
|
<div class="menu-list-item-content">
|
|
<div class="menu-left-section" [routerLink]="['provisioning-entries']">
|
|
<mat-icon matListIcon>
|
|
<fa-icon icon="cogs" size="sm"></fa-icon>
|
|
</mat-icon>
|
|
<div matLine>
|
|
{{ 'labels.heading.Provisioning Entries' | translate }}
|
|
@if (arrowBooleans[9]) {
|
|
<p matLine [routerLink]="['provisioning-entries']" class="menu-explanation">
|
|
{{ 'labels.text.Create provisioning entries' | translate }}
|
|
</p>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="menu-right-section">
|
|
@if (!arrowBooleans[9]) {
|
|
<fa-icon (click)="arrowBooleansToggle(9)" icon="arrow-down" size="md"></fa-icon>
|
|
}
|
|
@if (arrowBooleans[9]) {
|
|
<fa-icon (click)="arrowBooleansToggle(9)" icon="arrow-up" size="md"></fa-icon>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
</mat-nav-list>
|
|
</div>
|
|
</div>
|
|
</mat-card>
|
|
</div>
|
|
|
|
<ng-template #templateChartofAccounts let-popover="popover">
|
|
<h2>{{ 'labels.heading.Chart of Accounts' | translate }}</h2>
|
|
<p class="mw300">{{ 'labels.text.The Chart of Accounts - General Ledger Setup' | translate }}</p>
|
|
<div class="layout-row align-end gap-2px responsive-column">
|
|
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
|
{{ 'labels.buttons.Close' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="popover.close(); previousStepChartofAccounts()">
|
|
{{ 'labels.buttons.Back' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="popover.close(); nextStepChartofAccounts()">
|
|
{{ 'labels.buttons.Next' | translate }}
|
|
</button>
|
|
</div>
|
|
</ng-template>
|
|
|
|
<ng-template #templateAccountsLinked let-popover="popover">
|
|
<h2>{{ 'labels.heading.Accounts Linked to Financial Activities' | translate }}</h2>
|
|
<p class="mw400">{{ 'labels.text.Accounts linked to Financial Activities' | translate }}</p>
|
|
<div class="layout-row align-end gap-2px responsive-column">
|
|
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
|
{{ 'labels.buttons.Close' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="popover.close(); previousStepAccountsLinked()">
|
|
{{ 'labels.buttons.Back' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="popover.close(); nextStepAccountsLinked()">
|
|
{{ 'labels.buttons.Next' | translate }}
|
|
</button>
|
|
</div>
|
|
</ng-template>
|
|
|
|
<ng-template #templateMigrateOpeningBalances let-popover="popover">
|
|
<h2>{{ 'labels.heading.Migrate Opening Balances (Office-wise)' | translate }}</h2>
|
|
<p class="mw400">{{ 'labels.text.GLAccount Balances Application' | translate }}</p>
|
|
<div class="layout-row align-end gap-2px responsive-column">
|
|
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
|
{{ 'labels.buttons.Close' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="popover.close(); previousStepMigrateOpeningBalances()">
|
|
{{ 'labels.buttons.Back' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="popover.close(); nextStepMigrateOpeningBalances()">
|
|
{{ 'labels.buttons.Next' | translate }}
|
|
</button>
|
|
</div>
|
|
</ng-template>
|
|
|
|
<ng-template #templateClosingEntries let-popover="popover">
|
|
<h2>{{ 'labels.heading.Closing Entries' | translate }}</h2>
|
|
<p class="mw300">{{ 'labels.text.Accounting to journal entries' | translate }}</p>
|
|
<div class="layout-row align-end gap-2px responsive-column">
|
|
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
|
{{ 'labels.buttons.Close' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="popover.close(); previousStepClosingEntries()">
|
|
{{ 'labels.buttons.Back' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="popover.close(); nextStepClosingEntries()">
|
|
{{ 'labels.buttons.Next' | translate }}
|
|
</button>
|
|
</div>
|
|
</ng-template>
|
|
|
|
<ng-template #templateCreateJournalEntries let-popover="popover">
|
|
<h2>{{ 'labels.heading.Create Journal Entries' | translate }}</h2>
|
|
<p class="mw300">{{ 'labels.text.Journal Entries Transactions' | translate }}</p>
|
|
<div class="layout-row align-end gap-2px responsive-column">
|
|
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
|
{{ 'labels.buttons.Close' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="popover.close(); previousStepCreateJournalEntries()">
|
|
{{ 'labels.buttons.Back' | translate }}
|
|
</button>
|
|
<button mat-raised-button color="primary" (click)="popover.close(); nextStepCreateJournalEntries()">
|
|
{{ 'labels.buttons.Next' | translate }}
|
|
</button>
|
|
</div>
|
|
</ng-template>
|