@@ -4,11 +4,12 @@ import { IsPublic } from '../auth/decorator/public.decorator';
44import { ERROR_CODE } from '../exceptions' ;
55import { ApiCreatedResponse , ApiOperation , ApiTags } from '@nestjs/swagger' ;
66import { ApiAppErrorResponse } from '../app.dto' ;
7+ import { ConfigModule } from '../config/config.module' ;
78
89@Controller ( 'admin' )
910@ApiTags ( 'Authentication' )
1011export class AdminController {
11- constructor ( private admin : AdminService ) { }
12+ constructor ( private admin : AdminService , private config : ConfigModule ) { }
1213
1314 @HttpCode ( HttpStatus . CREATED )
1415 @IsPublic ( )
@@ -24,30 +25,30 @@ export class AdminController {
2425 ERROR_CODE . INVALID_TOKEN_FORMAT ,
2526 'The token is not in the right format. This may happen if you did not use the syntax `Bearer {token there}`, or the token was not generated by the API' ,
2627 )
27- async generateReport ( @Headers ( ) headers : Record < string , string > ) {
28- // this.admin.getUsersReport();
28+ async generateReport ( ) {
29+ const users = await this . admin . getUsersReport ( ) ;
30+ const ctrlSum = users . reduce ( ( sum , user ) => sum + Math . min ( 10000 , user . balance ) , 0 ) / 100 ;
2931 return this . toXML ( {
3032 Document : {
3133 xmlns : 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.12' ,
3234 'xmlns:xsi' : 'http://www.w3.org/2001/XMLSchema-instance' ,
3335 CstmrCdtTrfInitn : {
3436 GrpHdr : {
35- MsgId : { value : '0' . slice ( 0 , 35 ) } ,
37+ MsgId : { value : `BUCKUTT- ${ Date . now ( ) } ` . slice ( 0 , 35 ) } ,
3638 CreDtTm : { value : new Date ( ) . toISOString ( ) . slice ( 0 , - 5 ) } ,
37- NbOfTxs : { value : 0 } ,
38- CtrlSum : { value : 0 } ,
39+ NbOfTxs : { value : users . length } ,
40+ CtrlSum : { value : ctrlSum } ,
3941 InitgPty : {
40- Nm : { value : 'Company Name' . slice ( 0 , 140 ) } ,
41- Id : { PrvtId : { Othr : { Id : { value : 'Company ID' . slice ( 0 , 256 ) } } } } ,
42+ Nm : { value : this . config . XML_EXPORT_COMPANY_NAME . slice ( 0 , 140 ) } ,
4243 } ,
4344 } ,
4445 PmtInf : [
4546 {
46- PmtInfId : { value : '0' . slice ( 0 , 35 ) } ,
47+ PmtInfId : { value : `BUCKUTT-P1- ${ Date . now ( ) } ` . slice ( 0 , 35 ) } ,
4748 PmtMtd : { value : 'TRF' } ,
4849 BtchBookg : { value : false } , // Set to true to display only one entry in the bank
49- NbOfTxs : { value : 0 } ,
50- CtrlSum : { value : 0 } ,
50+ NbOfTxs : { value : users . length } ,
51+ CtrlSum : { value : ctrlSum } ,
5152 PmtTpInf : {
5253 InstrPrty : { value : 'NORM' } ,
5354 SvcLvl : {
@@ -59,53 +60,55 @@ export class AdminController {
5960 } ,
6061 ReqdExctnDt : { DtTm : { value : new Date ( ) . toISOString ( ) . slice ( 0 , - 5 ) } } ,
6162 Dbtr : {
62- Nm : { value : 'Company Name' . slice ( 0 , 140 ) } ,
63+ Nm : { value : this . config . XML_EXPORT_COMPANY_NAME . slice ( 0 , 140 ) } ,
6364 PstlAdr : {
6465 Ctry : { value : 'FR' } ,
66+ AdrLine : [
67+ this . config . XML_EXPORT_COMPANY_ADDRESS . slice ( 0 , 70 ) ,
68+ this . config . XML_EXPORT_COMPANY_ADDRESS_2 . slice ( 0 , 70 ) ,
69+ ] . map ( ( v ) => ( { value : v } ) ) ,
6570 } ,
6671 } ,
6772 DbtrAcct : {
6873 Id : {
69- IBAN : { value : 'FROMIBAN' } ,
74+ IBAN : { value : this . config . XML_EXPORT_COMPANY_IBAN } ,
7075 } ,
7176 } ,
7277 DbtrAgt : {
7378 FinInstnId : {
74- BICFI : { value : 'FROMBIC' } ,
79+ BICFI : { value : this . config . XML_EXPORT_COMPANY_BIC } ,
7580 } ,
7681 } ,
7782 ChrgBr : { value : 'SLEV' } ,
78- CdtTrfTxInf : [
79- {
80- PmtId : {
81- EndToEndId : { value : '0' . slice ( 0 , 35 ) } ,
82- } ,
83- Amt : {
84- InstdAmt : {
85- value : 0 ,
86- Ccy : 'EUR' ,
87- } ,
88- } ,
89- CdtrAgt : {
90- FinInstnId : {
91- BICFI : { value : 'TOBIC' } ,
92- } ,
83+ CdtTrfTxInf : users . map ( ( user ) => ( {
84+ PmtId : {
85+ EndToEndId : { value : `buckutt-user-${ user . id } ` . slice ( 0 , 35 ) } ,
86+ } ,
87+ Amt : {
88+ InstdAmt : {
89+ value : Math . min ( 100 , user . balance / 100 ) ,
90+ Ccy : 'EUR' ,
9391 } ,
94- Cdtr : {
95- Nm : { value : 'User Name' . slice ( 0 , 140 ) } ,
92+ } ,
93+ CdtrAgt : {
94+ FinInstnId : {
95+ BICFI : { value : 'TOBIC' } ,
9696 } ,
97- CdtrAcct : {
98- Id : {
99- IBAN : { value : 'TOIBAN' } ,
100- } ,
97+ } ,
98+ Cdtr : {
99+ Nm : { value : sanitize ( `${ user . firstName } ${ user . lastName . toUpperCase ( ) } ` ) . slice ( 0 , 140 ) } ,
100+ } ,
101+ CdtrAcct : {
102+ Id : {
103+ IBAN : { value : user . iban } ,
101104 } ,
102- RmtInf : {
103- Ustrd : {
104- value : 'Transaction description' . slice ( 0 , 140 ) ,
105- } ,
105+ } ,
106+ RmtInf : {
107+ Ustrd : {
108+ value : 'Remboursement BuckUTT' . slice ( 0 , 140 ) ,
106109 } ,
107110 } ,
108- ] ,
111+ } ) ) ,
109112 } ,
110113 ] ,
111114 } ,
@@ -144,3 +147,7 @@ function isChild(
144147) : props is [ key : string , value : XMLObject | Array < XMLObject > ] {
145148 return props [ 0 ] === 'value' || ( ( props [ 1 ] instanceof Array || typeof props [ 1 ] === 'object' ) && props [ 1 ] !== null ) ;
146149}
150+
151+ function sanitize ( str : string ) {
152+ return str . normalize ( 'NFD' ) . replace ( / [ \u0300 - \u036f ] / g, '' ) ;
153+ }
0 commit comments