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]
Beispiel #3
0
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)