Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
B
Backend Library Settlement Creator
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open_share
Backend Library Settlement Creator
Commits
65465a28
Commit
65465a28
authored
Mar 20, 2024
by
Muhammad Fahrul
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial commit
parents
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
389 additions
and
0 deletions
+389
-0
SingleSettlement.php
SingleSettlement.php
+371
-0
index.php
index.php
+18
-0
No files found.
SingleSettlement.php
0 → 100644
View file @
65465a28
<?php
class
SingleSettlement
{
public
$operator_code
;
public
$site_code
;
public
function
__construct
(
$operator_code
,
$site_code
)
{
$this
->
operator_code
=
$operator_code
;
$this
->
site_code
=
$site_code
;
}
public
function
create
(
$data
)
{
$results
[
'status'
]
=
false
;
$results
[
'message'
]
=
'Empty data!'
;
$results
[
'data'
]
=
[];
// Perform validation
$data
=
$this
->
validateData
(
$data
);
// Display errors if any
if
(
!
empty
(
$data
[
'errors'
]))
{
foreach
(
$data
[
'errors'
]
as
$field
=>
$fieldErrors
)
{
$listErrorValidate
[]
=
$fieldErrors
;
}
$results
[
'message'
]
=
implode
(
", "
,
$listErrorValidate
);
$results
[
'data'
]
=
$data
[
'data'
];
return
$results
;
}
$data
=
$data
[
'data'
];
// Sorting the transactions by timestamp_format in descending order
usort
(
$data
,
function
(
$a
,
$b
)
{
return
strtotime
(
$b
[
'timestamp_format'
])
-
strtotime
(
$a
[
'timestamp_format'
]);
});
$newline
=
"
\r\n
"
;
$operatorCode
=
$this
->
operator_code
;
$terminalCode
=
$this
->
site_code
;
$locationCode
=
$operatorCode
.
$terminalCode
;
// Last Transaction Time
$selectDate
=
$data
[
0
][
'timestamp_format'
];
$date
=
new
\DateTime
(
$selectDate
);
// $timestampFormat = $date->format('dmy') . "235959";
$timestampFormat
=
$date
->
format
(
'dmyHis'
);
$sendDate
=
$date
->
format
(
'dmy'
)
.
"235959"
;
$forFuture
=
"0000"
;
$sequence
=
"01"
;
$totalRowContent
=
0
;
$totalTrx
=
$this
->
whereBankCode
(
$data
,
[
'0'
,
'3'
,
'2'
,
'1'
,
'5'
,
'4'
,
'7'
]);
$totalRowTrx
=
$totalTrx
[
'count'
];
$totalRowTrx
=
str_pad
(
$totalRowTrx
,
6
,
"0"
,
STR_PAD_LEFT
);
$totalAmountTrx
=
$totalTrx
[
'sum'
];
$totalAmountTrx
=
str_pad
(
$totalAmountTrx
,
9
,
"0"
,
STR_PAD_LEFT
);
$str
=
$totalRowTrx
.
$totalAmountTrx
.
$newline
;
$totalRowContent
=
$totalRowContent
+
1
;
$totalBank
=
0
;
$totalTrxMandiri
=
$this
->
whereBankCode
(
$data
,
[
'0'
]);
$totalRowTrxMandiri
=
$totalTrxMandiri
[
'count'
];
$totalAmountTrxMandiri
=
str_pad
(
0
,
9
,
"0"
,
STR_PAD_LEFT
);
if
(
$totalRowTrxMandiri
>
0
)
{
$totalRowTrxMandiri
=
str_pad
(
$totalRowTrxMandiri
,
6
,
"0"
,
STR_PAD_LEFT
);
$totalAmountTrxMandiri
=
$totalTrxMandiri
[
'sum'
];
$totalAmountTrxMandiri
=
str_pad
(
$totalAmountTrxMandiri
,
9
,
"0"
,
STR_PAD_LEFT
);
$str
.=
'01'
.
$totalRowTrxMandiri
.
$totalAmountTrxMandiri
.
$newline
;
$totalRowContent
=
$totalRowContent
+
1
;
$totalBank
=
$totalBank
+
1
;
}
$totalTrxBNI
=
$this
->
whereBankCode
(
$data
,
[
'3'
]);
$totalRowTrxBNI
=
$totalTrxBNI
[
'count'
];
$totalAmountTrxBNI
=
str_pad
(
0
,
9
,
"0"
,
STR_PAD_LEFT
);
if
(
$totalRowTrxBNI
>
0
)
{
$totalRowTrxBNI
=
str_pad
(
$totalRowTrxBNI
,
6
,
"0"
,
STR_PAD_LEFT
);
$totalAmountTrxBNI
=
$totalTrxBNI
[
'sum'
];
$totalAmountTrxBNI
=
str_pad
(
$totalAmountTrxBNI
,
9
,
"0"
,
STR_PAD_LEFT
);
$str
.=
'02'
.
$totalRowTrxBNI
.
$totalAmountTrxBNI
.
$newline
;
$totalRowContent
=
$totalRowContent
+
1
;
$totalBank
=
$totalBank
+
1
;
}
$totalTrxBRIDesfire
=
$this
->
whereBankCode
(
$data
,
[
'2'
]);
$totalRowTrxBRIDesfire
=
$totalTrxBRIDesfire
[
'count'
];
$totalAmountTrxBRIDesfire
=
str_pad
(
0
,
9
,
"0"
,
STR_PAD_LEFT
);
if
(
$totalRowTrxBRIDesfire
>
0
)
{
$totalRowTrxBRIDesfire
=
str_pad
(
$totalRowTrxBRIDesfire
,
6
,
"0"
,
STR_PAD_LEFT
);
$totalAmountTrxBRIDesfire
=
$totalTrxBRIDesfire
[
'sum'
];
$totalAmountTrxBRIDesfire
=
str_pad
(
$totalAmountTrxBRIDesfire
,
9
,
"0"
,
STR_PAD_LEFT
);
$str
.=
'03'
.
$totalRowTrxBRIDesfire
.
$totalAmountTrxBRIDesfire
.
$newline
;
$totalRowContent
=
$totalRowContent
+
1
;
$totalBank
=
$totalBank
+
1
;
}
$totalTrxBRIJava
=
$this
->
whereBankCode
(
$data
,
[
'1'
]);
$totalRowTrxBRIJava
=
$totalTrxBRIJava
[
'count'
];
$totalAmountTrxBRIJava
=
str_pad
(
0
,
9
,
"0"
,
STR_PAD_LEFT
);
if
(
$totalRowTrxBRIJava
>
0
)
{
$totalRowTrxBRIJava
=
str_pad
(
$totalRowTrxBRIJava
,
6
,
"0"
,
STR_PAD_LEFT
);
$totalAmountTrxBRIJava
=
$totalTrxBRIJava
[
'sum'
];
$totalAmountTrxBRIJava
=
str_pad
(
$totalAmountTrxBRIJava
,
9
,
"0"
,
STR_PAD_LEFT
);
$str
.=
'04'
.
$totalRowTrxBRIJava
.
$totalAmountTrxBRIJava
.
$newline
;
$totalRowContent
=
$totalRowContent
+
1
;
$totalBank
=
$totalBank
+
1
;
}
$totalTrxBCA
=
$this
->
whereBankCode
(
$data
,
[
'5'
]);
$totalRowTrxBCA
=
$totalTrxBCA
[
'count'
];
$totalAmountTrxBCA
=
str_pad
(
0
,
9
,
"0"
,
STR_PAD_LEFT
);
if
(
$totalRowTrxBCA
>
0
)
{
$totalRowTrxBCA
=
str_pad
(
$totalRowTrxBCA
,
6
,
"0"
,
STR_PAD_LEFT
);
$totalAmountTrxBCA
=
$totalTrxBCA
[
'sum'
];
$totalAmountTrxBCA
=
str_pad
(
$totalAmountTrxBCA
,
9
,
"0"
,
STR_PAD_LEFT
);
$str
.=
'05'
.
$totalRowTrxBCA
.
$totalAmountTrxBCA
.
$newline
;
$totalRowContent
=
$totalRowContent
+
1
;
$totalBank
=
$totalBank
+
1
;
}
$totalTrxDKI
=
$this
->
whereBankCode
(
$data
,
[
'4'
,
'7'
]);
$totalRowTrxDKI
=
$totalTrxDKI
[
'count'
];
$totalAmountTrxDKI
=
str_pad
(
0
,
9
,
"0"
,
STR_PAD_LEFT
);
if
(
$totalRowTrxDKI
>
0
)
{
$totalRowTrxDKI
=
str_pad
(
$totalRowTrxDKI
,
6
,
"0"
,
STR_PAD_LEFT
);
$totalAmountTrxDKI
=
$totalTrxDKI
[
'sum'
];
$totalAmountTrxDKI
=
str_pad
(
$totalAmountTrxDKI
,
9
,
"0"
,
STR_PAD_LEFT
);
$str
.=
'06'
.
$totalRowTrxDKI
.
$totalAmountTrxDKI
.
$newline
;
$totalRowContent
=
$totalRowContent
+
1
;
$totalBank
=
$totalBank
+
1
;
}
if
(
$totalRowTrx
>
0
)
{
for
(
$i
=
0
;
$i
<
count
(
$data
);
$i
++
)
{
$str
.=
base64_encode
(
$data
[
$i
][
'sam_report'
])
.
$newline
;
$totalRowContent
=
$totalRowContent
+
1
;
}
$totalRowContent
=
$totalRowContent
+
1
;
$totalRowContent
=
str_pad
(
$totalRowContent
,
4
,
"0"
,
STR_PAD_LEFT
);
$totalBank
=
str_pad
(
$totalBank
,
2
,
"0"
,
STR_PAD_LEFT
);
$str
.=
$operatorCode
.
$totalBank
.
$totalRowContent
;
$formatfile
=
$operatorCode
.
$locationCode
.
$timestampFormat
.
$sendDate
.
$forFuture
.
'_'
.
$sequence
;
$settlement_id
=
str_replace
(
'.'
,
''
,
microtime
(
true
));
$results
[
'status'
]
=
true
;
$results
[
'message'
]
=
'Success create settlement'
;
$results
[
'data'
]
=
[
'settlement_id'
=>
$settlement_id
,
'filename'
=>
$formatfile
,
'business_date'
=>
$date
->
format
(
'Y-m-d'
),
'total_row'
=>
(
$totalRowTrx
+
0
),
'total_amount'
=>
(
$totalAmountTrx
+
0
),
'bri_row'
=>
(
$totalRowTrxBRIDesfire
+
$totalRowTrxBRIJava
),
'bri_amount'
=>
(
$totalAmountTrxBRIDesfire
+
$totalAmountTrxBRIJava
),
'bca_row'
=>
(
$totalRowTrxBCA
+
0
),
'bca_amount'
=>
(
$totalAmountTrxBCA
+
0
),
'bni_row'
=>
(
$totalRowTrxBNI
+
0
),
'bni_amount'
=>
(
$totalAmountTrxBNI
+
0
),
'mandiri_row'
=>
(
$totalRowTrxMandiri
+
0
),
'mandiri_amount'
=>
(
$totalAmountTrxMandiri
+
0
),
'dki_row'
=>
(
$totalRowTrxDKI
+
0
),
'dki_amount'
=>
(
$totalAmountTrxDKI
+
0
),
'content'
=>
$str
,
// 'sent_at' => date('Y-m-d H:i:s'),
// 'last_sent_at' => date('Y-m-d H:i:s'),
'created_at'
=>
date
(
'Y-m-d H:i:s'
)
];
}
return
$results
;
}
function
validateData
(
$data
)
{
$errors
=
[];
foreach
(
$data
as
$key
=>
$item
)
{
if
(
!
isset
(
$item
[
'sam_report'
])
||
empty
(
$item
[
'sam_report'
]))
{
$errors
[]
=
"sam_report is required for item at index
$key
."
;
}
}
if
(
!
empty
(
$errors
))
{
return
[
'errors'
=>
$errors
,
'data'
=>
$data
];
}
foreach
(
$data
as
$key
=>
$item
)
{
$parsingSamReport
=
$this
->
parsingSamReport
(
$item
[
'sam_report'
]);
$data
[
$key
]
=
array_merge
(
$item
,
$parsingSamReport
);
}
foreach
(
$data
as
$key
=>
$item
)
{
if
(
!
isset
(
$item
[
'deduct_report'
])
||
empty
(
$item
[
'deduct_report'
]))
{
$errors
[]
=
"deduct_report is required for item at index
$key
."
;
}
if
(
!
isset
(
$item
[
'bank_code'
])
||
empty
(
$item
[
'bank_code'
]))
{
$zeroValidation
=
isset
(
$item
[
'bank_code'
])
&&
(
$item
[
'bank_code'
]
==
"0"
&&
$item
[
'bank_code'
]
==
0
);
if
(
!
$zeroValidation
)
{
$errors
[]
=
"bank_code is required for item at index
$key
."
;
}
}
if
(
!
isset
(
$item
[
'bank_mid'
])
||
empty
(
$item
[
'bank_mid'
]))
{
$errors
[]
=
"bank_mid is required for item at index
$key
."
;
}
if
(
!
isset
(
$item
[
'bank_tid'
])
||
empty
(
$item
[
'bank_tid'
]))
{
$errors
[]
=
"bank_tid is required for item at index
$key
."
;
}
if
(
!
isset
(
$item
[
'card_no'
])
||
empty
(
$item
[
'card_no'
]))
{
$errors
[]
=
"card_no is required for item at index
$key
."
;
}
if
(
!
isset
(
$item
[
'timestamp'
])
||
empty
(
$item
[
'timestamp'
]))
{
$errors
[]
=
"timestamp is required for item at index
$key
."
;
}
if
(
!
isset
(
$item
[
'amount'
])
||
empty
(
$item
[
'amount'
])
||
!
is_numeric
(
$item
[
'amount'
]))
{
$errors
[]
=
"amount is required and must be numeric for item at index
$key
."
;
}
if
(
!
isset
(
$item
[
'last_deposit'
])
||
empty
(
$item
[
'last_deposit'
])
||
!
is_numeric
(
$item
[
'last_deposit'
]))
{
$errors
[]
=
"last_deposit is required and must be numeric for item at index
$key
."
;
}
}
if
(
!
empty
(
$errors
))
{
return
[
'errors'
=>
$errors
,
'data'
=>
$data
];
}
foreach
(
$data
as
$key
=>
$item
)
{
$item
[
'timestamp_format'
]
=
$this
->
extractTimestamp
(
$item
[
'timestamp'
]);
$item
[
'amount_format'
]
=
(
int
)
$item
[
'amount'
];
$data
[
$key
]
=
$item
;
}
foreach
(
$data
as
$key
=>
$item
)
{
if
(
!
isset
(
$item
[
'timestamp_format'
])
||
empty
(
$item
[
'timestamp_format'
])
||
!
strtotime
(
$item
[
'timestamp_format'
]))
{
$errors
[]
=
"timestamp_format is required and must be in Y-m-d H:i:s format for item at index
$key
."
;
}
if
(
!
isset
(
$item
[
'amount_format'
])
||
empty
(
$item
[
'amount_format'
])
||
!
is_numeric
(
$item
[
'amount_format'
]))
{
$errors
[]
=
"amount_format is required and must be numeric for item at index
$key
."
;
}
}
if
(
!
(
$this
->
validateTimestampFormat
(
$data
)))
{
$errors
[]
=
"timestamp_format must be same date"
;
}
return
[
'errors'
=>
$errors
,
'data'
=>
$data
];
}
function
parsingSamReport
(
$sam_report
)
{
$sam_report
=
explode
(
','
,
$sam_report
);
$deductReport
=
$sam_report
[
0
];
$bankCode
=
$sam_report
[
1
];
$bankMid
=
$sam_report
[
2
];
$bankTid
=
$sam_report
[
3
];
$cardNo
=
$sam_report
[
4
];
$timestamp
=
$sam_report
[
5
];
$amount
=
$sam_report
[
6
];
$lastDeposit
=
$sam_report
[
7
];
$typeFW
=
!
empty
(
$sam_report
[
8
])
?
$sam_report
[
8
]
:
'1.0.0'
;
$results
=
[
'deduct_report'
=>
$deductReport
,
'bank_code'
=>
$bankCode
,
'bank_mid'
=>
$bankMid
,
'bank_tid'
=>
$bankTid
,
'card_no'
=>
$cardNo
,
'timestamp'
=>
$timestamp
,
'amount'
=>
$amount
,
'last_deposit'
=>
$lastDeposit
,
'type_fw'
=>
$typeFW
];
return
$results
;
}
function
extractTimestamp
(
$timestamp
)
{
$dateTimestamp
=
substr
(
$timestamp
,
0
,
-
6
);
$dateMonth
=
substr
(
$dateTimestamp
,
0
,
4
);
$date
=
substr
(
$dateMonth
,
0
,
2
);
$month
=
substr
(
$dateMonth
,
2
,
2
);
$year
=
str_replace
(
$dateMonth
,
''
,
$dateTimestamp
);
$timeTimestamp
=
str_replace
(
$dateTimestamp
,
''
,
$timestamp
);
$hour
=
substr
(
$timeTimestamp
,
0
,
2
);
$minute
=
substr
(
$timeTimestamp
,
2
,
2
);
$second
=
substr
(
$timeTimestamp
,
4
,
2
);
$results
=
$year
.
'-'
.
$month
.
'-'
.
$date
.
' '
.
$hour
.
':'
.
$minute
.
':'
.
$second
;
return
$results
;
}
function
validateTimestampFormat
(
$data
)
{
// Extract date from the first timestamp
$firstTimestamp
=
strtotime
(
$data
[
0
][
'timestamp_format'
]);
$firstDate
=
date
(
'Y-m-d'
,
$firstTimestamp
);
// Iterate through the rest of the timestamps
foreach
(
$data
as
$entry
)
{
$timestamp
=
strtotime
(
$entry
[
'timestamp_format'
]);
$date
=
date
(
'Y-m-d'
,
$timestamp
);
// If any date is different from the first date, return false
if
(
$date
!==
$firstDate
)
{
return
false
;
}
}
// If all dates are the same, return true
return
true
;
}
function
whereBankCode
(
$data
,
$param
)
{
// Initialize count variable
$count
=
0
;
// Initialize sum variable
$sum
=
0
;
// Loop through the data array
foreach
(
$data
as
$item
)
{
// Check if the 'bank_code' of the current item is in the bankCodes array
if
(
in_array
(
$item
[
'bank_code'
],
$param
))
{
// Increment count if the condition is met
$count
++
;
// Add the 'amount_format' value to the sum
$sum
+=
$item
[
'amount_format'
];
}
}
return
[
'count'
=>
$count
,
'sum'
=>
$sum
];
}
}
?>
\ No newline at end of file
index.php
0 → 100644
View file @
65465a28
<?php
require_once
(
'./SingleSettlement.php'
);
$operatorCode
=
'0053'
;
echo
"Operator Code :
$operatorCode
"
;
echo
PHP_EOL
;
$siteCode
=
'00'
;
echo
"Site Code :
$siteCode
"
;
echo
PHP_EOL
;
$data
=
json_decode
(
'[{"report_sam":"603298407594505900840D706E89064206151301000120F2030000AFB8000023012416510000000006000283386FC8,0,0084,15130100,6032984075945059,23012024165100,0000001010,0000047279,R80.41uc"},{"report_sam":"603298100004665600030D706E86285851060128000120010000007D03000010112310575600060000E802038AF3F2,0,0001,06012800,6032981000046656,23012024105758,0000000001,0000000893,2.0.7"},{"report_sam":"603298407594505900840D706E8906420615130100012001000000A6BC0000220124151700000000000000834D1658,0,0084,15130100,6032984075945059,23012024151700,0000000001,0000048294,R80.41uc"},{"report_sam":"603298407594505900840D706E8906420615130100012001000000AEB80000230124190600000000070003832E39D4,0,0084,15130100,6032984075945059,23012024190600,0000000001,0000047278,R80.41uc"}]'
,
true
);
$results
=
(
new
SingleSettlement
(
$operatorCode
,
$siteCode
))
->
create
(
$data
);
echo
"Data : "
.
json_encode
(
$data
,
JSON_PRETTY_PRINT
);
echo
PHP_EOL
;
echo
"Results : "
.
json_encode
(
$results
,
JSON_PRETTY_PRINT
);
?>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment