def active_subscriptions(context: 'micro_context', user_id: int=None, group_id: int=None, on_date: str=None): with context.session as session: result = active_subscriptions_for(session, user_id, group_id, on_date) return [sub_to_json(row) for row in result]
def unpaid_subscriptions(context: "micro_context", user_id: int = None, group_id: int = None): with context.session as session: result = session.query(model.Subscription).filter(model.Subscription.from_date.is_(None)) if user_id is not None: result = result.filter(model.Subscription.user_id == user_id) if group_id is not None: result = result.filter(model.Subscription.group_id == group_id) result = result.options(subqueryload(model.Subscription.user)) result = result.options(subqueryload(model.Subscription.group)) result = result.options(subqueryload(model.Subscription.service)) return [sub_to_json(row) for row in result]
def make_payment(context: 'micro_context', user_id: int=None, group_id: int=None): if group_id is not None and user_id is not None: raise Exception("only a user or a group can pay for subscription") with context.session as session: subscriptions = session.query(model.Subscription).\ filter(model.Subscription.from_date.is_(None)) if user_id is not None: subscriptions = subscriptions.filter( model.Subscription.user_id == user_id) elif group_id is not None: subscriptions = subscriptions.filter( model.Subscription.group_id == group_id) subscriptions = list(subscriptions) if not subscriptions: raise Exception("Nothing to pay") cost = sum([row.cost for row in subscriptions]) payee = Payment.PAYEE[0] if user_id is not None else Payment.PAYEE[1] payment = model.Payment(amount=cost, payee=payee, date=datetime.date.today()) session.add(payment) for subscription in subscriptions: subscription.payment = payment subscription.from_date = payment.date if subscription.service.duration: days = subscription.service.duration to_date = payment.date + datetime.timedelta(days=days) subscription.to_date = to_date session.commit() for subscription in subscriptions: message = sub_to_json(subscription) context.broadcast('subscription-active', message) return serialize(payment)