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"] )