Skip to main content

Overview

The RAF Admin Console is a staff-facing Django app (InviteFriendConsole) bundled with the Banno integration. FI staff sign in with a Django user account (is_staff=True) and manage campaigns, review individual referrals, and pay or record reward payouts. The console is mounted at /console/ on the same service that hosts the member plugin. Authentication is Django’s standard session login — there is no Banno OIDC on the admin side.

1. Overview Dashboard

RAF Admin Console Overview for Garden Credit Union. Seven stat tiles: Total Referrals 1, Submitted 1, Criteria Met 0, Ready to Pay 0, Paid 0, Expired 0, Members 8. Below is a Campaigns table listing Auto Loan Summer Push, Premium Checking Q2 2026, Savings Promo Blitz, Spring 2026 Referral, and Winter 2025 Referral (Expired), with columns Name, Type, User ID, Priority, Start Date, End Date, Inviter Reward Amount, Acceptor Reward Amount, Edit, and Status toggle. The landing page shows at-a-glance counts scoped to the signed-in staff user’s tenant. Stat tiles: Campaigns table: Lists every campaign for the tenant — active and historical. Each row includes the campaign type (NewRelationshipCampaign / NewProductCampaign), optional restriction User ID, priority, start/end dates, and both reward amounts.
  • Edit — opens the edit modal for that campaign.
  • Status toggle — fires POST /console/campaigns/<id>/toggle/. A green toggle indicates the campaign is active and currently within its date window. Toggling off effectively ends the campaign immediately.
  • Add New Campaign — opens the new-campaign form described below.
Campaign priority — when multiple campaigns match a submission, the campaign with the highest priority is the one surfaced first in the inviter tile. During submission itself, a referral row is created for every matching active campaign regardless of priority.

2. Referrals List

RAF Admin Console Referrals list view. Filters across the top: From Date, To Date, Transaction Status, Campaign dropdown, with a Search and Clear. Table row showing campaign 'Auto Loan Summer Push', inviter 'Dinesh Prasad', inviter reward host account ID 'b5bbc025-3f12-4523-8149-b0bda0fae57e', inviter amount $75, acceptor 'rg', acceptor host account ID 'c36c058a-8e4e-45bd-8fe0-4a6392bc1ba8', acceptor amount $25. Buttons at bottom: Pay Reward, Mark as Paid, Download. The referrals list is the primary operational view for FI staff. Filters: Columns: Bulk actions: A helper note at the bottom clarifies the host account ID column: “Inviter Reward Host Account ID: Inviter Checking Share Host Account ID” — the account resolution picks the inviter’s primary checking account unless the campaign’s inviter_rda_codes narrows it to a different product code.

3. New Campaign Form

New Campaign form. Top row: Name, Campaign Type (New Relationship Campaign selected), Creator User ID, Start Date, End Date. Second row: Inviter Amount, Acceptor Amount, CCW Days (60), Payment Mode (Manual selected), Max Inviter Rewards with Enable checkbox and Count. Third row: Inviter RDA Type, Acceptor RDA Type, Do Not Pay Codes (e.g., INFLCR1, INFLCR2), Priority, Promo Code. Criteria Config section with Logic builder and four toggleable criteria: Account (Checking), Balance (0), Payroll (500), Debit (5). Cancel and Submit buttons. Campaign creation is the FI’s main setup flow. Every field maps directly to a column on Campaign.

Top-level fields

Payment Mode semantics

Criteria Config builder

The Logic field builds the composition expression (e.g., account AND balance AND (payroll OR debit)) stored on criteria_config.logic. Each checkbox enables that criterion; unchecked criteria are ignored by the engine regardless of logic.

Submit

On Submit the form posts to POST /console/campaigns/. The server validates:
  • start_date <= end_date.
  • At least one criterion is enabled if the type is NewProductCampaign.
  • promo_code is unique across active campaigns for this tenant.
  • do_not_pay_codes is valid JSON.
On success the new campaign row is visible on the overview dashboard. Toggling it on makes it live immediately (subject to its date window).