def deletePayment(request, uid=None):
    """
  Delete payment (subscription) of User with id == uid which is made today.
  Subscription will be deleted ONLY IF (s.paymaster == request.user AND s.date == today).
  """
    if uid == None:
        return Http404("no params")
    if not ((request.user.is_staff and settings.cfgSubsPeriod) or request.user.is_superuser):
        return HttpResponse("user is not staff member or subs. collection period is over!", status=403)

    user = fetchUser(uid)
    nw = datetime.now()
    ss = (
        Subscription.objects.filter(user__id=int(uid))
        .filter(paymaster=request.user)
        .filter(valid=True)
        .filter(date__year=nw.year)
        .filter(date__month=nw.month)
        .filter(date__day=nw.day)
        .order_by("-date")
        .all()
    )
    request.session.modified = True
    if len(ss) == 0:
        return HttpResponse("there are no subscriptions to delete", status=404)
    else:
        sub = ss[0]
        deactOk = deactivateMember(user, sub.oldGroupId)
        if deactOk:
            sub.valid = False
            sub.save()

            logger.info(
                "Staff member (%s) invalidated (deleted) subscription with ID %d (date, user, userId) = (%s, %s, %d)"
                % (request.user.username, sub.id, sub.date, sub.user.username, sub.user.id)
            )
            return HttpResponse('{status:"ok"}', mimetype="application/javascript; charset=utf8")
        else:
            logger.warn(
                "Staff member (%s) FAILED to invalidate (delete) subscription with ID %d (date, user, userId) = (%s, %s, %d)"
                % (request.user.username, sub.id, sub.date, sub.user.username, sub.user.id)
            )
            return HttpResponse('{status:"failed"}', mimetype="application/javascript; charset=utf8", status=400)
def superuserDeletePayment(request, sid=None):
    """
  Delete payment (subscription) with id = sid. This is superuser only method!
  """
    if sid == None:
        return Http404("no params")
    if not request.user.is_superuser:
        return HttpResponse("user is not superuser!", status=403)

    iSid = int(sid)
    deactOk = False
    try:
        s = Subscription.objects.get(pk=iSid)
        if s.valid:
            snewst = s.user.subscriptions.filter(valid=True).order_by("-subsEnd")[0]
            if snewst.id == s.id:
                deactOk = deactivateMember(s.user, s.oldGroupId)
        else:
            deactOk = True  # deactivation skipped - invalid subscription!

    except Subscription.DoesNotExist:
        return HttpResponse("subscription with ID %d does not exist!" % (sid,), status=404)

    request.session.modified = True

    if deactOk:
        logger.info(
            "Superuser (%s) deleted subscription with ID %d (date, user, userId) = (%s, %s, %d)."
            % (request.user.username, s.id, s.date, s.user.username, s.user.id)
        )
        s.delete()
        return HttpResponse('{status:"ok"}', mimetype="application/javascript; charset=utf8")
    else:
        logger.warn(
            "Superuser (%s) FAILED to delete subscription with ID %d (date, user, userId) = (%s, %s, %d)."
            % (request.user.username, s.id, s.date, s.user.username, s.user.id)
        )
        return HttpResponse('{status:"failed"}', mimetype="application/javascript; charset=utf8", status=400)