('date_joined', 'Status')
),
required=False)
+
+class PickResourceForm(forms.Form):
+ resource = forms.ModelChoiceField(
+ queryset=Resource.objects.select_related().all()
+ )
+ resource.widget.attrs["onchange"]="this.form.submit()"
\ No newline at end of file
from django.core.exceptions import ValidationError
from django.db.utils import IntegrityError
-from astakos.im.models import AstakosUser, AstakosGroup, Membership
+from astakos.im.models import (AstakosUser, AstakosGroup, Membership, Resource,
+ AstakosUserQuota)
from astakos.im.endpoints.aquarium.producer import report_user_credits_event
from ._common import remove_user_permission, add_user_permission
args = "<user ID>"
help = "Modify a user's attributes"
- option_list = BaseCommand.option_list + (
+ option_list = list(BaseCommand.option_list) + [
make_option('--invitations',
dest='invitations',
metavar='NUM',
dest='refill',
default=False,
help="Refill user credits"),
- )
-
+ ]
+ resources = Resource.objects.select_related().all()
+ append = option_list.append
+ for r in resources:
+ append(make_option('--%s-set-quota' % r,
+ dest='%s-set-quota' % r,
+ metavar='QUANTITY',
+ help="Set resource quota"))
+
def handle(self, *args, **options):
if len(args) != 1:
raise CommandError("Please provide a user ID")
if password:
self.stdout.write('User\'s new password: %s\n' % password)
+
+ for r in self.resources:
+ limit = options.get('%s-set-quota' % r)
+ if not limit:
+ continue
+ if not limit.isdigit():
+ raise CommandError('Invalid limit')
+
+ q = AstakosUserQuota.objects
+ q, created = q.get_or_create(resource=r, user=user,
+ defaults={'uplimit': limit})
+ verb = 'set' if created else 'updated'
+ self.stdout.write('User\'s quota %s successfully\n' % verb)
\ No newline at end of file
def quota(self):
d = defaultdict(int)
for q in self.astakosuserquota_set.select_related().all():
- d[q.resource.name] += q.uplimit
+ d[q.resource] += q.uplimit
for m in self.membership_set.select_related().all():
if not m.is_approved:
continue
continue
for r, uplimit in g.quota.iteritems():
d[r] += uplimit
+
# TODO set default for remaining
return d
{% block page.body %}
<div class="maincol {% block innerpage.class %}{% endblock %}">
<div class="section">
- {% for k, v in user.quota|items %}
- <strong>{{k}}</strong>
- <table class="zebra-striped id-sorted">
-<!--
- <thead>
- <tr>
- <th>Limit (Group)</th>
- </tr>
- </thead>
- -->
- <tbody>
- {% for m in user.membership_set.select_related.all %}
- {% if m.group.is_enabled %}
- {% with m.group.quota as quota %}
- {% if quota %}
- {% for kk, vv in quota|items %}
- {% if k == kk %}
- <tr>
- <td>{{ vv }} ({{m.group.name}})</td>
- </tr>
- {% endif %}
- {% endfor %}
- {% endif %}
- {% endwith %}
+ <form action="" method="post"
+ class="withlabels">{% csrf_token %}
+ {% include "im/form_render.html" %}
+ </form>
+ <table>
+ {% for q in object_list %}
+ {% if q.group.is_enabled %}
+ <tr>
+ <td>{{ q.uplimit }}</td><td>({{ q.group }})</td>
+ </tr>
+ {% endif %}
+ {% endfor %}
+ {% if form.cleaned_data %}
+ {% with form.cleaned_data|lookup:'resource' as resource %}
+ {% if resource %}
+ {% for q in user.astakosuserquota_set.all %}
+ {% if q.resource == resource %}
+ <tr>
+ <td>{{ q.uplimit }}</td><td>(assigned to me)</td>
+ </tr>
{% endif %}
{% endfor %}
- <tr>
- <td><strong>{{ v }}</strong></td>
- </tr>
- <tr/>
- </tbody>
- </table>
- {% endfor %}
+ <tr>
+ <td>{{ user.quota|lookup:resource }}</td><td>(total)</td>
+ </tr>
+ {% endif %}
+ {% endwith %}
+ {% endif %}
+ </table>
</div>
</div>
{% endblock %}
from astakos.im.models import (
AstakosUser, ApprovalTerms, AstakosGroup, Resource,
- EmailChange, GroupKind, Membership)
+ EmailChange, GroupKind, Membership, AstakosGroupQuota)
from astakos.im.activation_backends import get_backend, SimpleBackend
from astakos.im.util import get_context, prepare_response, set_cookie, get_query
from astakos.im.forms import (LoginForm, InvitationForm, ProfileForm,
AstakosGroupCreationForm, AstakosGroupSearchForm,
AstakosGroupUpdateForm, AddGroupMembersForm,
AstakosGroupSortForm, MembersSortForm,
- TimelineForm)
+ TimelineForm, PickResourceForm)
from astakos.im.functions import (send_feedback, SendMailError,
invite as invite_func, logout as auth_logout,
activate as activate_func,
@signed_terms_required
@login_required
def resource_list(request):
- return render_response(
- template='im/astakosuserquota_list.html',
- context_instance=get_context(request))
+ if request.method == 'POST':
+ form = PickResourceForm(request.POST)
+ if form.is_valid():
+ r = form.cleaned_data.get('resource')
+ if r:
+ groups = request.user.membership_set.only('group').filter(
+ date_joined__isnull=False)
+ groups = [g.group_id for g in groups]
+ q = AstakosGroupQuota.objects.select_related().filter(
+ resource=r, group__in=groups)
+ else:
+ form = PickResourceForm()
+ q = AstakosGroupQuota.objects.none()
+ return object_list(request, q,
+ template_name='im/astakosuserquota_list.html',
+ extra_context={'form': form})
def group_create_list(request):
+ form = PickResourceForm()
return render_response(
template='im/astakosgroup_create_list.html',
context_instance=get_context(request),)