scripts/allot_acco.py
author Madhusudan.C.S <madhusudancs@gmail.com>
Fri, 06 Aug 2010 14:41:41 +0530
branchanoop
changeset 219 3d3e4e4afb61
parent 217 69f9624b0129
permissions -rw-r--r--
Fixed a blatant bug with the looping element in the send mail script for accommodation allotment.

# Note: Most of the code below is hard coded with values. Please change it
# required. Reprensented as (HC) for Hard Coded values.

from sage_days.sdi.events import send_acco_confirm_mail
from sage_days.sdi.events import send_acco_reject_mail
from sage_days.sdi.models import ParticipantInfo, RegistrantInfo


def allot():
    """Performs the allotment of accomodation based on availability for the
       participants who have requested accommodation.
    """

    # (HC)
    # Availability for number of people at various locations. Here in the
    # Order of IITB Hostel, IITB Guest house and then NITIE
    availability = [30, 20, 20]

    # (HC)
    acco_info = ParticipantInfo.objects.filter(
        participant__acco_required=True)
    acco_given = acco_info[:65]
    acco_rejected = acco_info[65:]

    for participant in acco_given:
        if availability[0] <= 0:
            break
        if participant.will_sprint == '3' or participant.will_sprint == '2':
            if participant.participant.profession.lower() == 'student':
                reg_info = participant.participant.registrantinfo_set.get()
                reg_info.status_of_accomodation = '2'
                reg_info.acco_location = '0'
                availability[0] -= 1
                reg_info.save()

    for participant in acco_given:
        if availability[1] <= 0:
            break
        if participant.participant.gender == 'F':
            reg_info = participant.participant.registrantinfo_set.get()
            reg_info.status_of_accomodation = '2'
            reg_info.acco_location = '1'
            availability[1] -= 1
            reg_info.save()
        if participant.participant.gender == 'M':
            if (participant.will_sprint == '3' or
                participant.will_sprint == '2'):
                if participant.participant.profession.lower() != 'student':
                    reg_info = participant.participant.registrantinfo_set.get()
                    reg_info.status_of_accomodation = '2'
                    reg_info.acco_location = '1'
                    availability[1] -= 1
                    reg_info.save()

    for participant in acco_given:
        if availability[2] <= 0:
            break
        if (participant.will_sprint == '1'
            and participant.participant.gender == 'M'):
            reg_info = participant.participant.registrantinfo_set.get()
            reg_info.status_of_accomodation = '2'
            reg_info.acco_location = '2'
            availability[2] -= 1
            reg_info.save()

    for participant in acco_rejected:
        reg_info = participant.participant.registrantinfo_set.get()
        reg_info.status_of_accomodation = '3'
        reg_info.save()

def send_mails():
    """Sends mails to all those who have been alloted accommodation.
    """

    hostel_participants = RegistrantInfo.objects.filter(
        status_of_accomodation=2, acco_location=0)
    ghouse_partiticpants = RegistrantInfo.objects.filter(
        status_of_accomodation=2, acco_location=1)
    nitie_participants = RegistrantInfo.objects.filter(
        status_of_accomodation=2, acco_location=2)
    acco_rejected = RegistrantInfo.objects.filter(
        status_of_accomodation=3)

    for p in hostel_participants:
        send_acco_confirm_mail(p.registrant, 'IIT Bombay Hostel',
                               '150', True)

    for p in ghouse_partiticpants:
        send_acco_confirm_mail(p.registrant, 'IIT Bombay Guest House', '300')

    for p in nitie_participants:
        send_acco_confirm_mail(p.registrant, 'NITIE House', '500')
  
    for p in acco_rejected:
        send_acco_reject_mail(p.registrant)
  
    
#65
#Participants attending sprints: 21
#Female participants attending sprints: 2
#Male participants attending sprints: 19
#Female participants may be attending sprints: 4
#Male participants may beattending sprints: 21