diff --git a/subscribie/blueprints/admin/__init__.py b/subscribie/blueprints/admin/__init__.py index 77c883b9..246460c0 100644 --- a/subscribie/blueprints/admin/__init__.py +++ b/subscribie/blueprints/admin/__init__.py @@ -82,6 +82,7 @@ get_number_of_subscribers, get_number_of_signups, get_number_of_one_off_purchases, + get_number_of_transactions_with_donations, ) import stripe @@ -461,7 +462,7 @@ def dashboard(): num_subscribers = get_number_of_subscribers() num_signups = get_number_of_signups() num_one_off_purchases = get_number_of_one_off_purchases() - + num_donations = get_number_of_transactions_with_donations() shop_default_country_code = get_shop_default_country_code() saas_url = current_app.config.get("SAAS_URL") if Setting.query.first().donations_enabled is True: @@ -481,6 +482,7 @@ def dashboard(): num_active_subscribers=num_active_subscribers, num_subscribers=num_subscribers, num_signups=num_signups, + num_donations=num_donations, num_one_off_purchases=num_one_off_purchases, shop_default_country_code=shop_default_country_code, saas_url=saas_url, @@ -1233,17 +1235,27 @@ def subscribers(): query = query.where(Person.email.like(f"%{subscriber_email}%")) if subscriber_name: query = query.where(Person.full_name.like(f"%{subscriber_name}%")) - - if show_active: + if action == "show_active": query = query.filter(Person.subscriptions) query = query.where( (Subscription.stripe_status == "active") | (Subscription.stripe_status == "trialing") ) + elif action == "show_donors": + query = query.filter(Person.transactions) + query = query.where(Transaction.is_donation == True) + + elif action == "show_one_off_payments": + query = query.filter(Person.subscriptions) + query = query.where(Subscription.stripe_subscription_id == None) + people = query.order_by(desc(Person.created_at)) return render_template( - "admin/subscribers.html", people=people.all(), show_active=show_active + "admin/subscribers.html", + people=people.all(), + show_active=show_active, + action=action, ) diff --git a/subscribie/blueprints/admin/stats.py b/subscribie/blueprints/admin/stats.py index 77be7fc2..034ae9ab 100644 --- a/subscribie/blueprints/admin/stats.py +++ b/subscribie/blueprints/admin/stats.py @@ -1,5 +1,5 @@ from subscribie.database import database -from subscribie.models import Person, Subscription, Plan, PlanRequirements +from subscribie.models import Person, Subscription, Plan, PlanRequirements, Transaction from sqlalchemy.sql import func import logging @@ -80,3 +80,13 @@ def get_number_of_one_off_purchases(): .count() ) return count + + +def get_number_of_transactions_with_donations(): + count = ( + database.session.query(Person) + .join(Transaction) + .filter(Transaction.is_donation == 1) + .count() + ) + return count diff --git a/subscribie/blueprints/admin/templates/admin/dashboard.html b/subscribie/blueprints/admin/templates/admin/dashboard.html index bb9221cb..8893347e 100644 --- a/subscribie/blueprints/admin/templates/admin/dashboard.html +++ b/subscribie/blueprints/admin/templates/admin/dashboard.html @@ -39,10 +39,13 @@

Stats Donations:{{ total_donations }} {% endif %}

-

You have: {{ num_active_subscribers }} subscribers with active subscriptions.

+

You have: {{ num_active_subscribers }} subscribers with active subscriptions.

You've had: {{ num_subscribers }} subscribers since starting your shop.

-

You've had: {{ num_signups }} people either buy one-off or start a subscription since starting your shop.

-

You've had: {{ num_one_off_purchases }} people buy a one-off item from your shop.

+

You've had: {{ num_one_off_purchases }} people buy a one-off item from your shop.

+ {% if settings.donations_enabled %} +

You've had: {{ num_donations }} Donors Donations to your shop.

+ {% endif %} +

You've had: {{ num_signups }} people either buy one-off or start a subscription{% if settings.donations_enabled %} or donations {% endif %} since starting your shop.

View my Shop

diff --git a/subscribie/blueprints/admin/templates/admin/subscribers.html b/subscribie/blueprints/admin/templates/admin/subscribers.html index eb178ff8..6d864192 100644 --- a/subscribie/blueprints/admin/templates/admin/subscribers.html +++ b/subscribie/blueprints/admin/templates/admin/subscribers.html @@ -21,7 +21,13 @@

My Subscribers

{% else %} Show Active {%endif %} - Show Archived + {% if settings.donations_enabled %} + {% if action == "show_donors" %} + Show all + {% else %} + Show Donors + {% endif %} + {% endif %}
@@ -201,6 +207,40 @@

Search...

{% endfor %} + {% else %} + {# Donations are not in the subscription table since they are not plans nor subscriptions #} + {# therefore we need to look at the transction table to find the donations #} + {% for transaction in person.transactions %} + {% if transaction.is_donation %} +
+ +
+ {% endif %} + {% endfor %} {% endif %} diff --git a/subscribie/models.py b/subscribie/models.py index 5ad8a1be..0f64bac5 100644 --- a/subscribie/models.py +++ b/subscribie/models.py @@ -1021,6 +1021,12 @@ class Transaction(database.Model): fulfillment_state = database.Column(database.String()) is_donation = database.Column(database.Boolean(), default=0) + def showSellPrice(self) -> str: + currency_symbol = get_geo_currency_symbol() + amount = self.amount / 100 + result = f"{currency_symbol}{amount:.2f}" + return result + class SeoPageTitle(database.Model): __tablename__ = "module_seo_page_title"