app/soc/views/models/program.py
author Sverre Rabbelier <srabbelier@gmail.com>
Sun, 15 Mar 2009 14:10:21 +0000
changeset 1866 a0dcc158bad3
parent 1865 f00720cddea0
child 1875 69d60793092a
permissions -rw-r--r--
Renamed "Idea page" to "Ideas page" Also renamed "all organizations" to "accepted organizations". Added a longer description to the first list. 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
1852
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
    41
from soc.logic.models import org_app as org_app_logic
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
    42
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
    43
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
    44
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
    45
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
    46
from soc.views import helper
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
    47
from soc.views import out_of_band
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
    48
from soc.views.helper import access
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
    49
from soc.views.helper import decorators
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
    50
from soc.views.helper import lists
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    51
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
    52
from soc.views.helper import widgets
1698
a8da5a620236 Switch Program to regular presence
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1643
diff changeset
    53
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
    54
from soc.views.models import document as document_view
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    55
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
    56
from soc.views.sitemap import sidebar
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    57
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    58
import soc.logic.models.program
1260
594c6b500378 Added Agreement properties to Program Model.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1257
diff changeset
    59
import soc.models.work
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    60
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    61
1698
a8da5a620236 Switch Program to regular presence
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1643
diff changeset
    62
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
    63
  """View methods for the Program model.
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    64
  """
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    65
656
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
    66
  def __init__(self, params=None):
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    67
    """Defines the fields and methods required for the base View class
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    68
    to provide the user with list, public, create, edit and delete views.
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    69
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    70
    Params:
656
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
    71
      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
    72
    """
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
    73
1007
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
    74
    rights = access.Checker(params)
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
    75
    rights['any_access'] = ['allow']
3b66772d21a5 Major refactor of the access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
    76
    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
    77
    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
    78
        host_logic.logic])]
1074
94bc2a9ae103 Properly check if a program is active
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1053
diff changeset
    79
    rights['edit'] = ['checkIsHostForProgram']
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
    80
    rights['delete'] = ['checkIsDeveloper']
1743
669b6136b7b3 Restricted slots and assign_slots to dev-only for now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1736
diff changeset
    81
    rights['assign_slots'] = ['checkIsDeveloper']
669b6136b7b3 Restricted slots and assign_slots to dev-only for now
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1736
diff changeset
    82
    rights['slots'] = ['checkIsDeveloper']
1830
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
    83
    rights['show_duplicates'] = ['checkIsHostForProgram']
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
    84
    rights['assigned_proposals'] = ['checkIsHostForProgram']
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    85
656
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
    86
    new_params = {}
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
    87
    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
    88
    new_params['rights'] = rights
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    89
662
0e89b027b140 Make use of the new generic key_name by lookup up scope_path
Sverre Rabbelier <srabbelier@gmail.com>
parents: 660
diff changeset
    90
    new_params['scope_view'] = sponsor_view
681
48983ecf4665 Cleanups in group and program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 680
diff changeset
    91
    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
    92
656
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
    93
    new_params['name'] = "Program"
1025
1f83f05f522b Add grouping to the existing views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1024
diff changeset
    94
    new_params['sidebar_grouping'] = 'Programs'
1303
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
    95
    new_params['document_prefix'] = "program"
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
    96
1511
3342ce7a495c Fix some whitespace damadge and a style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1492
diff changeset
    97
    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
    98
        'mentor_agreement', 'student_agreement']
