app/soc/views/models/program.py
author Sverre Rabbelier <srabbelier@gmail.com>
Mon, 09 Mar 2009 00:08:32 +0000
changeset 1764 1c56cbbf3a33
parent 1762 c47b9deb22ac
child 1830 b2b638076e90
permissions -rw-r--r--
Views should have a unique name Patch by: Sverre Rabbelier
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     2
#
1308
35b75ffcbb37 Partially reverted "Update the copyright notice for 2009."
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1307
diff changeset
     3
# Copyright 2008 the Melange authors.
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     4
#
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     8
#
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    10
#
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    16
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    17
"""Views for Programs.
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    18
"""
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    19
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    20
__authors__ = [
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    21
    '"Sverre Rabbelier" <sverre@rabbelier.nl>',
769
a0ee643fe832 Added an elementary workflow choosing method to program creation.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 755
diff changeset
    22
    '"Lennard de Rijk" <ljvderijk@gmail.com>',
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    23
  ]
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    24
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    25
1747
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
    26
import os
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
    27
1762
c47b9deb22ac Use getFromKeyFieldsOr404 in slots() and allocateSlots()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1751
diff changeset
    28
from django import forms
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
    29
from django import http
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
    30
from django.utils import simplejson
1260
594c6b500378 Added Agreement properties to Program Model.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1257
diff changeset
    31
from django.utils.translation import ugettext
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    32
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
    33
from soc.logic import allocations
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
    34
from soc.logic import cleaning
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    35
from soc.logic import dicts
1209
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
    36
from soc.logic.helper import timeline as timeline_helper
1273
324a1ecc4e88 Use the newly added __scoped__ and references for program's ToSes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1260
diff changeset
    37
from soc.logic.models import host as host_logic
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
    38
from soc.logic.models import mentor as mentor_logic
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
    39
from soc.logic.models import organization as org_logic
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
    40
from soc.logic.models import org_admin as org_admin_logic
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
    41
from soc.logic.models import student_proposal as student_proposal_logic
778
bc13cd968946 Added support for mutliple edit forms based on entity type
Sverre Rabbelier <srabbelier@gmail.com>
parents: 777
diff changeset
    42
from soc.logic.models import program as program_logic
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
    43
from soc.logic.models import student as student_logic
1352
4f118840617f Fix import sorting in soc.views.models.program module and rename any "Org" in link names to "Organization".
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1343
diff changeset
    44
from soc.logic.models.document import logic as document_logic
666
b9b0506efe8d Fix import sorting and docstring typos in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 663
diff changeset
    45
from soc.views import helper
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
    46
from soc.views import out_of_band
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
    47
from soc.views.helper import access
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
    48
from soc.views.helper import decorators
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
    49
from soc.views.helper import lists
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    50
from soc.views.helper import redirects
778
bc13cd968946 Added support for mutliple edit forms based on entity type
Sverre Rabbelier <srabbelier@gmail.com>
parents: 777
diff changeset
    51
from soc.views.helper import widgets
1698
a8da5a620236 Switch Program to regular presence
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1643
diff changeset
    52
from soc.views.models import presence
714
3e2ce3d8057a Add missing dots in docstrings, proper sorting of imports and small docstring typo fixes.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 712
diff changeset
    53
from soc.views.models import document as document_view
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    54
from soc.views.models import sponsor as sponsor_view
705
0ab17e14df95 Move document sidebar entries extraction to document.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 700
diff changeset
    55
from soc.views.sitemap import sidebar
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    56
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    57
import soc.logic.models.program
1260
594c6b500378 Added Agreement properties to Program Model.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1257
diff changeset
    58
import soc.models.work
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    59
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    60
1698
a8da5a620236 Switch Program to regular presence
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1643
diff changeset
    61
