@@ -177,58 +177,42 @@ export class CreateGlimAccountComponent {
177177 } ;
178178 }
179179
180- setData ( client : any , totalLoan : number ) : any {
180+ setData ( applicationId : number , client : any , totalLoan : number , isFirst : boolean , isLast : boolean ) : any {
181181 const locale = this . settingsService . language . code ;
182182 const dateFormat = this . settingsService . dateFormat ;
183183 // const monthDayFormat = 'dd MMMM';
184- const data = {
184+ const data : any = {
185185 ...this . loansAccount ,
186- charges : ( this . loansAccount . charges ?? [ ] )
187- . map ( ( charge : any ) => {
188- const chargeId = charge . chargeId ?? charge . id ;
189- if ( chargeId == null ) {
190- return null ;
191- }
192- const mappedCharge : any = {
193- chargeId,
194- amount : charge . amount
195- } ;
196- if ( charge . id && charge . id !== chargeId ) {
197- mappedCharge . id = charge . id ;
198- }
199- if ( charge . dueDate ) {
200- mappedCharge . dueDate = this . dateUtils . formatDate ( charge . dueDate , dateFormat ) ;
201- }
202- if ( charge . feeInterval !== undefined ) {
203- mappedCharge . feeInterval = charge . feeInterval ;
204- }
205- if ( charge . feeOnMonthDay !== undefined ) {
206- mappedCharge . feeOnMonthDay = charge . feeOnMonthDay ;
207- }
208- return mappedCharge ;
209- } )
210- . filter ( Boolean ) ,
186+ charges : this . loansAccount . charges . map ( ( charge : any ) => ( {
187+ chargeId : charge . id ,
188+ amount : charge . amount ,
189+ currency : charge . currency
190+ } ) ) ,
211191 clientId : client . id ,
212192 totalLoan : totalLoan ,
213193 loanType : 'glim' ,
194+ applicationId : applicationId ,
214195 amortizationType : 1 ,
215- isParentAccount : true ,
216196 principal : client . principal ,
217197 syncDisbursementWithMeeting : false ,
218198 expectedDisbursementDate : this . dateUtils . formatDate ( this . loansAccount . expectedDisbursementDate , dateFormat ) ,
219199 submittedOnDate : this . dateUtils . formatDate ( this . loansAccount . submittedOnDate , dateFormat ) ,
220- dateFormat,
221- // monthDayFormat ,
222- locale
200+ dateFormat : dateFormat ,
201+ locale : locale ,
202+ groupId : this . loansAccountTemplate . group . id
223203 } ;
224- data . groupId = this . loansAccountTemplate . group . id ;
225-
204+ if ( isFirst ) {
205+ data . isParentAccount = true ;
206+ }
207+ if ( isLast ) {
208+ data . lastApplication = true ;
209+ }
226210 delete data . principalAmount ;
227- // TODO: 2025-03-17: Apparently (?!) unsupported for GLIM
228211 delete data . allowPartialPeriodInterestCalculation ;
229212 delete data . multiDisburseLoan ;
230213 delete data . isFloatingInterestRate ;
231-
214+ delete data . moratoriumPrincipal ;
215+ delete data . moratoriumInterest ;
232216 return JSON . stringify ( data ) ;
233217 }
234218
@@ -237,12 +221,17 @@ export class CreateGlimAccountComponent {
237221 const requestData = [ ] ;
238222 const memberSelected = this . selectedMembers ?. selectedMembers ?? [ ] ;
239223 const totalLoan = this . totalLoanAmount ( ) ;
224+ const applicationId = Math . floor ( 1000000000 + Math . random ( ) * 9000000000 ) ;
225+
240226 for ( let index = 0 ; index < memberSelected . length ; index ++ ) {
227+ const isFirst = index === 0 ;
228+ const isLast = index === memberSelected . length - 1 ;
241229 requestData . push ( {
242230 requestId : index . toString ( ) ,
231+ reference : index === 0 ? null : ( index - 1 ) . toString ( ) ,
243232 method : 'POST' ,
244233 relativeUrl : 'loans' ,
245- body : this . setData ( memberSelected [ index ] , totalLoan )
234+ body : this . setData ( applicationId , memberSelected [ index ] , totalLoan , isFirst , isLast )
246235 } ) ;
247236 }
248237 return requestData ;
@@ -257,57 +246,10 @@ export class CreateGlimAccountComponent {
257246 return total ;
258247 }
259248
260- /**
261- * Creates a new GLIM account.
262- */
263- submit ( ) {
264- this . selectedMembers = this . loansActiveClientMembers ?. selectedClientMembers ;
265- const memberSelected = this . loansActiveClientMembers ?. selectedClientMembers ?. selectedMembers ?? [ ] ;
266- if ( ! memberSelected . length ) return ;
267- const gsimMemberIds = new Set ( this . dataSource . map ( ( m : any ) => Number ( m . id ) ) ) ;
268- for ( const member of memberSelected ) {
269- const memberId = Number ( member . id ) ;
270- // Validate savings account ownership
271- const ownerId = Number ( member . linkAccountOwnerId ) ;
272- if ( member . linkAccountId && member . linkAccountOwnerId && ownerId !== memberId ) {
273- this . i18nService . translate ( 'errors.linkedSavingsAccountOwnership' ) . subscribe ( ( msg : string ) => {
274- this . notify ( { defaultUserMessage : msg , errors : [ ] } , { memberId } ) ;
275- } ) ;
276- return ;
277- }
278- // Validate GSIM membership
279- if ( ! gsimMemberIds . has ( memberId ) ) {
280- this . i18nService . translate ( 'errors.clientNotInGSIM' , { id : memberId } ) . subscribe ( ( msg : string ) => {
281- this . notify ( { defaultUserMessage : msg , errors : [ ] } , { memberId } ) ;
282- } ) ;
283- return ;
284- }
285- }
286-
287- // Use date format from settingsService for interestChargedFromDate
288- const data = this . buildRequestData ( ) ;
289- this . loansService . createGlimAccount ( data ) . subscribe ( ( response : any ) => {
290- const body = JSON . parse ( response [ 0 ] . body ) ;
291- if ( body . glimId ) {
292- this . router . navigate (
293- [
294- '../' ,
295- body . glimId
296- ] ,
297- { relativeTo : this . route }
298- ) ;
299- } else {
300- this . notify ( body , { batchSize : data . length } ) ;
301- }
302- } ) ;
303- }
304-
305- notify ( body : any , context ?: { [ k : string ] : unknown } ) {
306- const parts : string [ ] = [ String ( body ?. defaultUserMessage ?? '' ) ] ;
307- if ( Array . isArray ( body ?. errors ) ) {
308- for ( const e of body . errors ) parts . push ( String ( e ?. developerMessage ?? '' ) ) ;
309- }
310- if ( context ) parts . push ( `Context: ${ JSON . stringify ( context ) } ` ) ;
311- console . error ( parts . join ( ' ' ) . trim ( ) ) ;
249+ notify ( body : any , data : any ) {
250+ let message = body . defaultUserMessage + ' ' ;
251+ body . errors ?. forEach ( ( error : any ) => ( message += error . developerMessage + ' ' ) ) ;
252+ message += 'Data: ' + JSON . stringify ( data ) ;
253+ console . error ( message ) ;
312254 }
313255}
0 commit comments