feat(shares): dynamic Share Reports module, voucher attach/GL sync fixes

- Add the full Share Reports surface (final balance, account statement,
  issued/status/nominal/share-wise/guarantor/member-interest reports, enquiry,
  payment certificate, share detail, dividend statement, folio statement,
  distinctive numbers, area-wise, mailing labels/letters, share transfer) as
  standalone routed components, wired into the Share menu
- Wire the unattributed Share Collection receipt list into Apply Collection
  and Apply Additional Shares, with an Attach action independent of
  account/client
- Sync the GL Account and Voucher No fields to whichever receipt is ticked or
  found, and surface the receipt's real Dr/Cr GL entries in its detail popup
- Block Apply Additional Shares until the account's original application is
  settled

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-18 13:06:02 +05:30
co-authored by Claude Sonnet 5
parent e53dfb5a66
commit c7428d0cb2
51 changed files with 10721 additions and 429 deletions
+11
View File
@@ -390,6 +390,17 @@ export class CashierService {
return this.http.get('/shareadvancecollection/requirement', { params: { shareAccountId: String(shareAccountId) } });
}
/**
* Approved share-collection receipts that name no member yet.
*
* A receipt taken straight into a GL account carries no member of its own, so it is never
* attributed automatically. This lists them so the counter can see the voucher they just raised
* and attach it deliberately, instead of being told there is nothing to apply.
*/
getUnattributedShareCollections(): Observable<any> {
return this.http.get('/shareadvancecollection/unattributed');
}
/** Receipts still sitting in Share Sundry, optionally for a single member. */
getUnappliedShareAdvances(clientId?: number): Observable<any> {
const suffix = clientId ? `?clientId=${clientId}` : '';