class View(presence.View):
666
b9b0506efe8d Fix import sorting and docstring typos in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 663
diff changeset
    62
  """View methods for the Program model.
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    63
  """
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    64
656
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
    65
  def __init__(self, params=None):
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    66
    """Defines the fields and methods required for the base View class
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    67
    to provide the user with list, public, create, edit and delete views.
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    68
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    69
    Params:
656
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
    70
      params: a dict with params for this View
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
    71
    """
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
    72
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
    73
    rights = access.Checker(params)
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
    74
    rights['any_access'] = ['allow']
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
    75
    rights['show'] = ['allow']
1643
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
    76
    rights['create'] = [('checkSeeded', ['checkHasActiveRoleForScope', 
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
    77
        host_logic.logic])]
1074
94bc2a9ae103 Properly check if a program is active
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1053
diff changeset
    78
    rights['edit'] = ['checkIsHostForProgram']
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
    79
    rights['delete'] = ['checkIsDeveloper']
1743
669b6136b7b3 Restricted slots and assign_slots to dev-only for now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1736
diff changeset
    80
    rights['assign_slots'] = ['checkIsDeveloper']
669b6136b7b3 Restricted slots and assign_slots to dev-only for now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1736
diff changeset
    81
    rights['slots'] = ['checkIsDeveloper']
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    82
656
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
    83
    new_params = {}
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
    84
    new_params['logic'] = soc.logic.models.program.logic
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
    85
    new_params['rights'] = rights
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    86
662
0e89b027b140 Make use of the new generic key_name by lookup up scope_path
Sverre Rabbelier <srabbelier@gmail.com>
parents: 660
diff changeset
    87
    new_params['scope_view'] = sponsor_view
681
48983ecf4665 Cleanups in group and program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 680
diff changeset
    88
    new_params['scope_redirect'] = redirects.getCreateRedirect
662
0e89b027b140 Make use of the new generic key_name by lookup up scope_path
Sverre Rabbelier <srabbelier@gmail.com>
parents: 660
diff changeset
    89
656
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
    90
    new_params['name'] = "Program"
1025
1f83f05f522b Add grouping to the existing views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1024
diff changeset
    91
    new_params['sidebar_grouping'] = 'Programs'
1303
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
    92
    new_params['document_prefix'] = "program"
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
    93
1511
3342ce7a495c Fix some whitespace damadge and a style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1492
diff changeset
    94
    new_params['extra_dynaexclude'] = ['timeline', 'org_admin_agreement',
1260
594c6b500378 Added Agreement properties to Program Model.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1257
diff changeset
    95
        'mentor_agreement', 'student_agreement']
810
208659644a7f Hide 'tos' pull-down selector from Program profile forms.
Todd Larsen <tlarsen@google.com>
parents: 799
diff changeset
    96
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
    97
    patterns = []
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
    98
    patterns += [
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
    99
        (r'^%(url_name)s/(?P<access_type>assign_slots)/%(key_fields)s$',
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   100
          'soc.views.models.%(module_name)s.assign_slots',
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   101
          'Assign slots'),
1706
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   102
        (r'^%(url_name)s/(?P<access_type>slots)/%(key_fields)s$',
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   103
          'soc.views.models.%(module_name)s.slots',
1764
1c56cbbf3a33 Views should have a unique name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1762
diff changeset
   104
          'Assign slots (JSON)'),
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   105
        ]
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   106
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   107
    new_params['extra_django_patterns'] = patterns
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   108
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   109
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   110
    # TODO add clean field to check for uniqueness in link_id and scope_path
