62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
from datetime import datetime
|
|
from logging_config import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
class Processor:
|
|
def __init__(self, config, repo, api):
|
|
self.config = config
|
|
self.repo = repo
|
|
self.api = api
|
|
|
|
def process(self):
|
|
rows = self.repo.get_pending_rrns_today()
|
|
logger.info("Pending transactions: %s", len(rows))
|
|
|
|
for r in rows:
|
|
bank_code = self.config.BANK_CODE_MAPPING.get(r["DCCB_CODE"])
|
|
if not bank_code:
|
|
logger.warning("No bank mapping for DCCB=%s", r["DCCB_CODE"])
|
|
continue
|
|
|
|
payload = {
|
|
"bankCode": bank_code,
|
|
"rrn": r["RRN"],
|
|
"branchCode": r["BR_CODE"],
|
|
"itemType": 0,
|
|
"queueType": "02",
|
|
"reterieveTop": "20"
|
|
}
|
|
|
|
response = self.api.fetch(payload)
|
|
items = response.get("response", {}).get("VwQueueItems", [])
|
|
|
|
if not items or items[0].get("status") != "PROCESSED":
|
|
continue
|
|
|
|
item = items[0]
|
|
|
|
log_data = {
|
|
"bankcode": bank_code,
|
|
"jrnl_id": item["journalId"],
|
|
"ref_no": item.get("remarks"),
|
|
"tran_date": datetime.now().strftime("%d%m%Y"),
|
|
"txn_amt": r["TXN_AMT"],
|
|
"recv_ac": r["DEST_AC_NO"],
|
|
"send_ac": r["SRC_AC_NO"],
|
|
"ifsc": r["IFSC_CODE"],
|
|
"sender_name": r["REMITTER_NAME"],
|
|
"receiver_name": r["BENEFICIARY_NAME"],
|
|
"beneficiary_address": r["BENEFICIARY_ADD"],
|
|
"sender_info": item["sendeReceiverInfo"]
|
|
}
|
|
|
|
# INSERT FIRST
|
|
self.repo.insert_outward_log(log_data)
|
|
|
|
# THEN MARK AS PROCESSED
|
|
self.repo.mark_processed(r["TXN_NO"])
|
|
|
|
logger.info(
|
|
"Inserted outward log and marked TXN_NO=%s", r["TXN_NO"]
|
|
) |