@@ -185,58 +185,42 @@ export class CreateGlimAccountComponent {
185185 } ;
186186 }
187187
188- setData ( client : any , totalLoan : number ) : any {
188+ setData ( applicationId : number , client : any , totalLoan : number , isFirst : boolean , isLast : boolean ) : any {
189189 const locale = this . settingsService . language . code ;
190190 const dateFormat = this . settingsService . dateFormat ;
191191 // const monthDayFormat = 'dd MMMM';
192- const data = {
192+ const data : any = {
193193 ...this . loansAccount ,
194- charges : ( this . loansAccount . charges ?? [ ] )
195- . map ( ( charge : any ) => {
196- const chargeId = charge . chargeId ?? charge . id ;
197- if ( chargeId == null ) {
198- return null ;
199- }
200- const mappedCharge : any = {
201- chargeId,
202- amount : charge . amount
203- } ;
204- if ( charge . id && charge . id !== chargeId ) {
205- mappedCharge . id = charge . id ;
206- }
207- if ( charge . dueDate ) {
208- mappedCharge . dueDate = this . dateUtils . formatDate ( charge . dueDate , dateFormat ) ;
209- }
210- if ( charge . feeInterval !== undefined ) {
211- mappedCharge . feeInterval = charge . feeInterval ;
212- }
213- if ( charge . feeOnMonthDay !== undefined ) {
214- mappedCharge . feeOnMonthDay = charge . feeOnMonthDay ;
215- }
216- return mappedCharge ;
217- } )
218- . filter ( Boolean ) ,
194+ charges : this . loansAccount . charges . map ( ( charge : any ) => ( {
195+ chargeId : charge . id ,
196+ amount : charge . amount ,
197+ currency : charge . currency
198+ } ) ) ,
219199 clientId : client . id ,
220200 totalLoan : totalLoan ,
221201 loanType : 'glim' ,
202+ applicationId : applicationId ,
222203 amortizationType : 1 ,
223- isParentAccount : true ,
224204 principal : client . principal ,
225205 syncDisbursementWithMeeting : false ,
226206 expectedDisbursementDate : this . dateUtils . formatDate ( this . loansAccount . expectedDisbursementDate , dateFormat ) ,
227207 submittedOnDate : this . dateUtils . formatDate ( this . loansAccount . submittedOnDate , dateFormat ) ,
228- dateFormat,
229- // monthDayFormat ,
230- locale
208+ dateFormat : dateFormat ,
209+ locale : locale ,
210+ groupId : this . loansAccountTemplate . group . id
231211 } ;
232- data . groupId = this . loansAccountTemplate . group . id ;
233-
212+ if ( isFirst ) {
213+ data . isParentAccount = true ;
214+ }
215+ if ( isLast ) {
216+ data . lastApplication = true ;
217+ }
234218 delete data . principalAmount ;
235- // TODO: 2025-03-17: Apparently (?!) unsupported for GLIM
236219 delete data . allowPartialPeriodInterestCalculation ;
237220 delete data . multiDisburseLoan ;
238221 delete data . isFloatingInterestRate ;
239-
222+ delete data . moratoriumPrincipal ;
223+ delete data . moratoriumInterest ;
240224 return JSON . stringify ( data ) ;
241225 }
242226
@@ -245,12 +229,17 @@ export class CreateGlimAccountComponent {
245229 const requestData = [ ] ;
246230 const memberSelected = this . selectedMembers ?. selectedMembers ?? [ ] ;
247231 const totalLoan = this . totalLoanAmount ( ) ;
232+ const applicationId = Math . floor ( 1000000000 + Math . random ( ) * 9000000000 ) ;
233+
248234 for ( let index = 0 ; index < memberSelected . length ; index ++ ) {
235+ const isFirst = index === 0 ;
236+ const isLast = index === memberSelected . length - 1 ;
249237 requestData . push ( {
250238 requestId : index . toString ( ) ,
239+ reference : index === 0 ? null : ( index - 1 ) . toString ( ) ,
251240 method : 'POST' ,
252241 relativeUrl : 'loans' ,
253- body : this . setData ( memberSelected [ index ] , totalLoan )
242+ body : this . setData ( applicationId , memberSelected [ index ] , totalLoan , isFirst , isLast )
254243 } ) ;
255244 }
256245 return requestData ;
@@ -265,57 +254,10 @@ export class CreateGlimAccountComponent {
265254 return total ;
266255 }
267256
268- /**
269- * Creates a new GLIM account.
270- */
271- submit ( ) {
272- this . selectedMembers = this . loansActiveClientMembers ?. selectedClientMembers ;
273- const memberSelected = this . loansActiveClientMembers ?. selectedClientMembers ?. selectedMembers ?? [ ] ;
274- if ( ! memberSelected . length ) return ;
275- const gsimMemberIds = new Set ( this . dataSource . map ( ( m : any ) => Number ( m . id ) ) ) ;
276- for ( const member of memberSelected ) {
277- const memberId = Number ( member . id ) ;
278- // Validate savings account ownership
279- const ownerId = Number ( member . linkAccountOwnerId ) ;
280- if ( member . linkAccountId && member . linkAccountOwnerId && ownerId !== memberId ) {
281- this . i18nService . translate ( 'errors.linkedSavingsAccountOwnership' ) . subscribe ( ( msg : string ) => {
282- this . notify ( { defaultUserMessage : msg , errors : [ ] } , { memberId } ) ;
283- } ) ;
284- return ;
285- }
286- // Validate GSIM membership
287- if ( ! gsimMemberIds . has ( memberId ) ) {
288- this . i18nService . translate ( 'errors.clientNotInGSIM' , { id : memberId } ) . subscribe ( ( msg : string ) => {
289- this . notify ( { defaultUserMessage : msg , errors : [ ] } , { memberId } ) ;
290- } ) ;
291- return ;
292- }
293- }
294-
295- // Use date format from settingsService for interestChargedFromDate
296- const data = this . buildRequestData ( ) ;
297- this . loansService . createGlimAccount ( data ) . subscribe ( ( response : any ) => {
298- const body = JSON . parse ( response [ 0 ] . body ) ;
299- if ( body . glimId ) {
300- this . router . navigate (
301- [
302- '../' ,
303- body . glimId
304- ] ,
305- { relativeTo : this . route }
306- ) ;
307- } else {
308- this . notify ( body , { batchSize : data . length } ) ;
309- }
310- } ) ;
311- }
312-
313- notify ( body : any , context ?: { [ k : string ] : unknown } ) {
314- const parts : string [ ] = [ String ( body ?. defaultUserMessage ?? '' ) ] ;
315- if ( Array . isArray ( body ?. errors ) ) {
316- for ( const e of body . errors ) parts . push ( String ( e ?. developerMessage ?? '' ) ) ;
317- }
318- if ( context ) parts . push ( `Context: ${ JSON . stringify ( context ) } ` ) ;
319- console . error ( parts . join ( ' ' ) . trim ( ) ) ;
257+ notify ( body : any , data : any ) {
258+ let message = body . defaultUserMessage + ' ' ;
259+ body . errors ?. forEach ( ( error : any ) => ( message += error . developerMessage + ' ' ) ) ;
260+ message += 'Data: ' + JSON . stringify ( data ) ;
261+ console . error ( message ) ;
320262 }
321263}
0 commit comments