1430
ff8cc6b15e6a Rename dynafields to dynaproperties
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1352
diff changeset
   111
    new_params['create_extra_dynaproperties'] = {
649
95a41542e693 Finish Program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 647
diff changeset
   112
        'description': forms.fields.CharField(widget=helper.widgets.TinyMCE(
668
77f9a6ea6e67 Some style and typo fixes in different modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 666
diff changeset
   113
            attrs={'rows':10, 'cols':40})),
77f9a6ea6e67 Some style and typo fixes in different modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 666
diff changeset
   114
        'scope_path': forms.CharField(widget=forms.HiddenInput, required=True),
1144
f89bbc9b20a6 Rename 'Create a new document' links to 'Create a New Document', also rename 'Create a new Program' to 'Create a New Program' in soc.views.models modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1115
diff changeset
   115
        'workflow': forms.ChoiceField(choices=[('gsoc','Project-based'),
769
a0ee643fe832 Added an elementary workflow choosing method to program creation.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 755
diff changeset
   116
            ('ghop','Task-based')], required=True),
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   117
        }
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   118
1303
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   119
    reference_fields = [
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   120
        ('org_admin_agreement_link_id', soc.models.work.Work.link_id.help_text,
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   121
         ugettext('Organization Admin Agreement Document link ID')),
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   122
        ('mentor_agreement_link_id', soc.models.work.Work.link_id.help_text,
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   123
         ugettext('Mentor Agreement Document link ID')),
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   124
        ('student_agreement_link_id', soc.models.work.Work.link_id.help_text,
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   125
         ugettext('Student Agreement Document link ID')),
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   126
        ('home_link_id', soc.models.work.Work.link_id.help_text,
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   127
         ugettext('Home page Document link ID')),
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   128
        ]
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   129
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   130
    result = {}
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   131
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   132
    for key, help_text, label in reference_fields:
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   133
      result[key] = widgets.ReferenceField(
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   134
          reference_url='document', filter=['__scoped__'],
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   135
          filter_fields={'prefix': new_params['document_prefix']},
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   136
          required=False, label=label, help_text=help_text)
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   137
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   138
    result['workflow'] = forms.CharField(widget=widgets.ReadOnlyInput(),
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   139
                                         required=True)
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   140
    result['clean'] = cleaning.clean_refs(new_params,
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   141
                                          [i for i,_,_ in reference_fields])
1303
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   142
1430
ff8cc6b15e6a Rename dynafields to dynaproperties
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1352
diff changeset
   143
    new_params['edit_extra_dynaproperties'] = result
1303
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   144
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   145
    document_references = [
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   146
        ('org_admin_agreement_link_id', 'org_admin_agreement',
1273
324a1ecc4e88 Use the newly added __scoped__ and references for program's ToSes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1260
diff changeset
   147
         lambda x: x.org_admin_agreement),
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   148
        ('mentor_agreement_link_id', 'mentor_agreement',
1273
324a1ecc4e88 Use the newly added __scoped__ and references for program's ToSes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1260
diff changeset
   149
         lambda x: x.mentor_agreement),
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   150
        ('student_agreement_link_id', 'student_agreement',
1273
324a1ecc4e88 Use the newly added __scoped__ and references for program's ToSes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1260
diff changeset
   151
         lambda x: x.student_agreement),
324a1ecc4e88 Use the newly added __scoped__ and references for program's ToSes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1260
diff changeset
   152
        ]
324a1ecc4e88 Use the newly added __scoped__ and references for program's ToSes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1260
diff changeset
   153
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   154
    new_params['references'] = document_references
1273
324a1ecc4e88 Use the newly added __scoped__ and references for program's ToSes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1260
diff changeset
   155
1260
594c6b500378 Added Agreement properties to Program Model.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1257
diff changeset
   156
    params = dicts.merge(params, new_params, sub_merge=True)
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   157
656
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
   158
    super(View, self).__init__(params=params)
777
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   159
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   160
  @decorators.merge_params
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   161
  @decorators.check_access
1706
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   162
  def slots(self, request, acces_type, page_name=None, params=None, **kwargs):
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   163
    """Returns a JSON object with all orgs allocation.
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   164
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   165
    Args:
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   166
      request: the standard Django HTTP request object
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   167
      access_type : the name of the access type which should be checked
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   168
      page_name: the page name displayed in templates as page and header title
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   169
      params: a dict with params for this View, not used
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   170
    """
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   171
1762
c47b9deb22ac Use getFromKeyFieldsOr404 in slots() and allocateSlots()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1751
diff changeset
   172
    program = program_logic.logic.getFromKeyFieldsOr404(kwargs)
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   173
    slots = program.slots
