Revision 373daf6a

b/snf-astakos-app/astakos/im/forms.py
491 491

  
492 492
def get_astakos_group_creation_form(request):
493 493
    class AstakosGroupCreationForm(forms.ModelForm):
494
        issue_date = forms.DateField(widget=SelectDateWidget())
495
        expiration_date = forms.DateField(widget=SelectDateWidget())
494
        issue_date = forms.DateField(widget=SelectDateWidget(), initial=datetime.now())
495
        # TODO set initial in exact one month
496
        expiration_date = forms.DateField(widget=SelectDateWidget(), initial = datetime.now() + timedelta(days=30))
496 497
        kind = forms.ModelChoiceField(queryset=GroupKind.objects.all(), empty_label=None)
497 498
        name = forms.URLField()
498 499
        
......
510 511
            if commit: 
511 512
                g.save()
512 513
                g.owner = [request.user]
513
#                 g.approve_member(request.user)
514
                g.approve_member(request.user)
514 515
            return g
515 516
    
516 517
    return AstakosGroupCreationForm
517 518

  
518
def get_astakos_group_policy_creation_form(group):
519
def get_astakos_group_policy_creation_form(astakosgroup):
519 520
    class AstakosGroupPolicyCreationForm(forms.ModelForm):
520
        choices = Resource.objects.filter(~Q(astakosgroup=group))
521
        choices = Resource.objects.filter(~Q(astakosgroup=astakosgroup))
521 522
        resource = forms.ModelChoiceField(queryset=choices, empty_label=None)
523
        # TODO check that it does not hit the db
524
        group = forms.ModelChoiceField(queryset=AstakosGroup.objects.all(), initial=astakosgroup, widget=forms.HiddenInput())
522 525
        
523 526
        class Meta:
524 527
            model = AstakosGroupQuota
525
        
526
        def __init__(self, *args, **kwargs):
527
            if not args:
528
                args = ({'group':group},)
529
            super(AstakosGroupPolicyCreationForm, self).__init__(*args, **kwargs)
530
            self.fields['group'].widget.attrs['disabled'] = True
531 528
    
532 529
    return AstakosGroupPolicyCreationForm
b/snf-astakos-app/astakos/im/models.py
113 113
    creation_date = models.DateTimeField('Creation date', default=datetime.now())
114 114
    issue_date = models.DateTimeField('Issue date', null=True)
115 115
    expiration_date = models.DateTimeField('Expiration date', null=True)
116
    moderatation_enabled = models.BooleanField('Moderated membership?', default=False)
116
    moderatation_enabled = models.BooleanField('Moderated membership?', default=True)
117 117
    approval_date = models.DateTimeField('Activation date', null=True, blank=True)
118 118
    estimated_participants = models.PositiveIntegerField('Estimated #participants', null=True)
119 119
    
......
153 153
        self.save()
154 154
    
155 155
    def approve_member(self, member):
156
        m = self.membership_set.get(person=member)
156
        m, created = self.membership_set.get_or_create(person=member, group=self)
157 157
        m.date_joined = datetime.now()
158 158
        m.save()
159
    
159
        
160 160
    def disapprove_member(self, member):
161 161
        m = self.membership_set.remove(member)
162 162
    
b/snf-astakos-app/astakos/im/templates/im/astakosgroup_detail.html
7 7
        <table class="zebra-striped id-sorted">
8 8
              <tr>
9 9
                <th>Name: {{object.name}}</th>
10
              </tr> 
10
              </tr>
11
        </table>
12
    <div class="section">
13
        <h2>Members:</h2>
14
        {% if members %}
15
          <table class="zebra-striped id-sorted">
16
            <thead>
17
              <tr>
18
                <th>Realname</th>
19
                <th>Status</th>
20
              </tr>
21
            </thead>
22
            <tbody>
23
            {% for name, approved in members %}
11 24
              <tr>
12
                <th>Members: {{object.membership.all}}</th>
25
                <td>{{name}}</td>
26
                <td>{{approved}}</td>
13 27
              </tr>
28
            {% endfor %}
29
            </tbody>
14 30
        </table>
15
        <div class="section">
31
        {% else %}
32
            <p>No members yet!</p>
33
        {% endif %}
34
    </div>
35
    <div class="section">
16 36
        <h2>Policies:</h2>
17 37
        {% if quota %}
