544 lines
24 KiB
HTML
544 lines
24 KiB
HTML
<!--
|
|
Copyright since 2025 Mifos Initiative
|
|
|
|
This Source Code Form is subject to the terms of the Mozilla Public
|
|
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
-->
|
|
|
|
<div class="pm-container">
|
|
<div class="pm-header">
|
|
<button mat-stroked-button [routerLink]="['../']" class="pm-back">
|
|
<i class="fas fa-arrow-left"></i> Deposits
|
|
</button>
|
|
<h2 class="pm-header__title">Party Master Entry</h2>
|
|
</div>
|
|
|
|
<div class="pm-card">
|
|
<form [formGroup]="partyForm">
|
|
<mat-tab-group class="pm-tabs" [(selectedIndex)]="selectedTabIndex" animationDuration="200ms">
|
|
<mat-tab label="Main Detail">
|
|
<div class="pm-tab-content">
|
|
<div class="pm-section">
|
|
<div class="pm-section__header">
|
|
<i class="fas fa-id-card"></i>
|
|
<h3>Identity</h3>
|
|
</div>
|
|
<div class="pm-grid">
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Client ID</mat-label>
|
|
<input matInput required formControlName="clientId" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Sub Type</mat-label>
|
|
<mat-select required formControlName="subType">
|
|
@for (type of subTypes; track type) {
|
|
<mat-option [value]="type">{{ type }}</mat-option>
|
|
}
|
|
</mat-select>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Agent ID</mat-label>
|
|
<input matInput required formControlName="agentId" />
|
|
</mat-form-field>
|
|
|
|
@if (linkedSavingsAccountId) {
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Savings Account</mat-label>
|
|
<input matInput [value]="'Linked (id ' + linkedSavingsAccountId + ')'" disabled />
|
|
</mat-form-field>
|
|
} @else {
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Savings Account No (if any)</mat-label>
|
|
<input matInput formControlName="savingsAccountNo" />
|
|
</mat-form-field>
|
|
}
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Party Code</mat-label>
|
|
<input matInput formControlName="partyCode" placeholder="Auto-generated" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Last A/c</mat-label>
|
|
<input matInput formControlName="lastAccount" placeholder="—" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Nominal</mat-label>
|
|
<mat-select required formControlName="nominal">
|
|
<mat-option value="Yes">Yes</mat-option>
|
|
<mat-option value="No">No</mat-option>
|
|
</mat-select>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field pm-field--wide">
|
|
<mat-label>Party Name</mat-label>
|
|
<input matInput required formControlName="partyName" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field pm-field--wide">
|
|
<mat-label>Party Name 1</mat-label>
|
|
<input matInput formControlName="partyName1" />
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="pm-section">
|
|
<div class="pm-section__header">
|
|
<i class="fas fa-map-marker-alt"></i>
|
|
<h3>Address & Contact</h3>
|
|
</div>
|
|
<div class="pm-grid">
|
|
<mat-form-field appearance="outline" class="pm-field pm-field--wide">
|
|
<mat-label>Address 1</mat-label>
|
|
<input matInput required formControlName="address1" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field pm-field--wide">
|
|
<mat-label>Address 2</mat-label>
|
|
<input matInput formControlName="address2" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field pm-field--wide">
|
|
<mat-label>Address 3</mat-label>
|
|
<input matInput formControlName="address3" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>City</mat-label>
|
|
<input matInput required formControlName="city" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Pincode</mat-label>
|
|
<input matInput required formControlName="pincode" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Gender</mat-label>
|
|
<mat-select formControlName="gender">
|
|
<mat-option value="Male">Male</mat-option>
|
|
<mat-option value="Female">Female</mat-option>
|
|
<mat-option value="Other">Other</mat-option>
|
|
</mat-select>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Telephone</mat-label>
|
|
<input matInput formControlName="telephone" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Mobile No (SMS)</mat-label>
|
|
<input matInput required formControlName="mobileNoSms" />
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="pm-section">
|
|
<div class="pm-section__header">
|
|
<i class="fas fa-shield-alt"></i>
|
|
<h3>KYC</h3>
|
|
</div>
|
|
<div class="pm-grid">
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Aadhar No</mat-label>
|
|
<input matInput formControlName="aadharNo" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>PAN Card No</mat-label>
|
|
<input matInput formControlName="panCardNo" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>CKYC ID</mat-label>
|
|
<input matInput formControlName="ckycId" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Operation</mat-label>
|
|
<mat-select required formControlName="operation">
|
|
@for (op of operations; track op) {
|
|
<mat-option [value]="op">{{ op }}</mat-option>
|
|
}
|
|
</mat-select>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Birth Date</mat-label>
|
|
<input matInput [matDatepicker]="birthPicker" formControlName="birthDate" />
|
|
<mat-datepicker-toggle matIconSuffix [for]="birthPicker"></mat-datepicker-toggle>
|
|
<mat-datepicker #birthPicker></mat-datepicker>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Occupation</mat-label>
|
|
<mat-select formControlName="occupation">
|
|
@for (occ of occupations; track occ) {
|
|
<mat-option [value]="occ">{{ occ }}</mat-option>
|
|
}
|
|
</mat-select>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Risk</mat-label>
|
|
<mat-select formControlName="risk">
|
|
@for (r of riskLevels; track r) {
|
|
<mat-option [value]="r">{{ r }}</mat-option>
|
|
}
|
|
</mat-select>
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="pm-section">
|
|
<div class="pm-section__header">
|
|
<i class="fas fa-user-friends"></i>
|
|
<h3>Minor / Guardian</h3>
|
|
</div>
|
|
<div class="pm-grid">
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Adult / Minor</mat-label>
|
|
<mat-select required formControlName="adultMinor">
|
|
@for (opt of adultMinorOptions; track opt) {
|
|
<mat-option [value]="opt">{{ opt }}</mat-option>
|
|
}
|
|
</mat-select>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Minor Date</mat-label>
|
|
<input matInput [matDatepicker]="minorPicker" formControlName="minorDate" />
|
|
<mat-datepicker-toggle matIconSuffix [for]="minorPicker"></mat-datepicker-toggle>
|
|
<mat-datepicker #minorPicker></mat-datepicker>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Guardian Client ID</mat-label>
|
|
<input matInput formControlName="guardianClientId" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Min. A/c Opt</mat-label>
|
|
<input matInput formControlName="minAccountOpt" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Relation</mat-label>
|
|
<input matInput formControlName="relation" />
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="pm-section">
|
|
<div class="pm-section__header">
|
|
<i class="fas fa-calendar-day"></i>
|
|
<h3>Scheme Terms</h3>
|
|
</div>
|
|
<div class="pm-grid">
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Opening Date</mat-label>
|
|
<input matInput required [matDatepicker]="openingPicker" formControlName="openingDate" />
|
|
<mat-datepicker-toggle matIconSuffix [for]="openingPicker"></mat-datepicker-toggle>
|
|
<mat-datepicker #openingPicker></mat-datepicker>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Month</mat-label>
|
|
<input matInput type="number" formControlName="month" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Maturity Date</mat-label>
|
|
<input matInput formControlName="maturityDate" placeholder="Calculated" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Reopen Date</mat-label>
|
|
<input matInput [matDatepicker]="reopenPicker" formControlName="reopenDate" />
|
|
<mat-datepicker-toggle matIconSuffix [for]="reopenPicker"></mat-datepicker-toggle>
|
|
<mat-datepicker #reopenPicker></mat-datepicker>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Deposit Amt</mat-label>
|
|
<input matInput type="number" formControlName="depositAmount" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Daily Deposit Amt</mat-label>
|
|
<input matInput required type="number" formControlName="dailyDepositAmount" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Days</mat-label>
|
|
<input matInput required type="number" formControlName="days" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Ledger No</mat-label>
|
|
<input matInput formControlName="ledgerNo" placeholder="Auto-generated" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Mat. Amt</mat-label>
|
|
<input matInput formControlName="maturityAmount" placeholder="Calculated" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Interest Rate</mat-label>
|
|
<input matInput formControlName="interestRate" placeholder="From product" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Withdraw Type</mat-label>
|
|
<mat-select formControlName="withdrawType">
|
|
@for (type of withdrawTypes; track type) {
|
|
<mat-option [value]="type">{{ type }}</mat-option>
|
|
}
|
|
</mat-select>
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="pm-section">
|
|
<div class="pm-section__header">
|
|
<i class="fas fa-exclamation-triangle"></i>
|
|
<h3>Status & Overdue Flags</h3>
|
|
</div>
|
|
<div class="pm-grid">
|
|
<div class="pm-checkbox-field">
|
|
<mat-checkbox formControlName="od1Flag">OD1 Flag</mat-checkbox>
|
|
</div>
|
|
<div class="pm-checkbox-field">
|
|
<mat-checkbox formControlName="od2Flag">OD2 Flag</mat-checkbox>
|
|
</div>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Lien</mat-label>
|
|
<mat-select formControlName="lien">
|
|
<mat-option value="Yes">Yes</mat-option>
|
|
<mat-option value="No">No</mat-option>
|
|
</mat-select>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Pay Date</mat-label>
|
|
<input matInput [matDatepicker]="payDatePicker" formControlName="payDate" />
|
|
<mat-datepicker-toggle matIconSuffix [for]="payDatePicker"></mat-datepicker-toggle>
|
|
<mat-datepicker #payDatePicker></mat-datepicker>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Payment Amount</mat-label>
|
|
<input matInput type="number" formControlName="paymentAmount" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Current Bal</mat-label>
|
|
<input matInput formControlName="currentBalance" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Opening Bal</mat-label>
|
|
<input matInput type="number" formControlName="openingBalance" />
|
|
</mat-form-field>
|
|
|
|
<div class="pm-checkbox-field">
|
|
<mat-checkbox formControlName="isSmsActive">Is SMS Active</mat-checkbox>
|
|
</div>
|
|
<div class="pm-checkbox-field">
|
|
<mat-checkbox formControlName="isEmailActive">Is Email Active</mat-checkbox>
|
|
</div>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Int.Calc</mat-label>
|
|
<input matInput formControlName="interestCalc" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Interest Date</mat-label>
|
|
<input matInput [matDatepicker]="interestDatePicker" formControlName="interestDate" />
|
|
<mat-datepicker-toggle matIconSuffix [for]="interestDatePicker"></mat-datepicker-toggle>
|
|
<mat-datepicker #interestDatePicker></mat-datepicker>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field pm-field--wide">
|
|
<mat-label>Sp.Description</mat-label>
|
|
<input matInput formControlName="spDescription" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Fr'z CD</mat-label>
|
|
<mat-select formControlName="freezeCode">
|
|
@for (code of freezeCodes; track code) {
|
|
<mat-option [value]="code">{{ code }}</mat-option>
|
|
}
|
|
</mat-select>
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Adv Code</mat-label>
|
|
<mat-select formControlName="advCode">
|
|
@for (code of advCodes; track code) {
|
|
<mat-option [value]="code">{{ code }}</mat-option>
|
|
}
|
|
</mat-select>
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
|
|
@if (partyForm.get('advCode').value === 'Transfer To Saving') {
|
|
<div class="pm-section">
|
|
<div class="pm-section__header">
|
|
<i class="fas fa-exchange-alt"></i>
|
|
<h3>Maturity Payout Routing</h3>
|
|
</div>
|
|
<div class="pm-grid">
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Credit To Branch</mat-label>
|
|
<input matInput required formControlName="creditToBranch" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Credit To A/C Type</mat-label>
|
|
<input matInput required formControlName="creditToAccountType" />
|
|
</mat-form-field>
|
|
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Credit To A/C</mat-label>
|
|
<input matInput required formControlName="creditToAccount" />
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
</mat-tab>
|
|
|
|
<mat-tab label="Nominee's Detail">
|
|
<div class="pm-tab-content">
|
|
<div class="pm-section">
|
|
<div class="pm-grid">
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Nominee</mat-label>
|
|
<mat-select formControlName="nomineeApplicable">
|
|
<mat-option value="Yes">Yes</mat-option>
|
|
<mat-option value="No">No</mat-option>
|
|
</mat-select>
|
|
</mat-form-field>
|
|
|
|
<mat-radio-group formControlName="nomineeSplitMode" class="pm-radio-group">
|
|
<mat-radio-button value="Percentage">Percentage</mat-radio-button>
|
|
<mat-radio-button value="Sequence">Sequence</mat-radio-button>
|
|
</mat-radio-group>
|
|
|
|
<button mat-stroked-button type="button" class="pm-add-nominee" (click)="addNominee()">
|
|
<i class="fas fa-plus"></i> Add Nominee
|
|
</button>
|
|
</div>
|
|
|
|
@if (nominees.length === 0) {
|
|
<p class="pm-empty">No nominees added yet.</p>
|
|
}
|
|
|
|
@for (nominee of nominees.controls; track nominee; let i = $index) {
|
|
<div class="pm-nominee-row" [formGroup]="$any(nominee)">
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Nom.Dt</mat-label>
|
|
<input matInput required [matDatepicker]="nomDatePicker" formControlName="nominationDate" />
|
|
<mat-datepicker-toggle matIconSuffix [for]="nomDatePicker"></mat-datepicker-toggle>
|
|
<mat-datepicker #nomDatePicker></mat-datepicker>
|
|
</mat-form-field>
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Name</mat-label>
|
|
<input matInput required formControlName="name" />
|
|
</mat-form-field>
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Mobile No</mat-label>
|
|
<input matInput formControlName="mobileNo" />
|
|
</mat-form-field>
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Birth Dt</mat-label>
|
|
<input matInput [matDatepicker]="nomBirthPicker" formControlName="birthDate" />
|
|
<mat-datepicker-toggle matIconSuffix [for]="nomBirthPicker"></mat-datepicker-toggle>
|
|
<mat-datepicker #nomBirthPicker></mat-datepicker>
|
|
</mat-form-field>
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Minor</mat-label>
|
|
<mat-select required formControlName="minor">
|
|
<mat-option value="Yes">Yes</mat-option>
|
|
<mat-option value="No">No</mat-option>
|
|
</mat-select>
|
|
</mat-form-field>
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Relation</mat-label>
|
|
<input matInput required formControlName="relation" />
|
|
</mat-form-field>
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Gender</mat-label>
|
|
<mat-select required formControlName="gender">
|
|
<mat-option value="Male">Male</mat-option>
|
|
<mat-option value="Female">Female</mat-option>
|
|
<mat-option value="Other">Other</mat-option>
|
|
</mat-select>
|
|
</mat-form-field>
|
|
<mat-form-field appearance="outline" class="pm-field">
|
|
<mat-label>Guar. Name</mat-label>
|
|
<input matInput formControlName="guardianName" />
|
|
</mat-form-field>
|
|
<button
|
|
mat-icon-button
|
|
type="button"
|
|
class="pm-remove-nominee"
|
|
(click)="removeNominee(i)"
|
|
matTooltip="Remove nominee"
|
|
>
|
|
<i class="fas fa-trash"></i>
|
|
</button>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</mat-tab>
|
|
</mat-tab-group>
|
|
|
|
@if (isClosed) {
|
|
<div class="pm-callout">
|
|
<i class="fas fa-lock"></i>
|
|
<span>This account is closed. No further collections or edits are possible.</span>
|
|
</div>
|
|
}
|
|
|
|
<div class="pm-action-bar">
|
|
<button mat-raised-button type="button" (click)="exit()">Exit</button>
|
|
<button mat-stroked-button type="button" (click)="cancel()">Cancel</button>
|
|
<button mat-stroked-button type="button" (click)="retrieve()">Retrieve</button>
|
|
@if (partyId && !isClosed) {
|
|
<button
|
|
mat-stroked-button
|
|
type="button"
|
|
color="warn"
|
|
matTooltip="Balance must be zero before closing"
|
|
(click)="closeAccount()"
|
|
>
|
|
<i class="fas fa-lock" style="margin-right: 6px"></i> Close Account
|
|
</button>
|
|
}
|
|
<button
|
|
mat-raised-button
|
|
color="primary"
|
|
type="button"
|
|
[disabled]="partyForm.invalid || isClosed"
|
|
(click)="save()"
|
|
>
|
|
Save
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|