1706
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   174
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   175
    filter = {
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   176
          'scope': program,
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   177
          'status': 'active',
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   178
          }
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   179
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   180
    query = org_logic.logic.getQueryForFields(filter=filter)
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   181
    organizations = org_logic.logic.getAll(query)
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   182
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   183
    locked_slots = adjusted_slots = {}
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   184
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   185
    if request.method == 'POST' and 'result' in request.POST:
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   186
      result = request.POST['result']
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   187
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   188
      from_json = simplejson.loads(result)
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   189
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   190
      locked_slots = dicts.groupDictBy(from_json, 'locked', 'slots')
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   191
      adjusted_slots = dicts.groupDictBy(from_json, 'adjustment')
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   192
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   193
    orgs = [i.link_id for i in organizations]
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   194
    applications = {}
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   195
    mentors = {}
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   196
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   197
    for org in organizations:
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   198
      filter = {
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   199
          'org': org,
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   200
          'status': ['new', 'pending']
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   201
          }
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   202
      query = student_proposal_logic.logic.getQueryForFields(filter=filter)
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   203
      proposals = student_proposal_logic.logic.getAll(query)
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   204
      applications[org.link_id] = len(proposals)
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   205
      mentors[org.link_id] = len([i for i in proposals if i.mentor != None])
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   206
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   207
    # TODO: Use configuration variables here
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   208
    max_slots_per_org = 40
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   209
    min_slots_per_org = 2
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   210
    iterative = False
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   211
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   212
    allocator = allocations.Allocator(orgs, applications, mentors,
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   213
                                      slots, max_slots_per_org,
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   214
                                      min_slots_per_org, iterative)
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   215
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   216
    result = allocator.allocate(locked_slots, adjusted_slots)
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   217
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   218
    data = []
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   219
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   220
    for link_id, count in result.iteritems():
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   221
      org = orgs[link_id]
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   222
      data.append({
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   223
          'link_id': link_id,
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   224
          'slots': count,
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   225
          'locked': org['locked'] if 'locked' in org else 0,
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   226
          'adjustment': org['adjustment'] if 'adjustment' in org else 0,
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   227
          })
1706
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   228
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   229
    return self.json(request, data)
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   230
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   231
  @decorators.merge_params
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   232
  @decorators.check_access
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   233
  def assignSlots(self, request, access_type, page_name=None,
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   234
           params=None, **kwargs):
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   235
    """View that allows to assign slots to orgs.
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   236
    """
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   237
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   238
    from soc.views.models import organization as organization_view
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   239
1745
d8a45f622241 Don't override the params argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1743
diff changeset
   240
    org_params = organization_view.view.getParams()
d8a45f622241 Don't override the params argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1743
diff changeset
   241
    org_params['list_template'] = 'soc/program/allocation/allocation.html'
d8a45f622241 Don't override the params argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1743
diff changeset
   242
    org_params['list_heading'] = 'soc/program/allocation/heading.html'
d8a45f622241 Don't override the params argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1743
diff changeset
   243
    org_params['list_row'] = 'soc/program/allocation/row.html'
d8a45f622241 Don't override the params argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1743
diff changeset
   244
    org_params['list_pagination'] = 'soc/list/no_pagination.html'
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   245
1762
c47b9deb22ac Use getFromKeyFieldsOr404 in slots() and allocateSlots()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1751
diff changeset
   246
    program = program_logic.logic.getFromKeyFieldsOr404(kwargs)
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   247
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   248
    filter = {
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   249
        'scope': program,
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   250
        'status': 'active',
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   251
        }
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   252
1745
d8a45f622241 Don't override the params argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1743
diff changeset
   253
    content = lists.getListContent(request, org_params, filter=filter)
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   254
    contents = [content]
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   255
1747
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   256
    return_url =  "http://%(host)s%(index)s" % {
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   257
      'host' : os.environ['HTTP_HOST'],
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   258
      'index': redirects.getSlotsRedirect(program, params)
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   259
      }
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   260
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   261
    context = {
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   262
        'total_slots': program.slots,
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   263
        'uses_json': True,
1747
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   264
        'uses_slot_allocator': True,
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   265
        'return_url': return_url,
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   266
        }
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   267
1745
d8a45f622241 Don't override the params argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1743
diff changeset
   268
    return self._list(request, org_params, contents, page_name, context)
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   269
769
a0ee643fe832 Added an elementary workflow choosing method to program creation.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 755
diff changeset
   270
  def _editPost(self, request, entity, fields):
