diff --git a/app/admin_model.py b/app/admin_model.py index fe9e4032..46822528 100644 --- a/app/admin_model.py +++ b/app/admin_model.py @@ -5,6 +5,7 @@ from flask_admin.actions import action from flask_admin.contrib import sqla from flask_login import current_user +from app.extensions import db from app.models import User, ManualSubscription @@ -120,3 +121,19 @@ class MailboxAdmin(SLModelView): class LifetimeCouponAdmin(SLModelView): can_edit = True can_create = True + + +class ManualSubscriptionAdmin(SLModelView): + can_edit = True + + @action( + "extend_1y", + "Extend for 1 year", + "Extend 1 year more?", + ) + def extend_1y(self, ids): + for ms in ManualSubscription.query.filter(ManualSubscription.id.in_(ids)): + ms.end_at = ms.end_at.shift(years=1) + flash(f"Extend subscription for {ms.user}", "success") + + db.session.commit() diff --git a/server.py b/server.py index 41aee0c0..56ff1613 100644 --- a/server.py +++ b/server.py @@ -34,6 +34,7 @@ from app.admin_model import ( AliasAdmin, MailboxAdmin, LifetimeCouponAdmin, + ManualSubscriptionAdmin, ) from app.api.base import api_bp from app.auth.base import auth_bp @@ -93,6 +94,7 @@ from app.models import ( File, Contact, RefusedEmail, + ManualSubscription, ) from app.monitor.base import monitor_bp from app.oauth.base import oauth_bp @@ -205,7 +207,7 @@ def fake_data(): password="password", activated=True, is_admin=True, - enable_otp=False, + # enable_otp=True, otp_secret="base32secret3232", intro_shown=True, fido_uuid=None, @@ -372,6 +374,10 @@ def fake_data(): Mailbox.create(user_id=user2.id, email="winston2@high.table", verified=True) db.session.commit() + ManualSubscription.create( + user_id=user2.id, end_at=arrow.now().shift(years=1, days=1), commit=True + ) + @login_manager.user_loader def load_user(user_id): @@ -795,6 +801,7 @@ def init_admin(app): admin.add_view(MailboxAdmin(Mailbox, db.session)) admin.add_view(EmailLogAdmin(EmailLog, db.session)) admin.add_view(LifetimeCouponAdmin(LifetimeCoupon, db.session)) + admin.add_view(ManualSubscriptionAdmin(ManualSubscription, db.session)) def setup_do_not_track(app):