app/soc/views/models/program.py
changeset 1751 17c7a7a48dc7
parent 1750 1ac2d27fdb6b
child 1762 c47b9deb22ac
equal deleted inserted replaced
1750:1ac2d27fdb6b 1751:17c7a7a48dc7
    36 from soc.logic.helper import timeline as timeline_helper
    36 from soc.logic.helper import timeline as timeline_helper
    37 from soc.logic.models import host as host_logic
    37 from soc.logic.models import host as host_logic
    38 from soc.logic.models import mentor as mentor_logic
    38 from soc.logic.models import mentor as mentor_logic
    39 from soc.logic.models import organization as org_logic
    39 from soc.logic.models import organization as org_logic
    40 from soc.logic.models import org_admin as org_admin_logic
    40 from soc.logic.models import org_admin as org_admin_logic
       
    41 from soc.logic.models import student_proposal as student_proposal_logic
    41 from soc.logic.models import program as program_logic
    42 from soc.logic.models import program as program_logic
    42 from soc.logic.models import student as student_logic
    43 from soc.logic.models import student as student_logic
    43 from soc.logic.models.document import logic as document_logic
    44 from soc.logic.models.document import logic as document_logic
    44 from soc.views import helper
    45 from soc.views import helper
    45 from soc.views import out_of_band
    46 from soc.views import out_of_band
   169     """
   170     """
   170 
   171 
   171     program = program_logic.logic.getFromKeyFields(kwargs)
   172     program = program_logic.logic.getFromKeyFields(kwargs)
   172     slots = program.slots
   173     slots = program.slots
   173 
   174 
       
   175     filter = {
       
   176           'scope': program,
       
   177           'status': 'active',
       
   178           }
       
   179 
       
   180     query = org_logic.logic.getQueryForFields(filter=filter)
       
   181     organizations = org_logic.logic.getAll(query)
       
   182 
       
   183     locked_slots = adjusted_slots = {}
       
   184 
   174     if request.method == 'POST' and 'result' in request.POST:
   185     if request.method == 'POST' and 'result' in request.POST:
   175       result = request.POST['result']
   186       result = request.POST['result']
   176 
   187 
   177       from_json = simplejson.loads(result).iteritems()
   188       from_json = simplejson.loads(result)
   178 
   189 
   179       # filter out all orgs where the link_id is 'undefined'
   190       locked_slots = dicts.groupDictBy(from_json, 'locked', 'slots')
   180       orgs = dict( ((k,v) for k, v in from_json if k != 'undefined'))
   191       adjusted_slots = dicts.groupDictBy(from_json, 'adjustment')
   181 
   192 
   182       locked_slots = dicts.groupDictBy(orgs, 'locked', 'slots')
   193     orgs = [i.link_id for i in organizations]
   183       adjusted_slots = dicts.groupDictBy(orgs, 'adjustment')
   194     applications = {}
   184     else:
   195     mentors = {}
       
   196 
       
   197     for org in organizations:
   185       filter = {
   198       filter = {
   186           'scope': program,
   199           'org': org,
       
   200           'status': ['new', 'pending']
   187           }
   201           }
   188 
   202       query = student_proposal_logic.logic.getQueryForFields(filter=filter)
   189       query = org_logic.logic.getQueryForFields(filter=filter)
   203       proposals = student_proposal_logic.logic.getAll(query)
   190       entities = [i.toDict() for i in org_logic.logic.getAll(query)]
   204       applications[org.link_id] = len(proposals)
   191 
   205       mentors[org.link_id] = len([i for i in proposals if i.mentor != None])
   192       # group orgs by link_id
       
   193       orgs = dict( ((i['link_id'], i) for i in entities) )
       
   194 
       
   195       # default to no orgs locked nor adjusted
       
   196       locked_slots = adjusted_slots = {}
       
   197 
       
   198     # TODO(Lennard): use real data here
       
   199     applications = dict( ((i, [1, 2]) for i in orgs.keys()) )
       
   200     mentors = dict( ((i, 1000) for i in orgs.keys()) )
       
   201 
   206 
   202     # TODO: Use configuration variables here
   207     # TODO: Use configuration variables here
   203     max_slots_per_org = 40
   208     max_slots_per_org = 40
   204     min_slots_per_org = 2
   209     min_slots_per_org = 2
   205     iterative = False
   210     iterative = False