a0ee643fe832 Added an elementary workflow choosing method to program creation.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 755
diff changeset
   271
    """See base._editPost().
a0ee643fe832 Added an elementary workflow choosing method to program creation.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 755
diff changeset
   272
    """
777
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   273
1475
22b63ab59b27 Make timeline a Linkable
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1470
diff changeset
   274
    super(View, self)._editPost(request, entity, fields)
22b63ab59b27 Make timeline a Linkable
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1470
diff changeset
   275
770
eb2e69312953 Fixed a bug where a new timeline would get created on every edit of an existing program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 769
diff changeset
   276
    if not entity:
eb2e69312953 Fixed a bug where a new timeline would get created on every edit of an existing program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 769
diff changeset
   277
      # there is no existing entity so create a new timeline
777
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   278
      fields['timeline'] = self._createTimelineForType(fields)
770
eb2e69312953 Fixed a bug where a new timeline would get created on every edit of an existing program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 769
diff changeset
   279
    else:
eb2e69312953 Fixed a bug where a new timeline would get created on every edit of an existing program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 769
diff changeset
   280
      # use the timeline from the entity
eb2e69312953 Fixed a bug where a new timeline would get created on every edit of an existing program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 769
diff changeset
   281
      fields['timeline'] = entity.timeline
777
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   282
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   283
  def _createTimelineForType(self, fields):
771
0b1beae179f5 Typo and style fixes.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 770
diff changeset
   284
    """Creates and stores a timeline model for the given type of program.
769
a0ee643fe832 Added an elementary workflow choosing method to program creation.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 755
diff changeset
   285
    """
777
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   286
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   287
    workflow = fields['workflow']
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   288
778
bc13cd968946 Added support for mutliple edit forms based on entity type
Sverre Rabbelier <srabbelier@gmail.com>
parents: 777
diff changeset
   289
    timeline_logic = program_logic.logic.TIMELINE_LOGIC[workflow]
777
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   290
1512
97c4a718d6f4 Remove updateOrCreateFromFields and it's uses
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1511
diff changeset
   291
    properties = timeline_logic.getKeyFieldsFromFields(fields)
97c4a718d6f4 Remove updateOrCreateFromFields and it's uses
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1511
diff changeset
   292
    key_name = timeline_logic.getKeyNameFromFields(properties)
97c4a718d6f4 Remove updateOrCreateFromFields and it's uses
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1511
diff changeset
   293
1475
22b63ab59b27 Make timeline a Linkable
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1470
diff changeset
   294
    properties['scope'] = fields['scope']
777
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   295
1512
97c4a718d6f4 Remove updateOrCreateFromFields and it's uses
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1511
diff changeset
   296
    timeline = timeline_logic.updateOrCreateFromKeyName(properties, key_name)
777
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   297
    return timeline
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   298
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
   299
  @decorators.merge_params
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1007
diff changeset
   300
  def getExtraMenus(self, id, user, params=None):
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   301
    """Returns the extra menu's for this view.
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   302
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   303
    A menu item is generated for each program that is currently
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   304
    running. The public page for each program is added as menu item,
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   305
    as well as all public documents for that program.
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   306
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   307
    Args:
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   308
      params: a dict with params for this View.
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   309
    """
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   310
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   311
    logic = params['logic']
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
   312
    rights = params['rights']
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   313
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   314
    # only get all invisible and visible programs
