beginTransaction(); // Prevent duplicate challenge claims using paymentsDriverPoints table if (strpos($paymentMethod, 'daily_') === 0 || strpos($paymentMethod, 'weekly_') === 0) { $checkSql = "SELECT id FROM paymentsDriverPoints WHERE driverID = :driver_id AND payment_method = :challenge_id AND DATE(created_at) = CURDATE() FOR UPDATE"; $stmtCheck = $con->prepare($checkSql); $stmtCheck->execute([ ':driver_id' => $driverID, ':challenge_id' => $paymentMethod ]); if ($stmtCheck->rowCount() > 0) { $con->rollBack(); printFailure("Reward already claimed today"); exit(); } } $sql = "INSERT INTO `driverWallet` ( `driverID`, `paymentID`, `amount`, `paymentMethod` ) VALUES ( :driverID, :paymentID, :amount, :paymentMethod );"; $stmt = $con->prepare($sql); $stmt->execute([ ':driverID' => $driverID, ':paymentID' => $paymentID, ':amount' => $amount, ':paymentMethod' => $paymentMethod ]); if ($stmt->rowCount() > 0) { // If points are provided, also insert into paymentsDriverPoints if (!empty($points)) { $sqlPoints = "INSERT INTO `paymentsDriverPoints` ( `amount`, `payment_method`, `driverID` ) VALUES ( :points, :paymentMethod, :driverID );"; $stmtPoints = $con->prepare($sqlPoints); $stmtPoints->execute([ ':points' => $points, ':paymentMethod' => $paymentMethod, ':driverID' => $driverID ]); } $con->commit(); printSuccess("Record saved successfully"); } else { $con->rollBack(); printFailure("Failed to save record"); } } catch (Exception $e) { if ($con->inTransaction()) { $con->rollBack(); } error_log("add_s2s_reward: " . $e->getMessage()); printFailure("An error occurred"); } ?>