810
208659644a7f Hide 'tos' pull-down selector from Program profile forms.
Todd Larsen <tlarsen@google.com>
parents: 799
diff changeset
    99
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   100
    patterns = []
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   101
    patterns += [
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   102
        (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
   103
          'soc.views.models.%(module_name)s.assign_slots',
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   104
          'Assign slots'),
1706
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   105
        (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
   106
          'soc.views.models.%(module_name)s.slots',
1764
1c56cbbf3a33 Views should have a unique name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1762
diff changeset
   107
          'Assign slots (JSON)'),
1830
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   108
        (r'^%(url_name)s/(?P<access_type>show_duplicates)/%(key_fields)s$',
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   109
          'soc.views.models.%(module_name)s.show_duplicates',
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   110
          'Show duplicate slot assignments'),
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   111
        (r'^%(url_name)s/(?P<access_type>assigned_proposals)/%(key_fields)s$',
1863
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   112
          'soc.views.models.%(module_name)s.assigned_proposals',
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   113
          "Assigned proposals for multiple orgs"),
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   114
        (r'^%(url_name)s/(?P<access_type>accepted_orgs)/%(key_fields)s$',
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   115
          'soc.views.models.%(module_name)s.accepted_orgs',
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   116
          "List all accepted orgs"),
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   117
        ]
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   118
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   119
    new_params['extra_django_patterns'] = patterns
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   120
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   121
    # 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
   122
    new_params['create_extra_dynaproperties'] = {
649
95a41542e693 Finish Program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 647
diff changeset
   123
        '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
   124
            attrs={'rows':10, 'cols':40})),