1511
3342ce7a495c Fix some whitespace damadge and a style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1492
diff changeset
   315
    fields = {'status': ['invisible', 'visible']}
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   316
    entities = logic.getForFields(fields)
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   317
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   318
    menus = []
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   319
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
   320
    rights.setCurrentUser(id, user)
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
   321
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   322
    for entity in entities:
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   323
      items = []
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
   324
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   325
      if entity.status == 'visible':
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   326
        # show the documents for this program, even for not logged in users
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   327
        items += document_view.view.getMenusForScope(entity, params)
1317
fad74cf4e5da Add a 'list documents' link everywhere
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   328
        items += self._getTimeDependentEntries(entity, params, id, user)
1097
1f7015b33a0c Add a 'Create new document' link for clubs, sponsors and programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1074
diff changeset
   329
1f7015b33a0c Add a 'Create new document' link for clubs, sponsors and programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1074
diff changeset
   330
      try:
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   331
        # check if the current user is a host for this program
1511
3342ce7a495c Fix some whitespace damadge and a style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1492
diff changeset
   332
        rights.doCachedCheck('checkIsHostForProgram',
1325
8368086dd3a7 Add a list_public view to organization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1321
diff changeset
   333
                             {'scope_path': entity.scope_path,
8368086dd3a7 Add a list_public view to organization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1321
diff changeset
   334
                              'link_id': entity.link_id}, [])
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   335
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   336
        if entity.status == 'invisible':
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   337
          # still add the document links so hosts can see how it looks like
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   338
          items += document_view.view.getMenusForScope(entity, params)
1321
0e587b1d0c1d Fixed missing parameters in program view due to change in _getTimeDependentEntries in r1943.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1317
diff changeset
   339
          items += self._getTimeDependentEntries(entity, params, id, user)
1257
12d2bf06698f Added a button to list all your org applications to a speficic program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1248
diff changeset
   340
1238
af56ae7397ab Added scoped group_app listing.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1225
diff changeset
   341
        items += [(redirects.getReviewOverviewRedirect(
af56ae7397ab Added scoped group_app listing.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1225
diff changeset
   342
            entity, {'url_name': 'org_app'}),
1352
4f118840617f Fix import sorting in soc.views.models.program module and rename any "Org" in link names to "Organization".
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1343
diff changeset
   343
            "Review Organization Applications", 'any_access')]
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   344
        # add link to edit Program Profile
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   345
        items += [(redirects.getEditRedirect(entity, params),
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   346
            'Edit Program Profile','any_access')]
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   347
        # add link to edit Program Timeline
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   348
        items += [(redirects.getEditRedirect(entity, {'url_name': 'timeline'}),
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   349
            "Edit Program Timeline", 'any_access')]
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   350
        # add link to create a new Program Document
1097
1f7015b33a0c Add a 'Create new document' link for clubs, sponsors and programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1074
diff changeset
   351
        items += [(redirects.getCreateDocumentRedirect(entity, 'program'),
1144
f89bbc9b20a6 Rename 'Create a new document' links to 'Create a New Document', also rename 'Create a new Program' to 'Create a New Program' in soc.views.models modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1115
diff changeset
   352
            "Create a New Document", 'any_access')]
1317
fad74cf4e5da Add a 'list documents' link everywhere
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   353
        # add link to list all Program Document
fad74cf4e5da Add a 'list documents' link everywhere
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   354
        items += [(redirects.getListDocumentsRedirect(entity, 'program'),
fad74cf4e5da Add a 'list documents' link everywhere
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   355
            "List Documents", 'any_access')]
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   356
1097
1f7015b33a0c Add a 'Create new document' link for clubs, sponsors and programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1074
diff changeset
   357
      except out_of_band.Error:
1f7015b33a0c Add a 'Create new document' link for clubs, sponsors and programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1074
diff changeset
   358
        pass
1f7015b33a0c Add a 'Create new document' link for clubs, sponsors and programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1074
diff changeset
   359
1162
1d9396d75c13 Do not return empty menu's in program.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1144
diff changeset
   360
      items = sidebar.getSidebarMenu(id, user, items, params=params)
