Skip to content

Commit 1dde99b

Browse files
dlpbcIain-S
authored andcommitted
handle abolished subscriptions (emails, cli, controller app)
1 parent ddce60f commit 1dde99b

4 files changed

Lines changed: 36 additions & 16 deletions

File tree

rctab/routers/accounting/approvals.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@ async def check_approval(approval: Approval) -> None:
116116

117117
current_date = datetime.date.today()
118118

119+
if subscription_summary.abolished and not approval.force:
120+
raise HTTPException(
121+
status_code=400,
122+
detail="Abolished subscription. Force approve if you are certain that the subscription has not been abolished.",
123+
)
124+
119125
if approval.date_to < current_date:
120126
raise HTTPException(
121127
status_code=400,

rctab/routers/accounting/desired_states.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -96,20 +96,23 @@ async def get_desired_states(
9696
(summaries.c.desired_status == True, SubscriptionState("Enabled")),
9797
).label("desired_state"),
9898
).where(
99-
or_(
100-
and_(
101-
summaries.c.desired_status == False,
102-
or_(
103-
summaries.c.status == SubscriptionState("Enabled"),
104-
summaries.c.status == SubscriptionState("PastDue"),
99+
and_(
100+
summaries.c.abolished == False,
101+
or_(
102+
and_(
103+
summaries.c.desired_status == False,
104+
or_(
105+
summaries.c.status == SubscriptionState("Enabled"),
106+
summaries.c.status == SubscriptionState("PastDue"),
107+
),
105108
),
106-
),
107-
and_(
108-
summaries.c.desired_status == True,
109-
or_(
110-
summaries.c.status == SubscriptionState("Disabled"),
111-
summaries.c.status == SubscriptionState("Warned"),
112-
summaries.c.status == SubscriptionState("Expired"),
109+
and_(
110+
summaries.c.desired_status == True,
111+
or_(
112+
summaries.c.status == SubscriptionState("Disabled"),
113+
summaries.c.status == SubscriptionState("Warned"),
114+
summaries.c.status == SubscriptionState("Expired"),
115+
),
113116
),
114117
),
115118
)

rctab/routers/accounting/routes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class SubscriptionSummary(BaseModel):
4848
total_cost: float
4949
first_usage: Optional[datetime.date]
5050
latest_usage: Optional[datetime.date]
51+
abolished: bool
5152

5253

5354
@db_select

rctab/routers/accounting/send_emails.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from jinja2 import Environment, PackageLoader, exceptions
1313
from rctab_models.models import SubscriptionState, SubscriptionStatus
1414
from sendgrid import Mail, SendGridAPIClient
15-
from sqlalchemy import asc, desc, func, insert, or_, select
15+
from sqlalchemy import and_, asc, desc, func, insert, or_, select
1616
from sqlalchemy.sql import Select
1717

1818
from rctab.constants import (
@@ -412,7 +412,12 @@ async def check_for_subs_nearing_expiry(database: Database) -> None:
412412
# We don't _have_ to filter on approved_to, but it might make things slightly quicker
413413
expiry_query = (
414414
select(summary.c.subscription_id, summary.c.approved_to, summary.c.status)
415-
.where(summary.c.approved_to <= date.today() + timedelta(days=30))
415+
.where(
416+
and_(
417+
summary.c.abolished == False, # pylint: disable=singleton-comparison
418+
summary.c.approved_to <= date.today() + timedelta(days=30),
419+
)
420+
)
416421
.order_by(summary.c.approved_to)
417422
)
418423
rows = await database.fetch_all(expiry_query)
@@ -436,7 +441,12 @@ async def check_for_overbudget_subs(database: Database) -> None:
436441

437442
overbudget_query = (
438443
select(summary.c.subscription_id, summary.c.allocated, summary.c.total_cost)
439-
.where(summary.c.total_cost > summary.c.allocated)
444+
.where(
445+
and_(
446+
summary.c.abolished == False, # pylint: disable=singleton-comparison
447+
summary.c.total_cost > summary.c.allocated,
448+
)
449+
)
440450
.where(
441451
or_(
442452
summary.c.status == SubscriptionState("Enabled"),

0 commit comments

Comments
 (0)