diff --git a/src/app/clients/client-stepper/client-general-step/client-general-step.component.ts b/src/app/clients/client-stepper/client-general-step/client-general-step.component.ts index 9d76fa2f7..5e59781f2 100644 --- a/src/app/clients/client-stepper/client-general-step/client-general-step.component.ts +++ b/src/app/clients/client-stepper/client-general-step/client-general-step.component.ts @@ -966,6 +966,38 @@ export class ClientGeneralStepComponent implements OnInit, OnDestroy, OnChanges this.linkMonthlyAnnual('monthlyIncome', 'annualIncome'); this.linkMonthlyAnnual('monthlyTurnover', 'annualTurnover'); + this.linkIncomeToTurnover(); + } + + /** + * Auto-calculates turnover based on income (doubling monthly income for monthly turnover, + * and annual income for annual/yearly turnover). + */ + private linkIncomeToTurnover(): void { + const monthlyIncome = this.createClientForm.get('monthlyIncome'); + const monthlyTurnover = this.createClientForm.get('monthlyTurnover'); + const annualIncome = this.createClientForm.get('annualIncome'); + const annualTurnover = this.createClientForm.get('annualTurnover'); + + if (monthlyIncome && monthlyTurnover) { + monthlyIncome.valueChanges.subscribe((value) => { + if (this.suppressMonthlyAnnualLink) { + return; + } + const num = parseFloat(value); + monthlyTurnover.setValue(!isNaN(num) && num >= 0 ? this.round2(num * 2) : '', { emitEvent: true }); + }); + } + + if (annualIncome && annualTurnover) { + annualIncome.valueChanges.subscribe((value) => { + if (this.suppressMonthlyAnnualLink) { + return; + } + const num = parseFloat(value); + annualTurnover.setValue(!isNaN(num) && num >= 0 ? this.round2(num * 2) : '', { emitEvent: true }); + }); + } } /** diff --git a/src/app/clients/client-stepper/client-kyc-step/client-kyc-step.component.html b/src/app/clients/client-stepper/client-kyc-step/client-kyc-step.component.html index b8644c83a..db335767e 100644 --- a/src/app/clients/client-stepper/client-kyc-step/client-kyc-step.component.html +++ b/src/app/clients/client-stepper/client-kyc-step/client-kyc-step.component.html @@ -723,6 +723,53 @@ PAN verification requires client to be created first. Complete General tab and click Next to save. } + + +
| Client / Account | +Branch | +Exception Reason & Date | +Risk | +Contact Status | +Contact Logs | +Actions | +
|---|---|---|---|---|---|---|
|
+
+ {{ c.name }}
+
+ {{ c.account }}
+ |
+ {{ c.contact.branch }} | +
+ {{ c.exceptionReason }}
+ Opened: {{ c.exceptionDate }}
+ |
+ + {{ c.riskLabel }} + | +
+ @if (c.contactHistory && c.contactHistory.length > 0) {
+ Contacted
+
+ Last: {{ c.contactHistory[c.contactHistory.length - 1].date }}
+
+ } @else {
+ Not Contacted
+ }
+ |
+
+ @if (c.contactHistory && c.contactHistory.length > 0) {
+
+ @for (log of c.contactHistory; track $index) {
+
+ } @else {
+ No logs recorded
+ }
+
+ {{ log.date }} ({{ log.action }}): {{ log.notes }}
+ — {{ log.officer }}
+ @if (log.platformSent) {
+ @if (log.delivered) {
+ Sent {{ log.destinationMasked }}
+ } @else {
+ Not sent
+ }
+ }
+
+ }
+ |
+
+
+
+
+
+ |
+
| Client / Account | +Branch | +Exception Reason & Resolution | +Risk | +Contact Logs | +Status | +
|---|---|---|---|---|---|
|
+
+ {{ c.name }}
+
+ {{ c.account }}
+ |
+ {{ c.contact.branch }} | +
+
+ {{ c.exceptionReason }}
+
+ Resolved On: {{ c.exceptionResolvedOn }}
+ |
+ + {{ c.riskLabel }} + | +
+ @if (c.contactHistory && c.contactHistory.length > 0) {
+
+ @for (log of c.contactHistory; track $index) {
+
+ } @else {
+ No logs recorded
+ }
+
+ {{ log.date }} ({{ log.action }}): {{ log.notes }}
+ — {{ log.officer }}
+ @if (log.platformSent) {
+ @if (log.delivered) {
+ Sent {{ log.destinationMasked }}
+ } @else {
+ Not sent
+ }
+ }
+
+ }
+ |
+
+
+ |
+
| Customer · PAN | -Form Type | -Age | -Branch | -Deposit Principal | -Est. Interest ({{ records[0]?.fy }}) | -Status | -Actions | -|||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- {{ r.customerName }}
- {{ r.customerId }} · PAN {{ r.customerPan }}
- DOB {{ r.dob | date: 'd MMM y' }}
- |
- - - Form 121 ({{ formKind(r) }}) - - | -{{ age(r.dob) }} yrs | -{{ r.branch }} | -₹{{ r.depositPrincipal | number: '1.0-0' }} | -- ₹{{ r.estimatedInterest | number: '1.0-0' }} - | -
- @if (r.status === 'FILED') {
- {{ r.filedOn | date: 'd MMM y' }}
+ | Customer · PAN | +Form · Band | +Age | +Branch | +Est. Interest | +Threshold | +TDS Payable | +TDS Saved | +Settlement | +Status | +Actions | +
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
+ {{ row.record.customerName }}
+ {{ row.record.customerId }} · PAN {{ row.record.customerPan }}
+ DOB {{ row.record.dob | date: 'd MMM y' }}
+ |
+
+
+ {{ row.form === '121' ? 'Form 121' : 'Form ' + row.form }}
+
+ {{ row.band === 'SENIOR' ? 'Senior citizen' : 'General' }}
+ |
+ {{ row.age }} yrs | +{{ row.record.branch }} | ++ ₹{{ row.record.estimatedInterest | number: '1.0-0' }} + | +₹{{ row.schedule.threshold | number: '1.0-0' }} | +
+ @if (row.schedule.totalTds > 0) {
+ ₹{{ row.schedule.totalTds | number: '1.0-0' }}
+ @ {{ row.schedule.rateApplied * 100 | number: '1.0-0' }}%
+ } @else {
+ —
}
- } @else {
- |
-
-
-
-
-
- |
- ||||||||||
|
- |
- |||||||||||||||||
| Quarter | +Interest | +Cumulative | +Liability to date | +TDS this quarter | +Return due | +
|---|---|---|---|---|---|
| + {{ line.label }} + @if (line.thresholdCrossedHere) { + threshold crossed + } + @if (line.declarationActive) { + Form 121 active + } + | +₹{{ line.interest | number: '1.0-0' }} | +₹{{ line.cumInterest | number: '1.0-0' }} | +₹{{ line.cumLiability | number: '1.0-0' }} | ++ @if (line.tds !== 0) { + ₹{{ line.tds | number: '1.0-0' }} + } @else { + — + } + | +{{ line.dueDate }} | +
| Total | ++ ₹{{ row.schedule.totalInterest | number: '1.0-0' }} + | ++ | + | + ₹{{ row.schedule.totalTds | number: '1.0-0' }} + | ++ |