18 38
          <table class="zebra-striped id-sorted">
......
35 55
            <p>No policies</p>
36 56
        {% endif %}
37 57
    </div>
58
    <div class="rightcol">
59
    <form action="{% url group_policies_add object.id %}" method="post" class="innerlabels signup">{% csrf_token %}
60
        <h2><span>NEW POLICY</span></h2>
61
            {% include "im/form_render.html" %}
62
            <div class="form-row submit">
63
                <input type="submit" class="submit altcol" value="+" />
64
            </div>
65
    </form>
66
</div>
38 67
</div>
39 68
{% endblock %}
b/snf-astakos-app/astakos/im/templates/im/astakosgroupquota_form.html
35 35
            {% include "im/form_render.html" %}
36 36
            <div class="form-row submit">
37 37
                <input type="submit" class="submit altcol" value="+" />
38
                <a class="extra-link" href="{% url group_approval_request group.id %}">Request approval</a>
38
                <a href="{% url group_approval_request group.id %}">Request approval</a>
39 39
            </div>
40 40
    </form>
41 41
</div>
b/snf-astakos-app/astakos/im/views.py
428 428
        response['Location'] = LOGOUT_NEXT
429 429
        response.status_code = 301
430 430
        return response
431
<<<<<<< HEAD
432 431
    messages.success(request, _('You have successfully logged out.'))
433
=======
434
    messages.add_message(request, messages.SUCCESS, _('<p>You have successfully logged out.</p>'))
435
>>>>>>> origin/newstyles
436 432
    context = get_context(request, extra_context)
437 433
    response.write(render_to_string(template, context_instance=context))
438 434
    return response
......
590 586
                           form = form,
591 587
                           context_instance = get_context(request,
592 588
                                                          extra_context))
593
<<<<<<< HEAD
594 589

  
595 590
@signed_terms_required
596 591
def group_add(request):
597 592
    return create_object(request,
598 593
                            form_class=get_astakos_group_creation_form(request),
599 594
                            login_required = True,
600
                            post_save_redirect = '/im/group/%(id)s/policies/add')
595
                            post_save_redirect = '/im/group/%(id)s/')
601 596

  
602 597
@signed_terms_required
603 598
@login_required
......
617 612
    except AstakosGroup.DoesNotExist:
618 613
        return HttpResponseBadRequest(_('Invalid group.'))
619 614
    d = {}
620
    for resource in group.policy.all():
621
        d[resource.name] = group.policy.through.objects.get(resource__id=resource.id,
622
                                                            group__id=group_id).limit  
615
    related_resources = group.policy.through.objects
616
    for r in group.policy.all():
617
        d[r.name] = related_resources.get(resource__id=r.id, 
618
                                            group__id=group_id).limit
619
    members = map(lambda m:{m.person.realname:m.is_approved}, group.membership_set.all())
623 620
    return object_detail(request,
624 621
                            AstakosGroup.objects.all(),
625 622
                            object_id=group_id,
626
                            extra_context = {'quota':d})
623
                            extra_context = {'quota':d,
624
                                             'members':members,
625
                                             'form':get_astakos_group_policy_creation_form(group)})
627 626

  
628 627
@signed_terms_required
629 628
@login_required
......
636 635
    try:
637 636
        group = AstakosGroup.objects.select_related().get(id=group_id)
638 637
    except AstakosGroup.DoesNotExist:
639
        raise HttpResponseBadRequest(_('Invalid group.'))
638
        return HttpResponseBadRequest(_('Invalid group.'))
640 639
    d = {}
641 640
    for resource in group.policy.all():
642 641
        d[resource.name] = group.policy.through.objects.get(resource__id=resource.id,
......
644 643
    return create_object(request,
645 644
                            form_class=get_astakos_group_policy_creation_form(group),
646 645
                            login_required=True,
647
                            post_save_redirect = reverse('group_policies_add', kwargs=dict(group_id=group_id)),
646
                            template_name = 'im/astakosgroup_detail.html',
647
                            post_save_redirect = reverse('group_detail', kwargs=dict(group_id=group_id)),
648 648
                            extra_context = {'group':group,
649 649
                                             'quota':d})
650 650
@signed_terms_required
......
652 652
def group_approval_request(request, group_id):
653 653
    return HttpResponse()
654 654
    
655
=======
656
>>>>>>> origin/newstyles

Also available in: Unified diff