project/scipycon/registration/views.py
changeset 310 3541adaa5cd3
parent 291 182b03a1e6fe
child 318 6963bc54d5c2
equal deleted inserted replaced
309:861223798fa4 310:3541adaa5cd3
       
     1 import datetime
       
     2 import time
       
     3 
     1 from django.contrib.auth import authenticate
     4 from django.contrib.auth import authenticate
     2 from django.contrib.auth import login
     5 from django.contrib.auth import login
     3 from django.contrib.auth.decorators import login_required
     6 from django.contrib.auth.decorators import login_required
     4 from django.contrib.auth.forms import AuthenticationForm
     7 from django.contrib.auth.forms import AuthenticationForm
     5 from django.contrib.auth.models import User
     8 from django.contrib.auth.models import User
   342         list_user_ids = []
   345         list_user_ids = []
   343 
   346 
   344         mail_subject = 'SciPy.in 2010: Confirmation of fee payment'
   347         mail_subject = 'SciPy.in 2010: Confirmation of fee payment'
   345         mail_template = 'notifications/payment_confirmation2010.html'
   348         mail_template = 'notifications/payment_confirmation2010.html'
   346 
   349 
   347         for user_id_string in post_data:
   350         def parse_form():
   348             id_str_list = user_id_string.split('_')
   351             """Helper function that gets the User ID from the
   349             if (len(id_str_list) == 3 and id_str_list[0] == 'registrant' and
   352             form name
   350               id_str_list[1] == 'id'):
   353             """
   351                 id = int(id_str_list[2])
   354 
   352                 reg_user = User.objects.get(pk=id)
   355             confirmed_ids = []
   353 
   356             acco_ids = []
   354                 payment, created = reg_user.payment_set.get_or_create(
   357             date_ids = {}
   355                   user=reg_user, scope=scope_entity)
   358 
   356 
   359             for name_string in post_data:
   357                 payment.confirmed = True
   360                 id_str_list = name_string.split('_')
   358                 payment.save()
   361                 if (len(id_str_list) == 3 and id_str_list[1] == 'id'):
   359 
   362                     if id_str_list[0] == 'confirmed':
   360                 mail_message = loader.render_to_string(
   363                         confirmed_ids.append(int(id_str_list[2]))
   361                     mail_template,
   364                     if id_str_list[0] == 'acco':
   362                     dictionary={'name': reg_user.get_full_name(),})
   365                         acco_ids.append(int(id_str_list[2]))
   363                 reg_user.email_user(mail_subject, mail_message,
   366                     if id_str_list[0] == 'date':
   364                                     from_email='admin@scipy.in')
   367                         date_str = post_data.get(name_string, None)
   365                 list_user_ids.append(id)
   368                         if date_str:
   366 
   369                             date_ids[int(id_str_list[2])] = post_data.get(
   367         # This is done to unset for the confirmation for users for whom
   370                               name_string, '')
   368         # mistakenly confirmation was set.
   371 
   369         # (TODO) This is a very expensive operation, any better solution
   372             return confirmed_ids, acco_ids, date_ids
   370         # will be appreciated.
   373 
   371         unpaid_users = User.objects.exclude(pk__in=list_user_ids)
   374         confirmed_ids, acco_ids, date_ids = parse_form()
   372         for user in unpaid_users:
   375 
       
   376         confirmed_users = set(User.objects.filter(id__in=confirmed_ids))
       
   377         acco_users = set(User.objects.filter(id__in=acco_ids))
       
   378 
       
   379         # Users for whom both registration and accommodation is confirmed
       
   380         for user in confirmed_users & acco_users:
   373             payment, created = user.payment_set.get_or_create(
   381             payment, created = user.payment_set.get_or_create(
   374               user=user, scope=scope_entity)
   382               user=user, scope=scope_entity)
   375             payment.confirmed = False
   383 
       
   384             payment.confirmed = True
       
   385             payment.acco_confirmed = True
       
   386             payment.save()
       
   387 
       
   388             if not payment.confirmed_mail and not payment.acco_confirmed_mail:
       
   389                 mail_message = loader.render_to_string(
       
   390                   mail_template,
       
   391                   dictionary={'name': user.get_full_name(),
       
   392                             'acco': True,
       
   393                             'reg': True})
       
   394                 user.email_user(mail_subject, mail_message,
       
   395                                 from_email='admin@scipy.in')
       
   396                 payment.confirmed_mail =True
       
   397                 payment.acco_confirmed_mail = True
       
   398                 payment.save()
       
   399 
       
   400         # Users for whom only registration is confirmed
       
   401         for user in confirmed_users - acco_users:
       
   402             payment, created = user.payment_set.get_or_create(
       
   403               user=user, scope=scope_entity)
       
   404 
       
   405             payment.confirmed = True
       
   406             payment.save()
       
   407 
       
   408             if not payment.confirmed_mail:
       
   409                 mail_message = loader.render_to_string(
       
   410                   mail_template,
       
   411                   dictionary={'name': user.get_full_name(),
       
   412                           'reg': True})
       
   413                 user.email_user(mail_subject, mail_message,
       
   414                                 from_email='admin@scipy.in')
       
   415                 payment.confirmed_mail =True
       
   416                 payment.save()
       
   417 
       
   418         # Users for whom only accommodation is confirmed
       
   419         for user in acco_users - confirmed_users:
       
   420             payment, created = user.payment_set.get_or_create(
       
   421               user=user, scope=scope_entity)
       
   422 
       
   423             payment.acco_confirmed = True
       
   424             payment.save()
       
   425 
       
   426             if not payment.acco_confirmed_mail:
       
   427                 mail_message = loader.render_to_string(
       
   428                   mail_template,
       
   429                   dictionary={'name': user.get_full_name(),
       
   430                           'acco': True})
       
   431                 user.email_user(mail_subject, mail_message,
       
   432                                 from_email='admin@scipy.in')
       
   433                 payment.acco_confirmed_mail = True
       
   434                 payment.save()
       
   435 
       
   436         # Users for whom fee payment date is updated
       
   437         for id in date_ids:
       
   438             user = User.objects.get(id=id)
       
   439             payment, created = user.payment_set.get_or_create(
       
   440               user=user, scope=scope_entity)
       
   441 
       
   442             time_format = "%m/%d/%Y"
       
   443             date = datetime.datetime.fromtimestamp(time.mktime(
       
   444               time.strptime(date_ids[id], time_format)))
       
   445 
       
   446             payment.date_confirmed = date
   376             payment.save()
   447             payment.save()
   377 
   448 
   378     registrants = Registration.objects.all()
   449     registrants = Registration.objects.all()
   379 
   450 
   380     return render_to_response(template_name, RequestContext(request,
   451     return render_to_response(template_name, RequestContext(request,