1d9396d75c13 Do not return empty menu's in program.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1144
diff changeset
   361
      if not items:
1d9396d75c13 Do not return empty menu's in program.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1144
diff changeset
   362
        continue
1d9396d75c13 Do not return empty menu's in program.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1144
diff changeset
   363
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   364
      menu = {}
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   365
      menu['heading'] = entity.short_name
1162
1d9396d75c13 Do not return empty menu's in program.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1144
diff changeset
   366
      menu['items'] = items
1024
2a0ae6483825 Group dynamically generated menu items
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1023
diff changeset
   367
      menu['group'] = 'Programs'
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   368
      menus.append(menu)
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   369
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   370
    return menus
647
355ac73823a1 Swap order of merged params to fix sponsor select view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 643
diff changeset
   371
1317
fad74cf4e5da Add a 'list documents' link everywhere
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   372
  def _getTimeDependentEntries(self, program_entity, params, id, user):
1643
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
   373
    """Returns a list with time dependent menu items.
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
   374
    """
1209
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   375
    items = []
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   376
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   377
    #TODO(ljvderijk) Add more timeline dependent entries
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   378
    timeline_entity = program_entity.timeline
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   379
1321
0e587b1d0c1d Fixed missing parameters in program view due to change in _getTimeDependentEntries in r1943.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1317
diff changeset
   380
    if timeline_helper.isActivePeriod(timeline_entity, 'org_signup'):
1209
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   381
      # add the organization signup link
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   382
      items += [
1225
1d5c58e24fd3 Org applications can now only be made by a user when a program allows it.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1218
diff changeset
   383
          (redirects.getApplyRedirect(program_entity, {'url_name': 'org_app'}),
1209
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   384
          "Apply to become an Organization", 'any_access')]
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   385
1321
0e587b1d0c1d Fixed missing parameters in program view due to change in _getTimeDependentEntries in r1943.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1317
diff changeset
   386
      if user:
1352
4f118840617f Fix import sorting in soc.views.models.program module and rename any "Org" in link names to "Organization".
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1343
diff changeset
   387
        # add the 'List my Organization Applications' link
1321
0e587b1d0c1d Fixed missing parameters in program view due to change in _getTimeDependentEntries in r1943.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1317
diff changeset
   388
        items += [
1511
3342ce7a495c Fix some whitespace damadge and a style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1492
diff changeset
   389
            (redirects.getListSelfRedirect(program_entity,
1321
0e587b1d0c1d Fixed missing parameters in program view due to change in _getTimeDependentEntries in r1943.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1317
diff changeset
   390
                                           {'url_name' : 'org_app'}),
1352
4f118840617f Fix import sorting in soc.views.models.program module and rename any "Org" in link names to "Organization".
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1343
diff changeset
   391
             "List My Organization Applications", 'any_access')]
1257
12d2bf06698f Added a button to list all your org applications to a speficic program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1248
diff changeset
   392
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   393
    # get the student entity for this user and program
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   394
    filter = {'user': user,
1564
49a9858c8803 For links in a program to take effect there must be an active role.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1512
diff changeset
   395
              'scope': program_entity,
49a9858c8803 For links in a program to take effect there must be an active role.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1512
diff changeset
   396
              'status': 'active'}
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   397
    student_entity = student_logic.logic.getForFields(filter, unique=True)
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   398
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   399
    if student_entity:
1470
5e887fb80921 Added list my Student Proposals link to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1437
diff changeset
   400
      items += self._getStudentEntries(program_entity, student_entity,
5e887fb80921 Added list my Student Proposals link to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1437
diff changeset
   401
                                       params, id, user)
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   402
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   403
    # get mentor and org_admin entity for this user and program
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   404
    filter = {'user': user,
1564
49a9858c8803 For links in a program to take effect there must be an active role.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1512
diff changeset
   405
              'program': program_entity,
49a9858c8803 For links in a program to take effect there must be an active role.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1512
diff changeset
   406
              'status': 'active'}
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   407
    mentor_entity = mentor_logic.logic.getForFields(filter, unique=True)
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   408
    org_admin_entity = org_admin_logic.logic.getForFields(filter, unique=True)
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   409
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   410
    if mentor_entity or org_admin_entity:
