Files
NEFT_OUTWARD_JOB/processor.py
T
2026-04-28 17:35:33 +05:30

116 lines
3.5 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 count: %s", len(rows))
for r in rows:
bank_code = self.config.BANK_CODE_MAPPING.get(r["DCCB_CODE"])
if not bank_code:
logger.info(
"Skipping TXN_NO=%s due to missing bank mapping for DCCB=%s",
r["TXN_NO"],
r["DCCB_CODE"]
)
continue
payload = {
"bankCode": bank_code,
"rrn": r["RRN_TWO"],
"branchCode": r["BR_CODE"],
"itemType": 0,
"queueType": "02",
"reterieveTop": "20"
}
logger.info(
"Calling fetchAllQueue API for TXN_NO=%s, RRN=%s with payload=%s",
r["TXN_NO"],
r["RRN_TWO"],
payload
)
response = self.api.fetch(payload)
# Log FULL API response
logger.info(
"API response received for TXN_NO=%s, RRN_TWO=%s : %s",
r["TXN_NO"],
r["RRN_TWO"],
response
)
items = response.get("response", {}).get("VwQueueItems", [])
if not items:
logger.info(
"No VwQueueItems found for TXN_NO=%s, RRN_TWO=%s",
r["TXN_NO"],
r["RRN_TWO"]
)
continue
status = items[0].get("status")
logger.info(
"Queue item status for TXN_NO=%s, RRN_TWO=%s is %s",
r["TXN_NO"],
r["RRN_two"],
status
)
if status != "PROCESSED":
logger.info(
"Skipping TXN_NO=%s as status is not PROCESSED",
r["TXN_NO"]
)
continue
item = items[0]
sender_ifsc = item.get("sender_ifsc")
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_ifsc": sender_ifsc,
"sender_name": r["REMITTER_NAME"],
"receiver_name": r["BENEFICIARY_NAME"],
"beneficiary_address": r["BENEFICIARY_ADD"],
"sender_info": item["sendeReceiverInfo"]
}
# Log DB payload BEFORE insert
logger.info(
"Inserting outward_neft_api_log for TXN_NO=%s with data=%s",
r["TXN_NO"],
log_data
)
# Insert into outward_neft_api_log
self.repo.insert_outward_log(log_data)
# Update MARK_TYPE
self.repo.mark_processed(r["TXN_NO"])
logger.info(
"SUCCESS: Inserted outward log and updated MARK_TYPE=Y for TXN_NO=%s, RRN_TWO=%s",
r["TXN_NO"],
r["RRN_TWO"]
)