get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}vv_withdrawals WHERE id=%d", $wid ) ); if ( $row && $action === 'approve' && $row->status === 'pending' ) { $wpdb->update( "{$wpdb->prefix}vv_withdrawals", [ 'status' => 'approved', 'admin_note' => $note, 'processed_at' => current_time( 'mysql' ), ], [ 'id' => $wid ] ); do_action( 'vv_withdrawal_approved', $row->vendor_id, $row->amount ); echo '

Withdrawal approved.

'; } elseif ( $row && $action === 'reject' ) { // Refund the amount back to the vendor's balance VV_Helpers::record_transaction( $row->vendor_id, $row->amount, 'credit', 'Withdrawal rejected — refunded', 0, 0 ); $wpdb->update( "{$wpdb->prefix}vv_withdrawals", [ 'status' => 'rejected', 'admin_note' => $note, ], [ 'id' => $wid ] ); do_action( 'vv_withdrawal_rejected', $row->vendor_id, $note ); echo '

Withdrawal rejected and amount refunded to vendor.

'; } } // Filters $status_filter = isset( $_GET['status'] ) ? sanitize_text_field( $_GET['status'] ) : 'pending'; $statuses = [ 'pending', 'approved', 'rejected' ]; $where = in_array( $status_filter, $statuses ) ? $wpdb->prepare( "WHERE w.status=%s", $status_filter ) : "WHERE 1=1"; $withdrawals = $wpdb->get_results( "SELECT w.*, u.display_name, u.user_email FROM {$wpdb->prefix}vv_withdrawals w LEFT JOIN {$wpdb->prefix}users u ON w.vendor_id = u.ID $where ORDER BY w.created_at DESC LIMIT 200" ); echo '

' . esc_html__( 'Withdrawal Requests', 'vendorverse' ) . '

'; echo '
'; foreach ( array_merge( [ 'all' ], $statuses ) as $s ) { echo '' . ucfirst( $s ) . ' '; } echo '
'; echo ''; echo ''; foreach ( $withdrawals as $w ) { $bank = json_decode( $w->account_details ?? '{}', true ) ?? []; echo ''; echo ''; echo ''; echo ''; echo ''; $badge = [ 'pending' => '#f0c040', 'approved' => '#00a32a', 'rejected' => '#d63638' ][ $w->status ] ?? '#666'; echo ''; echo ''; echo ''; echo ''; } echo '
IDVendorAmountMethodStatusDateBank DetailsActions
' . esc_html( $w->id ) . '' . esc_html( $w->display_name ) . '
' . esc_html( $w->user_email ) . '
' . wc_price( $w->amount ) . '' . esc_html( $w->method ) . '' . esc_html( $w->status ) . '' . esc_html( date( 'Y-m-d', strtotime( $w->created_at ) ) ) . ''; if ( ! empty( $bank ) ) { foreach ( $bank as $k => $v ) echo esc_html( ucfirst( str_replace( '_', ' ', $k ) ) . ': ' . $v ) . '
'; } else { // Fallback to user meta $uid = $w->vendor_id; $fields = [ 'vv_bank_account_name' => 'Name', 'vv_bank_account' => 'Account', 'vv_name_of_bank' => 'Bank', 'vv_ifsc_code' => 'IFSC' ]; foreach ( $fields as $meta => $label ) { $val = get_user_meta( $uid, $meta, true ); if ( $val ) echo esc_html( $label . ': ' . $val ) . '
'; } } echo '
'; if ( $w->status === 'pending' ) { echo '
'; wp_nonce_field( 'vv_withdrawal_action', 'vv_nonce' ); echo ''; echo ''; echo ''; echo ''; echo '
'; } else { echo '' . esc_html( $w->admin_note ) . ''; } echo '
'; } }