77f9a6ea6e67 Some style and typo fixes in different modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 666
diff changeset
   125
        '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
   126
        '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
   127
            ('ghop','Task-based')], required=True),
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   128
        }
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   129
1303
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   130
    reference_fields = [
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   131
        ('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
   132
         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
   133
        ('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
   134
         ugettext('Mentor Agreement Document link ID')),
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   135
        ('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
   136
         ugettext('Student Agreement Document link ID')),
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   137
        ('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
   138
         ugettext('Home page Document link ID')),
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   139
        ]
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   140
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   141
    result = {}
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   142
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   143
    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
   144
      result[key] = widgets.ReferenceField(
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   145
          reference_url='document', filter=['__scoped__'],
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   146
          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
   147
          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
   148
08433090cff8 Add prefix filtering and refactored program field generation
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1281
diff changeset
   149
    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
   150
                                         required=True)
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   151
    result['clean'] = cleaning.clean_refs(new_params,
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   152
                                          [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
   153
1430
ff8cc6b15e6a Rename dynafields to dynaproperties
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1352
diff changeset
   154
    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
   155
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   156
    document_references = [
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   157
        ('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
   158
         lambda x: x.org_admin_agreement),
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   159
        ('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
   160
         lambda x: x.mentor_agreement),
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   161
        ('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
   162
         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
   163
        ]
324a1ecc4e88 Use the newly added __scoped__ and references for program's ToSes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1260
diff changeset
   164
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1698
diff changeset
   165
    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
   166
1260
594c6b500378 Added Agreement properties to Program Model.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1257
diff changeset
   167
    params = dicts.merge(params, new_params, sub_merge=True)
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   168
656
a76f1b443ea4 Cleanups in the views module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
   169
    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
   170
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   171
  @decorators.merge_params
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   172
  @decorators.check_access
1863
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   173
  def acceptedOrgs(self, request, access_type,
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   174
                   page_name=None, params=None, filter=None, **kwargs):
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   175
    """See base.View.list.
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   176
    """
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   177
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   178
    contents = []
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   179
    logic = params['logic']
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   180
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   181
    program_entity = logic.getFromKeyFieldsOr404(kwargs)
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   182
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   183
    filter = {
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   184
        'status': 'accepted',
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   185
        'scope': program_entity,
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   186
        }
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   187
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   188
    from soc.views.models import org_app as org_app_view
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   189
    aa_params = org_app_view.view.getParams().copy() # accepted applications
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   190
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   191
    # define the list redirect action to show the notification
1865
f00720cddea0 Remove key_order from 'list accepted orgs' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1863
diff changeset
   192
    del aa_params['list_key_order']
1863
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   193
    aa_params['list_action'] = (redirects.getPublicRedirect, aa_params)
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   194
    aa_params['list_description'] = ugettext(
1866
a0dcc158bad3 Renamed "Idea page" to "Ideas page"
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1865
diff changeset
   195
        "An overview of accepted organization applications that have"
a0dcc158bad3 Renamed "Idea page" to "Ideas page"
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1865
diff changeset
   196
        " not yet created their organization profile. Students can"
a0dcc158bad3 Renamed "Idea page" to "Ideas page"
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1865
diff changeset
   197
        " only apply to organizations that created their organization"
a0dcc158bad3 Renamed "Idea page" to "Ideas page"
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1865
diff changeset
   198
        " profile.")
1863
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   199
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   200
    aa_list = lists.getListContent(request, aa_params, filter, idx=0,
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   201
                                   need_content=True)
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   202
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   203
    if aa_list:
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   204
      contents.append(aa_list)
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   205
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   206
    filter['status'] = ['new', 'active']
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   207
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   208
    from soc.views.models import organization as org_view
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   209
    ao_params = org_view.view.getParams().copy() # active orgs
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   210
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   211
    ao_params['list_action'] = (redirects.getHomeRedirect, ao_params)
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   212
    ao_params['list_description'] = ugettext(
1866
a0dcc158bad3 Renamed "Idea page" to "Ideas page"
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1865
diff changeset
   213
        "An overview of all accepted organizations.")
1863
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   214
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   215
    ao_list = lists.getListContent(request, ao_params, filter, idx=1,
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   216
                                   need_content=True)
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   217
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   218
    if ao_list:
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   219
      contents.append(ao_list)
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   220
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   221
    return self._list(request, params, contents, page_name)
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   222
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   223
  @decorators.merge_params
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   224
  @decorators.check_access
1706
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   225
  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
   226
    """Returns a JSON object with all orgs allocation.
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   227
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   228
    Args:
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   229
      request: the standard Django HTTP request object
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   230
      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
   231
      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
   232
      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
   233
    """
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   234
1762
c47b9deb22ac Use getFromKeyFieldsOr404 in slots() and allocateSlots()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1751
diff changeset
   235
    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
   236
    slots = program.slots
1706
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   237
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   238
    filter = {
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   239
          'scope': program,
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   240
          'status': 'active',
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   241
          }
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   242
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   243
    query = org_logic.logic.getQueryForFields(filter=filter)
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   244
    organizations = org_logic.logic.getAll(query)
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   245
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   246
    locked_slots = adjusted_slots = {}
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   247
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   248
    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
   249
      result = request.POST['result']
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   250
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   251
      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
   252
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   253
      locked_slots = dicts.groupDictBy(from_json, 'locked', 'slots')
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   254
      adjusted_slots = dicts.groupDictBy(from_json, 'adjustment')
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   255
1855
8c76c32a2392 Fixed a very obvious bug in slots()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1852
diff changeset
   256
    orgs = {}
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   257
    applications = {}
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   258
    mentors = {}
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   259
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   260
    for org in organizations:
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   261
      filter = {
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   262
          'org': org,
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   263
          'status': ['new', 'pending']
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   264
          }
1855
8c76c32a2392 Fixed a very obvious bug in slots()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1852
diff changeset
   265
      orgs[org.link_id] = org
1751
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   266
      query = student_proposal_logic.logic.getQueryForFields(filter=filter)
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   267
      proposals = student_proposal_logic.logic.getAll(query)
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   268
      applications[org.link_id] = len(proposals)
17c7a7a48dc7 Switch from actual applications to popularity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1750
diff changeset
   269
      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
   270
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   271
    # TODO: Use configuration variables here
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   272
    max_slots_per_org = 40
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   273
    min_slots_per_org = 2
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   274
    iterative = False
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   275
1855
8c76c32a2392 Fixed a very obvious bug in slots()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1852
diff changeset
   276
    allocator = allocations.Allocator(orgs.keys(), applications, mentors,
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   277
                                      slots, max_slots_per_org,
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   278
                                      min_slots_per_org, iterative)
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   279
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   280
    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
   281
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   282
    data = []
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   283
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   284
    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
   285
      org = orgs[link_id]
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   286
      data.append({
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   287
          'link_id': link_id,
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   288
          'slots': count,
1855
8c76c32a2392 Fixed a very obvious bug in slots()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1852
diff changeset
   289
          'locked': locked_slots.get(link_id, 0),
8c76c32a2392 Fixed a very obvious bug in slots()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1852
diff changeset
   290
          'adjustment': adjusted_slots.get(link_id, 0),
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   291
          })
1706
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   292
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   293
    return self.json(request, data)
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   294
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   295
  @decorators.merge_params
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   296
  @decorators.check_access
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   297
  def assignSlots(self, request, access_type, page_name=None,
1857
febcaeb4234b Style fixes.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1855
diff changeset
   298
                  params=None, **kwargs):
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   299
    """View that allows to assign slots to orgs.
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   300
    """
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   301
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   302
    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
   303
1841
d7ac10b583fb Don't override org view params
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1830
diff changeset
   304
    org_params = organization_view.view.getParams().copy()
1745
d8a45f622241 Don't override the params argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1743
diff changeset
   305
    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
   306
    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
   307
    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
   308
    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
   309
1762
c47b9deb22ac Use getFromKeyFieldsOr404 in slots() and allocateSlots()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1751
diff changeset
   310
    program = program_logic.logic.getFromKeyFieldsOr404(kwargs)
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   311
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   312
    filter = {
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   313
        'scope': program,
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   314
        'status': 'active',
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   315
        }
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   316
1745
d8a45f622241 Don't override the params argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1743
diff changeset
   317
    content = lists.getListContent(request, org_params, filter=filter)
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   318
    contents = [content]
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   319
1747
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   320
    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
   321
      'host' : os.environ['HTTP_HOST'],
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   322
      'index': redirects.getSlotsRedirect(program, params)
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   323
      }
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   324
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   325
    context = {
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   326
        'total_slots': program.slots,
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   327
        'uses_json': True,
1747
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   328
        'uses_slot_allocator': True,
02f15a955c42 Provide the 'return_url' in the allocate slots view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1745
diff changeset
   329
        'return_url': return_url,
1736
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   330
        }
72fb61f67ff5 Add and use the new and improved allocation scripts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1706
diff changeset
   331
1745
d8a45f622241 Don't override the params argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1743
diff changeset
   332
    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
   333
1830
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   334
  @decorators.merge_params
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   335
  @decorators.check_access
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   336
  def showDuplicates(self, request, access_type, page_name=None,
1857
febcaeb4234b Style fixes.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1855
diff changeset
   337
                     params=None, **kwargs):
1830
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   338
    """View in which a host can see which students have been assigned multiple slots.
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   339
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   340
    For params see base.view.Public().
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   341
    """
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   342
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   343
    from django.utils import simplejson
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   344
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   345
    program_entity = program_logic.logic.getFromKeyFieldsOr404(kwargs)
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   346
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   347
    context = helper.responses.getUniversalContext(request)
1850
1e39b32ff4d7 Enable javascript in duplicate students view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1848
diff changeset
   348
    helper.responses.useJavaScript(context, params['js_uses_all'])
1830
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   349
    context['page_name'] = page_name
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   350
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   351
    # get all orgs for this program who are active and have slots assigned
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   352
    fields = {'scope': program_entity,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   353
              'slots >': 0,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   354
              'status': 'active'}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   355
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   356
    query = org_logic.logic.getQueryForFields(fields)
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   357
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   358
    to_json = {
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   359
        'nr_of_orgs': query.count(),
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   360
        'program_key': program_entity.key().name()}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   361
    json = simplejson.dumps(to_json)
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   362
    context['info'] = json
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   363
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   364
    # TODO(ljvderijk) cache the result of the duplicate calculation
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   365
    context['duplicate_cache_content'] = simplejson.dumps({})
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   366
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   367
    template = 'soc/program/show_duplicates.html'
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   368
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   369
    return helper.responses.respond(request, template=template, context=context)
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   370
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   371
  @decorators.merge_params
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   372
  @decorators.check_access
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   373
  def assignedProposals(self, request, access_type, page_name=None,
1857
febcaeb4234b Style fixes.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1855
diff changeset
   374
                        params=None, filter=None, **kwargs):
1830
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   375
    """Returns a JSON dict containing all the proposals that would have
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   376
    a slot assigned for a specific set of orgs.
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   377
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   378
    The request.GET limit and offset determines how many and which
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   379
    organizations should be returned.
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   380
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   381
    For params see base.View.public().
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   382
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   383
    Returns: JSON object with a collection of orgs and proposals. Containing
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   384
             identification information and contact information.
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   385
    """
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   386
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   387
    get_dict = request.GET
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   388
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   389
    if not (get_dict.get('limit') or get_dict.get('offset')):
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   390
      return self.json(request, {})
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   391
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   392
    try:
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   393
      limit = max(0, int(get_dict['limit']))
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   394
      offset = max(0, int(get_dict['offset']))
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   395
    except ValueError:
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   396
      return self.json(request, {})
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   397
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   398
    program_entity = program_logic.logic.getFromKeyFieldsOr404(kwargs)
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   399
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   400
    fields = {'scope': program_entity,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   401
              'slots >': 0,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   402
              'status': 'active'}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   403
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   404
    org_entities = org_logic.logic.getForFields(fields, limit=limit, offset=offset)
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   405
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   406
    orgs_data = {}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   407
    proposals_data = {}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   408
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   409
    # for each org get the proposals who will be assigned a slot
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   410
    for org in org_entities:
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   411
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   412
      org_data = {'name': org.name}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   413
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   414
      fields = {'scope': org,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   415
                'status': 'active',
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   416
                'user': org.founder}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   417
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   418
      org_admin = org_admin_logic.logic.getForFields(fields, unique=True)
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   419
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   420
      if org_admin:
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   421
        org_data['admin_name'] = org_admin.name()
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   422
        org_data['admin_email'] = org_admin.email
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   423
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   424
      # check if there are already slots taken by this org
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   425
      fields = {'org': org,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   426
                'status': 'accepted'}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   427
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   428
      query = student_proposal_logic.logic.getQueryForFields(fields)
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   429
      test = query.count()
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   430
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   431
      slots_left_to_assign = max(0, org.slots - query.count())
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   432
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   433
      if slots_left_to_assign == 0:
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   434
        # no slots left so next org
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   435
        continue
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   436
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   437
      # store information about the org
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   438
      orgs_data[org.key().name()] = org_data
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   439
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   440
      fields = {'org': org,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   441
                'mentor !=': None,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   442
                'status': 'pending'}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   443
      order = ['-score']
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   444
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   445
      # get the the number of proposals that would be assigned a slot
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   446
      student_proposal_entities = student_proposal_logic.logic.getForFields(
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   447
          fields, limit=slots_left_to_assign, order=order)
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   448
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   449
      proposal_data = {}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   450
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   451
      # store each proposal in the dictionary
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   452
      for proposal in student_proposal_entities:
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   453
        student_entity = proposal.scope
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   454
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   455
        proposals_data[proposal.key().name()] = {
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   456
            'proposal_title': proposal.title,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   457
            'student_key': student_entity.key().name(),
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   458
            'student_name': student_entity.name(),
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   459
            'student_contact': student_entity.email,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   460
            'org_key': org.key().name()
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   461
            }
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   462
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   463
      # store it with the other org data
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   464
      proposals_data['proposals'] = proposal_data
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   465
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   466
    # return all the data in JSON format
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   467
    data = {'orgs': orgs_data,
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   468
            'proposals': proposals_data}
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   469
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   470
    return self.json(request, data)
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   471
769
a0ee643fe832 Added an elementary workflow choosing method to program creation.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 755
diff changeset
   472
  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
   473
    """See base._editPost().
a0ee643fe832 Added an elementary workflow choosing method to program creation.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 755
diff changeset
   474
    """
777
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   475
1475
22b63ab59b27 Make timeline a Linkable
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1470
diff changeset
   476
    super(View, self)._editPost(request, entity, fields)
22b63ab59b27 Make timeline a Linkable
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1470
diff changeset
   477
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
   478
    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
   479
      # 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
   480
      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
   481
    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
   482
      # 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
   483
      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
   484
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   485
  def _createTimelineForType(self, fields):
771
0b1beae179f5 Typo and style fixes.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 770
diff changeset
   486
    """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
   487
    """
777
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   488
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   489
    workflow = fields['workflow']
16dcdb8f3357 Added an 'edit timeline' button to the program edit page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 771
diff changeset
   490
778
bc13cd968946 Added support for mutliple edit forms based on entity type
Sverre Rabbelier <srabbelier@gmail.com>
parents: 777
diff changeset
   491
    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
   492
1512
97c4a718d6f4 Remove updateOrCreateFromFields and it's uses
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1511
diff changeset
   493
    properties = timeline_logic.getKeyFieldsFromFields(fields)
97c4a718d6f4 Remove updateOrCreateFromFields and it's uses
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1511
diff changeset
   494
    key_name = timeline_logic.getKeyNameFromFields(properties)
97c4a718d6f4 Remove updateOrCreateFromFields and it's uses
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1511
diff changeset
   495
1475
22b63ab59b27 Make timeline a Linkable
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1470
diff changeset
   496
    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
   497
1512
97c4a718d6f4 Remove updateOrCreateFromFields and it's uses
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1511
diff changeset
   498
    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
   499
    return timeline
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   500
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
   501
  @decorators.merge_params
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1007
diff changeset
   502
  def getExtraMenus(self, id, user, params=None):
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   503
    """Returns the extra menu's for this view.
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   504
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   505
    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
   506
    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
   507
    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
   508
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   509
    Args:
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   510
      params: a dict with params for this View.
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   511
    """
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   512
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   513
    logic = params['logic']
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
   514
    rights = params['rights']
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   515
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   516
    # 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
   517
    fields = {'status': ['invisible', 'visible']}
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   518
    entities = logic.getForFields(fields)
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   519
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   520
    menus = []
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   521
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
   522
    rights.setCurrentUser(id, user)
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
   523
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   524
    for entity in entities:
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   525
      items = []
1038
0a0bc446f869 Allow for a program on/off switch
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1036
diff changeset
   526
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   527
      if entity.status == 'visible':
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   528
        # 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
   529
        items += document_view.view.getMenusForScope(entity, params)
1317
fad74cf4e5da Add a 'list documents' link everywhere
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   530
        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
   531
1f7015b33a0c Add a 'Create new document' link for clubs, sponsors and programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1074
diff changeset
   532
      try:
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   533
        # 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
   534
        rights.doCachedCheck('checkIsHostForProgram',
1325
8368086dd3a7 Add a list_public view to organization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1321
diff changeset
   535
                             {'scope_path': entity.scope_path,
8368086dd3a7 Add a list_public view to organization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1321
diff changeset
   536
                              'link_id': entity.link_id}, [])
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   537
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   538
        if entity.status == 'invisible':
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   539
          # 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
   540
          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
   541
          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
   542
1238
af56ae7397ab Added scoped group_app listing.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1225
diff changeset
   543
        items += [(redirects.getReviewOverviewRedirect(
af56ae7397ab Added scoped group_app listing.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1225
diff changeset
   544
            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
   545
            "Review Organization Applications", 'any_access')]
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   546
        # add link to edit Program Profile
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   547
        items += [(redirects.getEditRedirect(entity, params),
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   548
            'Edit Program Profile','any_access')]
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   549
        # add link to edit Program Timeline
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   550
        items += [(redirects.getEditRedirect(entity, {'url_name': 'timeline'}),
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   551
            "Edit Program Timeline", 'any_access')]
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   552
        # 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
   553
        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
   554
            "Create a New Document", 'any_access')]
1317
fad74cf4e5da Add a 'list documents' link everywhere
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   555
        # add link to list all Program Document
fad74cf4e5da Add a 'list documents' link everywhere
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   556
        items += [(redirects.getListDocumentsRedirect(entity, 'program'),
fad74cf4e5da Add a 'list documents' link everywhere
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   557
            "List Documents", 'any_access')]
1107
a878188e225c Added status to program.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1097
diff changeset
   558
1097
1f7015b33a0c Add a 'Create new document' link for clubs, sponsors and programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1074
diff changeset
   559
      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
   560
        pass
1f7015b33a0c Add a 'Create new document' link for clubs, sponsors and programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1074
diff changeset
   561
1162
1d9396d75c13 Do not return empty menu's in program.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1144
diff changeset
   562
      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
   563
      if not items:
1d9396d75c13 Do not return empty menu's in program.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1144
diff changeset
   564
        continue
1d9396d75c13 Do not return empty menu's in program.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1144
diff changeset
   565
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   566
      menu = {}
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   567
      menu['heading'] = entity.short_name
1162
1d9396d75c13 Do not return empty menu's in program.
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1144
diff changeset
   568
      menu['items'] = items
1024
2a0ae6483825 Group dynamically generated menu items
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1023
diff changeset
   569
      menu['group'] = 'Programs'
700
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   570
      menus.append(menu)
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   571
8baf8367340d Dynamically add sidebar items for programs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 681
diff changeset
   572
    return menus
647
355ac73823a1 Swap order of merged params to fix sponsor select view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 643
diff changeset
   573
1317
fad74cf4e5da Add a 'list documents' link everywhere
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   574
  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
   575
    """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
   576
    """
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
   577
    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
   578
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
   579
    #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
   580
    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
   581
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
   582
    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
   583
      # 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
   584
      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
   585
          (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
   586
          "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
   587
1848
a0cae3be1412 Show 'List my Organization Applications' link even after signup closed
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1841
diff changeset
   588
    if user and timeline_helper.isAfterEvent(timeline_entity, 'org_signup_start'):
1852
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   589
      filter = {
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   590
          'applicant': user,
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   591
          'scope': program_entity,
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   592
          }
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   593
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   594
      if org_app_logic.logic.getForFields(filter, unique=True):
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   595
        # add the 'List my Organization Applications' link
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   596
        items += [
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   597
            (redirects.getListSelfRedirect(program_entity,
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   598
                                           {'url_name' : 'org_app'}),
ea2e23e5b7a1 Show 'list my org apps' only if you have org apps
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1850
diff changeset
   599
             "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
   600
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   601
    # 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
   602
    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
   603
              '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
   604
              'status': 'active'}
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   605
    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
   606
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   607
    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
   608
      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
   609
                                       params, id, user)
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   610
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   611
    # 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
   612
    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
   613
              '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
   614
              'status': 'active'}
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   615
    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
   616
    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
   617
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   618
    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
   619
      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
   620
                                            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
   621
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   622
    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
   623
      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
   624
        # 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
   625
        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
   626
            "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
   627
1863
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   628
    deadline = 'accepted_organization_announced_deadline'
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   629
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   630
    if timeline_helper.isAfterEvent(timeline_entity, deadline):
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   631
      url = redirects.getAcceptedOrgsRedirect(program_entity, params)
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   632
      # add a link to list all the organizations
1863
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   633
      items += [(url, "List participating Organizations", 'any_access')]
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   634
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   635
      if not student_entity:
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   636
        # 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
   637
        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
   638
         "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
   639
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   640
    return items
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   641
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
   642
  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
   643
                         params, id, user):
1437
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   644
    """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
   645
    """
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   646
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   647
    items = []
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   648
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   649
    timeline_entity = program_entity.timeline
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   650
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   651
    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
   652
      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
   653
          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
   654
          "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
   655
      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
   656
          {'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
   657
         "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
   658
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   659
    return items
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   660
1470
5e887fb80921 Added list my Student Proposals link to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1437
diff changeset
   661
  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
   662
                              mentor_entity, params, id, user):
1511
3342ce7a495c Fix some whitespace damadge and a style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1492
diff changeset
   663
    """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
   664
       specific program.
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   665
    """
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   666
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   667
    # 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
   668
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   669
    items = []
eec60d5bbe95 Added several menu items to the program menu.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1430
diff changeset
   670
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
   671
    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
   672
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
   673
643
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   674
view = View()
b57d538a9dd3 Added programs
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   675
1863
d5272c2ded9f Added a 'accepted orgs' view to program
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1857
diff changeset
   676
accepted_orgs = decorators.view(view.acceptedOrgs)
1584
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   677
admin = decorators.view(view.admin)
1705
1dbce30b5757 Added a slot allocation view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   678
assign_slots = decorators.view(view.assignSlots)
1830
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   679
assigned_proposals = decorators.view(view.assignedProposals)
1584
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   680
create = decorators.view(view.create)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   681
delete = decorators.view(view.delete)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   682
edit = decorators.view(view.edit)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   683
list = decorators.view(view.list)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   684
public = decorators.view(view.public)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   685
export = decorators.view(view.export)
1830
b2b638076e90 Started with the view for showing students who have been assigned to multiple slots.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1764
diff changeset
   686
show_duplicates = decorators.view(view.showDuplicates)
1706
9609e2a0d7d7 Added a slots JSON call
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1705
diff changeset
   687
slots = decorators.view(view.slots)
1584
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   688
home = decorators.view(view.home)
d8ba8c917f37 Make use of decorators.view for all views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1564
diff changeset
   689
pick = decorators.view(view.pick)