1470
5e887fb80921 Added list my Student Proposals link to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1437
diff changeset
   411
      items += self._getOrganizationEntries(program_entity, org_admin_entity,
5e887fb80921 Added list my Student Proposals link to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1437
diff changeset
   412
                                            mentor_entity, params, id, user)
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   413
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   414
    if not (student_entity or mentor_entity or org_admin_entity):
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   415
      if timeline_helper.isActivePeriod(timeline_entity, 'student_signup'):
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   416
        # this user does not have a role yet for this program
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   417
        items += [('/student/apply/%s' % (program_entity.key().name()),
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   418
            "Register as a Student", 'any_access')]
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   419
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   420
    if timeline_helper.isAfterEvent(timeline_entity,
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   421
        'accepted_organization_announced_deadline'):
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   422
      # add a link to list all the organizations
1643
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
   423
      items += [(redirects.getPublicListRedirect(program_entity, 
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
   424
          {'url_name': 'org'}),
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   425
          "List participating Organizations", 'any_access')]
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   426
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   427
      if not student_entity:
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   428
        # add apply to become a mentor link
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   429
        items += [('/org/apply_mentor/%s' % (program_entity.key().name()),
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   430
         "Apply to become a Mentor", 'any_access')]
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   431
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   432
    return items
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   433
1643
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
   434
  def _getStudentEntries(self, program_entity, student_entity, 
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
   435
                         params, id, user):
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   436
    """Returns a list with menu items for students in a specific program.
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   437
    """
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   438
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   439
    items = []
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   440
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   441
    timeline_entity = program_entity.timeline
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   442
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   443
    if timeline_helper.isActivePeriod(timeline_entity, 'student_signup'):
1643
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
   444
      items += [('/student_proposal/list_orgs/%s' % (
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
   445
          student_entity.key().name()),
1492
deac044c10b6 Textual change in program menu due to comment on r2113.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1490
diff changeset
   446
          "Submit your Student Proposal", 'any_access')]
1470
5e887fb80921 Added list my Student Proposals link to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1437
diff changeset
   447
      items += [(redirects.getListSelfRedirect(student_entity,
1643
7b33b9442c81 Fix too long lines, remove unused variable, add missing docstring in soc.views.models.program module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1584
diff changeset
   448
          {'url_name':'student_proposal'}),
1470
5e887fb80921 Added list my Student Proposals link to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1437
diff changeset
   449
         "List my Student Proposals", 'any_access')]
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   450
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   451
    return items
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   452
1470
5e887fb80921 Added list my Student Proposals link to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1437
diff changeset
   453
  def _getOrganizationEntries(self, program_entity, org_admin_entity,
5e887fb80921 Added list my Student Proposals link to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1437
diff changeset
   454
                              mentor_entity, params, id, user):
1511
3342ce7a495c Fix some whitespace damadge and a style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1492
diff changeset
   455
    """Returns a list with menu items for org admins and mentors in a
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   456
       specific program.
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   457
    """
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   458
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   459
    # TODO(ljvderijk) think about adding specific org items like submit review
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   460
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   461
    items = []
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   462
1209
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   463
    return items
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   464
c875b0836f77 Specific program menu's now show a "Apply to become an Organization" entry when the program's timeline states that it's open.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1203
diff changeset
   465
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   466
view = View()
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   467
1584
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   468
admin = decorators.view(view.admin)
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   469
assign_slots = decorators.view(view.assignSlots)
1584
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   470
create = decorators.view(view.create)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   471
delete = decorators.view(view.delete)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   472
edit = decorators.view(view.edit)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   473
list = decorators.view(view.list)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   474
public = decorators.view(view.public)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   475
export = decorators.view(view.export)
1706
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   476
slots = decorators.view(view.slots)
1584
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   477
home = decorators.view(view.home)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   478
pick = decorators.view(view.pick)