Example #1
0
def send_invitation(event,user,invitation):
  #invitation email with registration link
  subject = settings.TEMPLATE_CONTENT['events']['email']['subject'] % { 'title': unicode(event.title) }
  message_content = {
    'FULLNAME'    : gen_fullname(user),
    'MESSAGE'     : unicode(invitation.message),
  }
  #send email
  try:
    return notify_by_email(user.email,subject,message_content,False,settings.MEDIA_ROOT + unicode(invitation.attachement))
  except:
    return notify_by_email(user.email,subject,message_content)
Example #2
0
def generate_invoice(m,year=date.today().strftime('%Y')):
  from members.models import Member

  INV = settings.ACCOUNTING['invoice']

  if m.type == Member.ORG:
    amount = settings.FEE[m.lvl]
  else:
    amount = settings.FEE[m.type]

  invoice_details = {
    'ID': invoice_id(m),
    'FULLNAME': gen_fullname(m.head_of_list),
    'DATE': date.today().strftime('%Y-%m-%d'),
    'YEAR': year,
    'AMOUNT': amount,
    'CURRENCY': INV['currency'],
  } 

  # generate pdf invoice
  from StringIO import StringIO
  pdf = StringIO()
  pdf_invoice(pdf, m, invoice_details)
  pdf.seek(0)

  fn=invoice_details['ID'] + '.pdf'
 
  # create attachement
  from email.mime.application import MIMEApplication
  attachment = MIMEApplication(pdf.read())
  attachment.add_header("Content-Disposition", "attachment",filename=fn)

  #save invoice in Fee model
  try:
    F = Fee.objects.get(member=m,year=year)
    F.paid = False
    F.paid_date = None
    F.invoice.save(fn,File(pdf),save=True)
  except Fee.DoesNotExist:
    F = Fee(member=m,year=year)
    F.paid = False
    F.paid_date = None
    F.invoice.save(fn,File(pdf),save=True)
  pdf.close()

  # send email
  from cms.functions import notify_by_email
  subject = INV['subject'] % m.id
  notify_by_email(m.head_of_list.email,subject,invoice_details,INV['mail_template'],attachment)
Example #3
0
def handle_uploaded_file(f,c,subject,to,message,template):
  # create random filename
  fn = unicode('UPL/'+c+'/'+gen_hash(settings.REG_SALT,c,10,to)+'_'+f.name)
  # save file to "campaign" folder
  with open(settings.MEDIA_ROOT+fn, 'wb+') as destination:
    for chunk in f.chunks():
      destination.write(chunk)

  # send file to "campaign" mailinglist
  message_content = {
    'MESSAGE'	: message,
    'LINK'	: 'https://'+settings.ALLOWED_HOSTS[0]+settings.MEDIA_URL+fn,
  }

  notify_by_email(to, subject, message_content, template, settings.MEDIA_ROOT+fn)
Example #4
0
def validate(r, val_hash):

    title = settings.TEMPLATE_CONTENT['reg']['validate']['title']
    template = settings.TEMPLATE_CONTENT['reg']['validate']['template']
    done_message = settings.TEMPLATE_CONTENT['reg']['validate']['done_message']
    error_message = settings.TEMPLATE_CONTENT['reg']['validate'][
        'error_message']
    email_template = settings.TEMPLATE_CONTENT['reg']['validate']['email'][
        'template']
    org_msg = settings.TEMPLATE_CONTENT['reg']['validate']['email']['org_msg']

    try:
        # if hash code match: it's a member to be validated
        R = Registration.objects.get(hash_code=val_hash)
        if R.validated == R.OK:
            return render(r, template, {
                'title': title,
                'error_message': message,
            })

        R.date_of_validation = timezone.now()
        R.validated = R.OK
        R.save()

        M = R.member
        M.status = Member.ACT
        M.save()

        message = done_message.format(name=gen_member_fullname(M),
                                      member_id=M.pk)

        #notify by email
        message_content = {
            'FULLNAME': gen_member_fullname(M),
            'MEMBER_ID': M.pk,
            'MEMBER_TYPE': Member.MEMBER_TYPES[int(M.type)][1],
            'USERNAME': M.head_of_list.username,
            'CMS_URL': 'https://' + settings.ALLOWED_HOSTS[0] + '/',
        }
        if M.type == Member.ORG:
            message_content['ORGANISATION'] = org_msg.format(
                orga=M.organisation)

        #send email
        ok = notify_by_email('board', M.head_of_list.email, title,
                             message_content, email_template)

        return render(r, template, {
            'title': title,
            'message': message,
        })

    except:
        # else: error
        return render(r, template, {
            'title': title,
            'error_message': error_message,
        })
Example #5
0
def submit_idea(r):
  r.breadcrumbs( (
                   ('ideabox','/ideabox/'),
               ) )


  template 	= settings.TEMPLATE_CONTENT['ideabox']['template']
  title 	= settings.TEMPLATE_CONTENT['ideabox']['title']
  desc		= settings.TEMPLATE_CONTENT['ideabox']['desc'].format(first_name=r.user.first_name,last_name=r.user.last_name,username=r.user.username)
  submit	= settings.TEMPLATE_CONTENT['ideabox']['submit']

  subject 	= settings.TEMPLATE_CONTENT['ideabox']['email']['subject']
  to 		= settings.EMAILS['email']['board']

  done_template = settings.TEMPLATE_CONTENT['ideabox']['done']['template']
  done_title 	= settings.TEMPLATE_CONTENT['ideabox']['done']['title']

  if r.POST:
    idf = IdeaForm(r.POST, r.FILES)
    if idf.is_valid():
      idea 	= idf.cleaned_data['content']
      attach 	= idf.cleaned_data['file']

      # build mail
      message = gen_ideabox_message(r.user,idea)
      message_content = {
          'FULLNAME'    : 'BOARD',
          'MESSAGE'     : message,
      }
      # send idea to board
      ok=notify_by_email(to,subject,message_content,False,attach)
      if not ok:
        return render(r, error_template, { 
				'mode'		: 'Error in email confirmation', 
				'message'	: settings.TEMPLATE_CONTENT['error']['email'],
		     })

      #all fine -> show thank you message
      return render(r,done_template, {
			'title'		: done_title,
		   })

    else: #from not valid -> error
      return render(r,done_template, {
			'title'		: title,
                	'error_message'	: settings.TEMPLATE_CONTENT['error']['gen'] + ' ' + gen_form_errors(idf),
		   })
  else:
    #no POST data yet -> show form
    form = IdeaForm()

    return render(r,template, {
			'title'	: title,
  			'desc'	: desc,
  			'submit': submit,
			'form'	: form,
		   })
Example #6
0
def password(r):
  if r.POST:
    pwd = PasswordChangeForm(r.user,r.POST)
    if pwd.is_valid(): 
      pwd.save()
      message_content = {
        'FULLNAME': r.user.first_name + ' ' + unicode.upper(r.user.last_name),
        'LOGIN': r.user.username,
      }
      subject=settings.MAIL_CONFIRMATION['password']['subject']  % r.user.username
      notify_by_email(r.user.email, subject, message_content, settings.MAIL_CONFIRMATION['password']['template'])

      return render(r,'done.html', {'mode': 'changing your password', 'message': render_to_string(msettings.MAIL_CONFIRMATION['password']['template'], message_content)})
    else:
      return render(r,'pwd.html', {'pwd_form': PasswordChangeForm(r.user), 'login': r.user.username, 'error_message': settings.TEMPLATE_CONTENT['error']['pwd']})
  else:
    #no POST data yet -> show user creation form
    return render(r,'pwd.html', {'pwd_form': PasswordChangeForm(r.user), 'login': r.user.username })
Example #7
0
def send_invitation(event, m, invitation):
    e_template = settings.TEMPLATE_CONTENT['events']['send']['done']['email'][
        'template']

    #invitation email with registration link
    subject = settings.TEMPLATE_CONTENT['events']['send']['done']['email'][
        'subject'] % {
            'title': str(event.title)
        }
    message_content = {
        'FULLNAME': gen_member_fullname(m),
        'MESSAGE': str(invitation.message),
    }

    #send email
    try:
        return notify_by_email(
            None, m.email, subject, message_content, False,
            settings.MEDIA_ROOT + str(invitation.attachement))
    except:
        return notify_by_email(None, m.email, subject, message_content)
Example #8
0
def generate_credit_note(m):
  from members.models import Member

  CRED = settings.ACCOUNTING['credit']

  if m.type == Member.ORG:
    amount = settings.FEE[m.lvl]
  else:
    amount = settings.FEE[m.type]

  credit_details = {
    'ID': credit_id(m),
    'FULLNAME': gen_fullname(m.head_of_list),
    'DATE': date.today().strftime('%Y-%m-%d'),
    'AMOUNT': amount,
    'CURRENCY': CRED['currency'],
  } 

  # generate pdf credit note
  from StringIO import StringIO
  pdf = StringIO()
  pdf_credit(pdf, m, credit_details)
  pdf.seek(0)

  fn=credit_details['ID'] + '.pdf'
 
  # create attachement
  from email.mime.application import MIMEApplication
  attachment = MIMEApplication(pdf.read())
  attachment.add_header("Content-Disposition", "attachment",filename=fn)

  pdf.close()

  # send email
  from cms.functions import notify_by_email
  subject = CRED['subject'] % m.id
  notify_by_email(m.head_of_list.email,subject,credit_details,CRED['mail_template'],attachment)
Example #9
0
def attendance(r, meeting_num, attendance_hash):
    meeting = Meeting.objects.get(num=meeting_num)

    title = settings.TEMPLATE_CONTENT['meetings']['attendance']['title'] % {
        'meeting': meeting.title,
    }
    message = ''
    notify = False

    for m in get_active_members():
        if gen_hash(meeting, m.email) == attendance_hash:
            # it's a YES
            meeting.attendance.add(m)
            message = settings.TEMPLATE_CONTENT['meetings']['attendance'][
                'yes'] % {
                    'name': gen_fullname(m),
                }
            notify = True

        if gen_hash(meeting, m.email, False) == attendance_hash:
            # it's a NO
            meeting.excused.add(m)
            message = settings.TEMPLATE_CONTENT['meetings']['attendance'][
                'no'] % {
                    'name': gen_fullname(m),
                }
            notify = True

    if notify:
        #notify by email
        message_content = {
            'MESSAGE': message,
        }
        #send email
        ok = notify_by_email(False, m.email, title, message_content)

    meeting.save()

    return render(
        r, settings.TEMPLATE_CONTENT['meetings']['attendance']['template'], {
            'title': title,
            'message': message,
        })
Example #10
0
def report(r, meeting_num):

  Mt = Meeting.objects.get(num=meeting_num)

  if r.POST:
    e_template =  settings.TEMPLATE_CONTENT['meetings']['report']['done']['email']['template']

    mrf = MeetingReportForm(r.POST, r.FILES)
    if mrf.is_valid():
      Mt.report = mrf.cleaned_data['report']
      Mt.save()

      send = mrf.cleaned_data['send']
      if send:
        email_error = { 'ok': True, 'who': [], }
        for m in get_active_members():
   
          #notifiation per email for new report
          subject = settings.TEMPLATE_CONTENT['meetings']['report']['done']['email']['subject'] % { 'title': str(Mt.title) }
          message_content = {
            'FULLNAME'    : gen_member_fullname(m),
            'MESSAGE'     : gen_report_message(e_template,Mt,m),
          }
          attachement = settings.MEDIA_ROOT + str(Mt.report)
          #send email
          ok=notify_by_email(settings.EMAILS['sender']['default'],m.email,subject,message_content,False,attachement)
          if not ok: 
            email_error['ok']=False
            email_error['who'].append(m.email)

        # error in email -> show error messages
        if not email_error['ok']:
          return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['report']['done']['template'], {
                'title': settings.TEMPLATE_CONTENT['meetings']['report']['done']['title'], 
                'error_message': settings.TEMPLATE_CONTENT['error']['email'] + ' ; '.join([e for e in email_error['who']]),
                })
        else:
          # done -> with sending
          return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['report']['done']['template'], {
				'title': settings.TEMPLATE_CONTENT['meetings']['report']['done']['title_send'], 
                		'message': settings.TEMPLATE_CONTENT['meetings']['report']['done']['message_send'] + ' ; '.join([gen_member_fullname(m) for m in get_active_members()]),
                })
      else:
        # done -> no sending
        return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['report']['done']['template'], {
			'title': settings.TEMPLATE_CONTENT['meetings']['report']['done']['title'], 
                	'message': settings.TEMPLATE_CONTENT['meetings']['report']['done']['message'],
                })

    # form not valid -> error
    else:
      return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['report']['done']['template'], {
                'title': settings.TEMPLATE_CONTENT['meetings']['report']['done']['title'], 
                'error_message': settings.TEMPLATE_CONTENT['error']['gen'] + ' ; '.join([e for e in mrf.errors]),
                })
  # no post yet -> empty form
  else:
    form = MeetingReportForm(initial={ 'num': Mt.num, 'title': Mt.title, 'when': visualiseDateTime(Mt.when), })
    title = settings.TEMPLATE_CONTENT['meetings']['report']['title'].format(str(Mt.num))
    return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['report']['template'], {
                'title': title,
                'desc': settings.TEMPLATE_CONTENT['meetings']['report']['desc'],
                'submit': settings.TEMPLATE_CONTENT['meetings']['report']['submit'],
                'form': form,
                })
Example #11
0
def invite(r, meeting_num, member_id):

  Mt = M = None
  if meeting_num:
    Mt = Meeting.objects.get(pk=meeting_num)
    if member_id:
      M = Member.objects.get(pk=member_id)
  else:
    return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['invite']['done']['template'], {
                'title': settings.TEMPLATE_CONTENT['meetings']['invite']['done']['title'], 
                'error_message': settings.TEMPLATE_CONTENT['error']['gen'],
                })

  if r.POST:
    e_template =  settings.TEMPLATE_CONTENT['meetings']['invite']['done']['email']['template']

    ifs = InviteeFormSet(r.POST)
    if ifs.is_valid():
      invitees = []

      I = Invitation.objects.get(meeting=Mt)
      invitation_message = gen_invitee_message(e_template,Mt,M)
      try: invitation_message += I.additional_message
      except: pass
      email_error = { 'ok': True, 'who': [], }
      for i in ifs:
        Iv = i.save(commit=False)
        Iv.meeting = Mt
        Iv.member = M
        if Iv.email:
          Iv.save()
      
          #invitation email for invitee(s)
          subject = settings.TEMPLATE_CONTENT['meetings']['invite']['done']['email']['subject'] % { 'title': str(Mt.title) }
          message_content = {
            'FULLNAME'    : gen_member_fullname(Iv),
            'MESSAGE'     : invitation_message,
          }
          #send email
#no need to add attachement for invitees
#          try:
#            ok=notify_by_email(settings.EMAILS['sender']['default'],Iv.email,subject,message_content,False,settings.MEDIA_ROOT + str(I.attachement))
#          except:
          ok=notify_by_email(settings.EMAILS['sender']['default'],Iv.email,subject,message_content)
          if not ok:
            email_error['ok']=False
            email_error['who'].append(Iv.email)

          # all fine -> save Invitee
          invitees.append(Iv)

      # error in email -> show error messages
      if not email_error['ok']:
        return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['invite']['done']['template'], {
              'title': settings.TEMPLATE_CONTENT['meetings']['invite']['done']['title'], 
              'error_message': settings.TEMPLATE_CONTENT['error']['email'] + ' ; '.join([e for e in email_error['who']]),
              })

      # all fine -> done
      I.sent = timezone.now()
      I.save()
      return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['invite']['done']['template'], {
                'title': settings.TEMPLATE_CONTENT['meetings']['invite']['done']['title'], 
                'message': settings.TEMPLATE_CONTENT['meetings']['invite']['done']['message'] % { 'email': invitation_message, 'attachement': I.attachement, 'list': ' ; '.join([gen_member_fullname(i) for i in invitees]), },
                })

    # form not valid -> error
    else:
      return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['invite']['done']['template'], {
                'error_message': settings.TEMPLATE_CONTENT['error']['gen'] + ' ; '.join([str(e) for e in ifs.errors]),
                })
  # no post yet -> empty form
  else:
    return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['invite']['template'], {
                'title': settings.TEMPLATE_CONTENT['meetings']['invite']['title'] + str(Mt),
                'desc': settings.TEMPLATE_CONTENT['meetings']['invite']['desc'],
                'submit': settings.TEMPLATE_CONTENT['meetings']['invite']['submit'],
                'form': InviteeFormSet(),
                })
Example #12
0
def send(r, meeting_num):

  e_template =  settings.TEMPLATE_CONTENT['meetings']['send']['done']['email']['template']

  Mt = Meeting.objects.get(num=meeting_num)
  I = None
  try:
    I = Invitation.objects.get(meeting=Mt)
  except Invitation.DoesNotExist:
    I = Invitation(meeting=Mt)
    I.save()

  title = settings.TEMPLATE_CONTENT['meetings']['send']['done']['title'] % str(Mt.title)
      
  email_error = { 'ok': True, 'who': [], }
  missing_members = get_meeting_missing_active_members(Mt)
  if not missing_members:
    return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['send']['done']['template'], {
	                'title': title, 
        	        'message': settings.TEMPLATE_CONTENT['meetings']['send']['done']['none_missing'],
                })

  for m in missing_members:
    #invitation email with "YES/NO button"
    subject = settings.TEMPLATE_CONTENT['meetings']['send']['done']['email']['subject'] % { 'title': str(Mt.title) }
    invitation_message = gen_invitation_message(e_template,Mt,Event.MEET,m)
    message_content = {
        'FULLNAME'    : gen_member_fullname(m),
        'MESSAGE'     : invitation_message + str(I.message),
    }

    #generate ical invite TODO: fix since py3 migration
    #invite = genIcal(Mt)

    #send email
    try: #with attachement
#      ok=notify_by_email(settings.EMAILS['sender']['default'],m.email,subject,message_content,False,[invite,settings.MEDIA_ROOT + str(I.attachement)])
      ok=notify_by_email(settings.EMAILS['sender']['default'],m.email,subject,message_content,False,settings.MEDIA_ROOT + str(I.attachement))
    except: #no attachement
#      ok=notify_by_email(settings.EMAILS['sender']['default'],m.email,subject,message_content,False,invite)
      ok=notify_by_email(settings.EMAILS['sender']['default'],m.email,subject,message_content)
     
    if not ok: 
      email_error['ok']=False
      email_error['who'].append(m.email)

  # error in email -> show error messages
  if not email_error['ok']:
    return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['send']['done']['template'], {
                	'title': title, 
       	        	'error_message': settings.TEMPLATE_CONTENT['error']['email'] + ' ; '.join([e for e in email_error['who']]),
                  })

  # all fine -> done
  else:
    I.sent = timezone.now()
    I.save()
    return TemplateResponse(r, settings.TEMPLATE_CONTENT['meetings']['send']['done']['template'], {
	                'title': title, 
        	        'message': settings.TEMPLATE_CONTENT['meetings']['send']['done']['message'] + ' ; '.join([gen_member_fullname(m) for m in missing_members]),
                  })
Example #13
0
def renew(r):
  r.breadcrumbs( ( 
			('home','/'),
                   	('members','/members/'),
                   	('annual renewal','/members/renew/'),
               ) )

  year = date.today().strftime('%Y')

  template 		= settings.TEMPLATE_CONTENT['members']['renew']['template']
  title 		= settings.TEMPLATE_CONTENT['members']['renew']['title'].format(year=year)
  email_template 	= settings.TEMPLATE_CONTENT['members']['renew']['email']['template']
  email_title 		= settings.TEMPLATE_CONTENT['members']['renew']['email']['title'].format(year=year)

  m_list = '<ul>'

  #loop throu all active members and send membership renewal request
  for m in get_active_members():
    try:
      f = Fee.objects.get(member=m,year=year)
    except:
      # if member didn't get an invoice yet for this year
#TODO:
# renewal link only for students to renew student_proof
# for all others send invoice directly, cf members.profile.renew()
#
      salt2=float(year)
      renew_hash_code = gen_hash(settings.RENEW_SALT,unicode(m.head_of_list.email)+unicode(m.address).encode('ascii', 'ignore'),15,salt2)
      # build request mail
      message_content = {
        'FULLNAME'	: gen_member_fullname(m),
        'YEAR'		: year,
	'LINK'		: gen_renewal_link(renew_hash_code),
      }

      debug('members.renew','renewing member: '+unicode(m))

      # send confirmation
      ok=notify_by_email(m.head_of_list.email,email_title,message_content,email_template,copy=True)
      if not ok:
        return render(r, template, { 
				'mode': 'Error in email request', 
				'message': settings.TEMPLATE_CONTENT['error']['email'],
		   })

      try:
        renew = Renew.objects.get(member=m,year=year)
        renew.ok = False
        renew.save()
      except Renew.DoesNotExist:
        renew = Renew(member=m,year=year,renew_code=renew_hash_code)
        renew.save()

      m_list += '<li>'+gen_member_fullname(m)+'</li>'
   
  m_list += '</ul>'
  # all fine
  return render(r, template, { 
			'title'		: title,
        		'message'	: m_list,
	       })
Example #14
0
    def done(self, fl, form_dict, **kwargs):
        self.request.breadcrumbs((('registration', '/reg/'), ))

        done_title = settings.TEMPLATE_CONTENT['reg']['register']['done'][
            'title']
        done_template = settings.TEMPLATE_CONTENT['reg']['register']['done'][
            'template']
        error_template = settings.TEMPLATE_CONTENT['reg']['register']['done'][
            'error_template']
        email_template = settings.TEMPLATE_CONTENT['reg']['register']['done'][
            'email_template']

        m_id = gen_member_id()

        M = O = A = U = D = Gs = None

        t_f = form_dict['type']
        ty = int(t_f.cleaned_data['member_type'])
        a_f = form_dict['address']
        h_f = form_dict['head']
        if a_f.is_valid() and h_f.is_valid():
            A = a_f.save()
            U = h_f.save()
            #organisation
            if ty == Member.ORG:
                o = a_f.cleaned_data['organisation']
                O = Organisation(name=o, address=A)

                # add head-of-list permissions
                is_hol_d = Permission.objects.get(codename='MEMBER')
                U.user_permissions.add(is_hol_d)

                # delegate
                delegate = h_f.cleaned_data['delegate']
                if delegate:
                    d_f = form_dict['delegate']
                    if d_f.is_valid():
                        D = d_f.save()

            #student
            if ty == Member.STD:
                sp_f = form_dict['student_proof']
                if sp_f.is_valid():
                    M = sp_f.save(commit=False)
                    M.pk = m_id
                    M.type = ty

            if M == None: M = Member(pk=m_id, type=ty)

            # add address, orga and head_of_list to Member model
            if ty == Member.ORG: M.organisation = O
            M.address = A
            M.head_of_list = U
            M.save()
            if D != None: M.users.add(D)

            g_f = form_dict['group']
            if g_f.is_valid():
                Gs = g_f.cleaned_data['groups']
                add_to_groups(U, Gs)

            reg_hash_code = gen_hash(settings.REG_SALT, M.head_of_list.email,
                                     15, M.address)
            # create registration entry for out-of-bound validation
            R = Registration(member=M,
                             hash_code=reg_hash_code,
                             date_of_registration=timezone.now())
            R.save()

            # build confirmation mail
            message_content = {
                'FULLNAME': gen_member_fullname(M),
                'MEMBER_TYPE': Member.MEMBER_TYPES[int(M.type)][1],
                'LINK': gen_confirmation_link(reg_hash_code),
            }
            # send confirmation
            ok = notify_by_email(False, M.head_of_list.email, done_title,
                                 message_content, email_template)
            if not ok:
                return render(
                    self.request, error_template, {
                        'mode': 'Error in email confirmation',
                        'message': settings.TEMPLATE_CONTENT['error']['email'],
                    })

            # generate invoice (this will send the invoice email implicitly)
#      generate_invoice(M)

            head = False
            if int(M.type) == int(Member.ORG): head = True

            # done, redirect to thank you page
            return render(
                self.request, done_template, {
                    'title': done_title,
                    'name': gen_member_fullname(M),
                    'type': Member.MEMBER_TYPES[int(M.type)][1],
                    'head': head,
                })
Example #15
0
def add(r):
    r.breadcrumbs((
        ('home', '/'),
        ('meetings', '/meetings/'),
        ('add a meeting', '/meetings/add/'),
    ))

    if r.POST:
        e_template = settings.TEMPLATE_CONTENT['meetings']['add']['done'][
            'email']['template']

        mf = MeetingForm(r.POST)
        if mf.is_valid():
            Mt = mf.save(commit=False)
            Mt.save()

            email_error = {
                'ok': True,
                'who': (),
            }
            for m in get_active_members():

                #invitation email with "YES/NO button"
                #        subject = settings.TEMPLATE_CONTENT['meetings']['add']['done']['email']['subject'].format(title=unicode(Mt.title)))
                subject = settings.TEMPLATE_CONTENT['meetings']['add']['done'][
                    'email']['subject'] % {
                        'title': unicode(Mt.title)
                    }
                invitation_message = gen_invitation_message(e_template, Mt, m)
                message_content = {
                    'FULLNAME':
                    gen_fullname(m),
                    'MESSAGE':
                    invitation_message + mf.cleaned_data['additional_message'],
                }
                #send email
                ok = notify_by_email(r.user.email, m.email, subject,
                                     message_content)
                if not ok:
                    email_error['ok'] = False
                    email_error['who'].add(m.email)

            # error in email -> show error messages
            if not email_error['ok']:
                return render(
                    r, settings.TEMPLATE_CONTENT['meetings']['add']['done']
                    ['template'], {
                        'title':
                        settings.TEMPLATE_CONTENT['meetings']['add']['done']
                        ['title'],
                        'error_message':
                        settings.TEMPLATE_CONTENT['error']['email'] +
                        ' ; '.join([e for e in email_error['who']]),
                    })

            # all fine -> done
            else:
                return render(
                    r, settings.TEMPLATE_CONTENT['meetings']['add']['done']
                    ['template'], {
                        'title':
                        settings.TEMPLATE_CONTENT['meetings']['add']['done']
                        ['title'],
                        'message':
                        settings.TEMPLATE_CONTENT['meetings']['add']['done']
                        ['message'] + ' ; '.join(
                            [gen_fullname(m) for m in get_active_members()]),
                    })

        # form not valid -> error
        else:
            return render(
                r, settings.TEMPLATE_CONTENT['meetings']['add']['done']
                ['template'], {
                    'title':
                    settings.TEMPLATE_CONTENT['meetings']['add']['done']
                    ['title'],
                    'error_message':
                    settings.TEMPLATE_CONTENT['error']['gen'] +
                    ' ; '.join([e for e in mf.errors]),
                })
    # no post yet -> empty form
    else:
        form = MeetingForm()
        try:
            latest = Meeting.objects.values().latest('num')
            next_num = latest['num'] + 1
            form = MeetingForm(initial={
                'title': str(next_num) + '. réunion statutaire',
                'num': next_num,
            })
        except Meeting.DoesNotExist:
            pass
        return render(
            r, settings.TEMPLATE_CONTENT['meetings']['add']['template'], {
                'title': settings.TEMPLATE_CONTENT['meetings']['add']['title'],
                'desc': settings.TEMPLATE_CONTENT['meetings']['add']['desc'],
                'submit':
                settings.TEMPLATE_CONTENT['meetings']['add']['submit'],
                'form': form,
            })
Example #16
0
def attendance(r, event_type, event_id, attendance_hash):
    E = M = title = deadline = e_yes = e_no = message = member = actions = None

    if event_type == 'meetings':
        M = Meeting.objects.get(num=event_id)
        deadline = M.deadline
        title = settings.TEMPLATE_CONTENT['attendance']['meeting']['title'] % {
            'meeting': M.title,
        }
        e_yes = settings.TEMPLATE_CONTENT['attendance']['meeting']['email'][
            'yes'] % {
                'meeting': M.title,
            }
        e_no = settings.TEMPLATE_CONTENT['attendance']['meeting']['email'][
            'no'] % {
                'meeting': M.title,
            }
    if event_type == 'events':
        E = Event.objects.get(pk=event_id)
        deadline = E.deadline
        title = settings.TEMPLATE_CONTENT['attendance']['event']['title'] % {
            'event': E.title,
        }
        e_yes = settings.TEMPLATE_CONTENT['attendance']['event']['email'][
            'yes'] % {
                'event': E.title,
            }
        e_no = settings.TEMPLATE_CONTENT['attendance']['event']['email'][
            'no'] % {
                'event': E.title,
            }

    if timezone.now() >= deadline:
        message = settings.TEMPLATE_CONTENT['attendance']['too_late']
    else:
        for m in get_active_members():
            notify = False
            e_message = None
            A = None
            if event_type == 'meetings':
                try:
                    A = Meeting_Attendance.objects.get(meeting=M, member=m)
                except:
                    A = Meeting_Attendance(meeting=M, member=m)

                mTm = MtoM.objects.get(meeting=M, member=m)
                if attendance_hash == mTm.yes_hash:
                    # it's a YES
                    A.present = True
                    A.timestamp = datetime.now()
                    A.save()
                    notify = True
                    member = m
                    message = settings.TEMPLATE_CONTENT['attendance']['yes'] % {
                        'name': gen_member_fullname(m),
                    }
                    #add meeting information to the confirmation message
                    message += settings.TEMPLATE_CONTENT['attendance'][
                        'details'] % {
                            'when': M.when,
                            'time': M.time,
                            'location': M.location,
                            'address': M.location.address,
                        }
                    e_message = e_yes
                    if M.type == Meeting.C:
                        actions = settings.TEMPLATE_CONTENT['attendance'][
                            'actions']
                        #set meeting:num and member_id for invitee link
                        if actions:
                            for a in actions:
                                a['url'] = a['url'].format(
                                    str(M.num), str(member.id))

                if attendance_hash == mTm.no_hash:
                    # it's a NO
                    A.present = False
                    A.timestamp = datetime.now()
                    A.save()
                    notify = True
                    message = settings.TEMPLATE_CONTENT['attendance']['no'] % {
                        'name': gen_member_fullname(m),
                    }
                    e_message = e_no

            elif event_type == 'events':
                try:
                    A = Event_Attendance.objects.get(event=E, member=m)
                except:
                    A = Event_Attendance(event=E, member=m)

                eTm = EtoM.objects.get(event=E, member=m)
                if attendance_hash == eTm.yes_hash:
                    # it's a YES
                    A.present = True
                    A.timestamp = datetime.now()
                    A.save()
                    notify = True
                    member = m
                    message = settings.TEMPLATE_CONTENT['attendance']['yes'] % {
                        'name': gen_member_fullname(m),
                    }
                    #add meeting information to the confirmation message
                    message += settings.TEMPLATE_CONTENT['attendance'][
                        'details'] % {
                            'when': E.when,
                            'time': E.time,
                            'location': E.location,
                            'address': E.location.address,
                        }
                    actions = settings.TEMPLATE_CONTENT['attendance'][
                        'actions']
                    e_message = e_yes

                if attendance_hash == eTm.no_hash:
                    # it's a NO
                    A.present = False
                    A.timestamp = datetime.now()
                    A.save()
                    notify = True
                    message = settings.TEMPLATE_CONTENT['attendance']['no'] % {
                        'name': gen_member_fullname(m),
                    }
                    e_message = e_no

            if notify:
                #notify by email
                message_content = {
                    'FULLNAME': gen_member_fullname(m),
                    'MESSAGE': e_message,
                }
                #send email
                ok = notify_by_email(False, m.email, title, message_content)

    return TemplateResponse(
        r, settings.TEMPLATE_CONTENT['attendance']['template'], {
            'title': title,
            'actions': actions,
            'message': message,
        })

    if event_type == 'events':
        return TemplateResponse(
            r, settings.TEMPLATE_CONTENT['attendance']['template'], {
                'title': title,
                'message': message,
            })
Example #17
0
def attendance(r, event_type, event_id, attendance_hash):
  E = M = title = deadline = e_yes = e_no = message = member = actions = None

  if event_type == 'meetings':
    M = Meeting.objects.get(num=event_id)
    deadline = M.deadline
    title = settings.TEMPLATE_CONTENT['attendance']['meeting']['title'] % { 'meeting': M.title, }
    e_yes = settings.TEMPLATE_CONTENT['attendance']['meeting']['email']['yes'] % { 'meeting': M.title, }
    e_no = settings.TEMPLATE_CONTENT['attendance']['meeting']['email']['no'] % { 'meeting': M.title, }
  if event_type == 'events':
    E = Event.objects.get(pk=event_id)
    deadline = E.deadline
    title = settings.TEMPLATE_CONTENT['attendance']['event']['title'] % { 'event': E.title, }
    e_yes = settings.TEMPLATE_CONTENT['attendance']['event']['email']['yes'] % { 'event': E.title, }
    e_no = settings.TEMPLATE_CONTENT['attendance']['event']['email']['no'] % { 'event': E.title, }

  if timezone.now() >= deadline:
    message = settings.TEMPLATE_CONTENT['attendance']['too_late']
  else:
    for m in get_active_members():
      notify = False
      e_message = None
      A = None
      if event_type == 'meetings':
        try:
          A = Meeting_Attendance.objects.get(meeting=M,member=m)
        except:
          A = Meeting_Attendance(meeting=M,member=m)

        mTm = MtoM.objects.get(meeting=M,member=m)
        if attendance_hash == mTm.yes_hash:
          # it's a YES
          A.present = True
          A.timestamp = datetime.now()
          A.save()
          notify=True
          member=m
          message = settings.TEMPLATE_CONTENT['attendance']['yes'] % { 'name': gen_member_fullname(m), }
          #add meeting information to the confirmation message
          message += settings.TEMPLATE_CONTENT['attendance']['details'] % { 'when': M.when, 'time': M.time, 'location': M.location, 'address': M.location.address, }
          e_message = e_yes
          if M.type == Meeting.C:
            actions = settings.TEMPLATE_CONTENT['attendance']['actions']
            #set meeting:num and member_id for invitee link
            if actions:
              for a in actions:
                a['url'] = a['url'].format(str(M.num),str(member.id))
  
        if attendance_hash == mTm.no_hash:
          # it's a NO
          A.present = False
          A.timestamp = datetime.now()
          A.save()
          notify=True
          message = settings.TEMPLATE_CONTENT['attendance']['no'] % { 'name': gen_member_fullname(m), }
          e_message = e_no


      elif event_type == 'events':
        try:
          A = Event_Attendance.objects.get(event=E,member=m)
        except:
          A = Event_Attendance(event=E,member=m)

        eTm = EtoM.objects.get(event=E,member=m)
        if attendance_hash == eTm.yes_hash:
          # it's a YES
          A.present = True
          A.timestamp = datetime.now()
          A.save()
          notify=True
          member=m
          message = settings.TEMPLATE_CONTENT['attendance']['yes'] % { 'name': gen_member_fullname(m), }
          #add meeting information to the confirmation message
          message += settings.TEMPLATE_CONTENT['attendance']['details'] % { 'when': E.when, 'time': E.time, 'location': E.location, 'address': E.location.address, }
          actions = settings.TEMPLATE_CONTENT['attendance']['actions']
          e_message = e_yes
  
        if attendance_hash == eTm.no_hash:
          # it's a NO
          A.present = False
          A.timestamp = datetime.now()
          A.save()
          notify=True
          message = settings.TEMPLATE_CONTENT['attendance']['no'] % { 'name': gen_member_fullname(m), }
          e_message = e_no

  
      if notify:
        #notify by email
        message_content = {
          'FULLNAME'	: gen_member_fullname(m),
          'MESSAGE'     : e_message,
        }
        #send email
        ok=notify_by_email(False,m.email,title,message_content)


  return TemplateResponse(r, settings.TEMPLATE_CONTENT['attendance']['template'], {
                   'title': title,
                   'actions' : actions,
                   'message': message,
               })

  if event_type == 'events':
    return TemplateResponse(r, settings.TEMPLATE_CONTENT['attendance']['template'], {
                   'title': title,
                   'message': message,
               })
Example #18
0
def send(r, meeting_num):

    e_template = settings.TEMPLATE_CONTENT['meetings']['send']['done'][
        'email']['template']

    Mt = Meeting.objects.get(num=meeting_num)
    I = None
    try:
        I = Invitation.objects.get(meeting=Mt)
    except Invitation.DoesNotExist:
        I = Invitation(meeting=Mt)
        I.save()

    title = settings.TEMPLATE_CONTENT['meetings']['send']['done'][
        'title'] % str(Mt.title)

    email_error = {
        'ok': True,
        'who': [],
    }
    missing_members = get_meeting_missing_active_members(Mt)
    if not missing_members:
        return TemplateResponse(
            r,
            settings.TEMPLATE_CONTENT['meetings']['send']['done']['template'],
            {
                'title':
                title,
                'message':
                settings.TEMPLATE_CONTENT['meetings']['send']['done']
                ['none_missing'],
            })

    for m in missing_members:
        #invitation email with "YES/NO button"
        subject = settings.TEMPLATE_CONTENT['meetings']['send']['done'][
            'email']['subject'] % {
                'title': str(Mt.title)
            }
        invitation_message = gen_invitation_message(e_template, Mt, Event.MEET,
                                                    m)
        message_content = {
            'FULLNAME': gen_member_fullname(m),
            'MESSAGE': invitation_message + str(I.message),
        }

        #generate ical invite TODO: fix since py3 migration
        #invite = genIcal(Mt)

        #send email
        try:  #with attachement
            #      ok=notify_by_email(settings.EMAILS['sender']['default'],m.email,subject,message_content,False,[invite,settings.MEDIA_ROOT + str(I.attachement)])
            ok = notify_by_email(settings.EMAILS['sender']['default'], m.email,
                                 subject, message_content, False,
                                 settings.MEDIA_ROOT + str(I.attachement))
        except:  #no attachement
            #      ok=notify_by_email(settings.EMAILS['sender']['default'],m.email,subject,message_content,False,invite)
            ok = notify_by_email(settings.EMAILS['sender']['default'], m.email,
                                 subject, message_content)

        if not ok:
            email_error['ok'] = False
            email_error['who'].append(m.email)

    # error in email -> show error messages
    if not email_error['ok']:
        return TemplateResponse(
            r,
            settings.TEMPLATE_CONTENT['meetings']['send']['done']['template'],
            {
                'title':
                title,
                'error_message':
                settings.TEMPLATE_CONTENT['error']['email'] +
                ' ; '.join([e for e in email_error['who']]),
            })

    # all fine -> done
    else:
        I.sent = timezone.now()
        I.save()
        return TemplateResponse(
            r,
            settings.TEMPLATE_CONTENT['meetings']['send']['done']['template'],
            {
                'title':
                title,
                'message':
                settings.TEMPLATE_CONTENT['meetings']['send']['done']
                ['message'] +
                ' ; '.join([gen_member_fullname(m) for m in missing_members]),
            })
Example #19
0
def invite(r, meeting_num, member_id):

    Mt = M = None
    if meeting_num:
        Mt = Meeting.objects.get(pk=meeting_num)
        if member_id:
            M = Member.objects.get(pk=member_id)
    else:
        return TemplateResponse(
            r, settings.TEMPLATE_CONTENT['meetings']['invite']['done']
            ['template'], {
                'title':
                settings.TEMPLATE_CONTENT['meetings']['invite']['done']
                ['title'],
                'error_message':
                settings.TEMPLATE_CONTENT['error']['gen'],
            })

    if r.POST:
        e_template = settings.TEMPLATE_CONTENT['meetings']['invite']['done'][
            'email']['template']

        ifs = InviteeFormSet(r.POST)
        if ifs.is_valid():
            invitees = []

            I = Invitation.objects.get(meeting=Mt)
            invitation_message = gen_invitee_message(e_template, Mt, M)
            try:
                invitation_message += I.additional_message
            except:
                pass
            email_error = {
                'ok': True,
                'who': [],
            }
            for i in ifs:
                Iv = i.save(commit=False)
                Iv.meeting = Mt
                Iv.member = M
                if Iv.email:
                    Iv.save()

                    #invitation email for invitee(s)
                    subject = settings.TEMPLATE_CONTENT['meetings']['invite'][
                        'done']['email']['subject'] % {
                            'title': str(Mt.title)
                        }
                    message_content = {
                        'FULLNAME': gen_member_fullname(Iv),
                        'MESSAGE': invitation_message,
                    }
                    #send email
                    #no need to add attachement for invitees
                    #          try:
                    #            ok=notify_by_email(settings.EMAILS['sender']['default'],Iv.email,subject,message_content,False,settings.MEDIA_ROOT + str(I.attachement))
                    #          except:
                    ok = notify_by_email(settings.EMAILS['sender']['default'],
                                         Iv.email, subject, message_content)
                    if not ok:
                        email_error['ok'] = False
                        email_error['who'].append(Iv.email)

                    # all fine -> save Invitee
                    invitees.append(Iv)

            # error in email -> show error messages
            if not email_error['ok']:
                return TemplateResponse(
                    r, settings.TEMPLATE_CONTENT['meetings']['invite']['done']
                    ['template'], {
                        'title':
                        settings.TEMPLATE_CONTENT['meetings']['invite']['done']
                        ['title'],
                        'error_message':
                        settings.TEMPLATE_CONTENT['error']['email'] +
                        ' ; '.join([e for e in email_error['who']]),
                    })

            # all fine -> done
            I.sent = timezone.now()
            I.save()
            return TemplateResponse(
                r, settings.TEMPLATE_CONTENT['meetings']['invite']['done']
                ['template'], {
                    'title':
                    settings.TEMPLATE_CONTENT['meetings']['invite']['done']
                    ['title'],
                    'message':
                    settings.TEMPLATE_CONTENT['meetings']['invite']['done']
                    ['message'] % {
                        'email':
                        invitation_message,
                        'attachement':
                        I.attachement,
                        'list':
                        ' ; '.join([gen_member_fullname(i) for i in invitees]),
                    },
                })

        # form not valid -> error
        else:
            return TemplateResponse(
                r, settings.TEMPLATE_CONTENT['meetings']['invite']['done']
                ['template'], {
                    'error_message':
                    settings.TEMPLATE_CONTENT['error']['gen'] +
                    ' ; '.join([str(e) for e in ifs.errors]),
                })
    # no post yet -> empty form
    else:
        return TemplateResponse(
            r, settings.TEMPLATE_CONTENT['meetings']['invite']['template'], {
                'title':
                settings.TEMPLATE_CONTENT['meetings']['invite']['title'] +
                str(Mt),
                'desc':
                settings.TEMPLATE_CONTENT['meetings']['invite']['desc'],
                'submit':
                settings.TEMPLATE_CONTENT['meetings']['invite']['submit'],
                'form':
                InviteeFormSet(),
            })
Example #20
0
def register(r, event_hash):

  E = Event.objects.get(registration=event_hash)

  title 	= settings.TEMPLATE_CONTENT['events']['register']['title'].format(E.title)
  header 	= settings.TEMPLATE_CONTENT['events']['register']['header']
  submit 	= settings.TEMPLATE_CONTENT['events']['register']['submit']

  e_subject 	= settings.TEMPLATE_CONTENT['events']['register']['email']['subject']
  e_template 	= settings.TEMPLATE_CONTENT['events']['register']['email']['template']

  done_title 	= settings.TEMPLATE_CONTENT['events']['register']['done']['title'].format(E.title)

  if r.POST:
    rf = RegistrationForm(r.POST)
    if rf.is_valid():
      P = rf.save(commit=False)
      P.event = E
      P.regcode = gen_reg_code(E,P)
      try:
        P.save()
      except IntegrityError:
        #error duplicate registration
        return render(r, settings.TEMPLATE_CONTENT['events']['register']['done']['template'], {
			'title'		: title,
			'error_message'	: settings.TEMPLATE_CONTENT['error']['duplicate'],
		     })

      
      e_message = gen_registration_message(e_template,E,P)

      #notify by email
      message_content = {
        'FULLNAME'    : P.first_name + ' ' + P.last_name.upper(),
        'MESSAGE'     : e_message,
      }
      #send email
      ok=notify_by_email(P.email,e_subject,message_content,False)
      if not ok:
        #error in sending email
        return render(r, settings.TEMPLATE_CONTENT['events']['register']['done']['template'], {
			'title'		: title,
			'error_message'	: settings.TEMPLATE_CONTENT['error']['email'],
		     })

      #all fine done page
      done_message = gen_event_overview(settings.TEMPLATE_CONTENT['events']['register']['done']['overview'],E,P)
      return render(r, settings.TEMPLATE_CONTENT['events']['register']['done']['template'], {
			'title'		: done_title,
			'message'	: done_message,
		   })
    #error in form
    return render(r, settings.TEMPLATE_CONTENT['events']['register']['done']['template'], {
			'title'		: title,
                	'error_message'	: settings.TEMPLATE_CONTENT['error']['gen'] + ' ; '.join([e for e in rf.errors]),
		   })



  else: #empty form
    form = RegistrationForm()
    teaser_message = gen_event_overview(settings.TEMPLATE_CONTENT['events']['register']['teaser'],E)
    return render(r, settings.TEMPLATE_CONTENT['events']['register']['template'], {
			'title'		: title,
			'header'	: header,
			'form'		: form,
			'teaser'	: teaser_message,
			'submit'	: submit,
                })
Example #21
0
def register(r, event_hash):

    E = Event.objects.get(registration=event_hash)

    title = settings.TEMPLATE_CONTENT['events']['register']['title'].format(
        E.title)
    header = settings.TEMPLATE_CONTENT['events']['register']['header']
    submit = settings.TEMPLATE_CONTENT['events']['register']['submit']

    e_subject = settings.TEMPLATE_CONTENT['events']['register']['email'][
        'subject']
    e_template = settings.TEMPLATE_CONTENT['events']['register']['email'][
        'template']

    done_title = settings.TEMPLATE_CONTENT['events']['register']['done'][
        'title'].format(E.title)

    if r.POST:
        rf = RegistrationForm(r.POST)
        if rf.is_valid():
            P = rf.save(commit=False)
            P.event = E
            P.regcode = gen_reg_code(E, P)
            try:
                P.save()
            except IntegrityError:
                #error duplicate registration
                return TemplateResponse(
                    r, settings.TEMPLATE_CONTENT['events']['register']['done']
                    ['template'], {
                        'title':
                        title,
                        'error_message':
                        settings.TEMPLATE_CONTENT['error']['duplicate'],
                    })

            e_message = gen_registration_message(e_template, E, P)

            #notify by email
            message_content = {
                'FULLNAME': P.first_name + ' ' + P.last_name.upper(),
                'MESSAGE': e_message,
            }
            #send email
            ok = notify_by_email(False, P.email, e_subject, message_content)
            if not ok:
                #error in sending email
                return TemplateResponse(
                    r, settings.TEMPLATE_CONTENT['events']['register']['done']
                    ['template'], {
                        'title':
                        title,
                        'error_message':
                        settings.TEMPLATE_CONTENT['error']['email'],
                    })

            #all fine done page
            done_message = gen_event_overview(
                settings.TEMPLATE_CONTENT['events']['register']['done']
                ['overview'], E, P)
            return TemplateResponse(
                r, settings.TEMPLATE_CONTENT['events']['register']['done']
                ['template'], {
                    'title': done_title,
                    'message': done_message,
                })
        #error in form
        return TemplateResponse(
            r, settings.TEMPLATE_CONTENT['events']['register']['done']
            ['template'], {
                'title':
                title,
                'error_message':
                settings.TEMPLATE_CONTENT['error']['gen'] +
                ' ; '.join([e for e in rf.errors]),
            })

    else:  #empty form
        form = RegistrationForm()
        teaser_message = gen_event_overview(
            settings.TEMPLATE_CONTENT['events']['register']['teaser'], E)
        return TemplateResponse(
            r, settings.TEMPLATE_CONTENT['events']['register']['template'], {
                'title': title,
                'header': header,
                'form': form,
                'teaser': teaser_message,
                'submit': submit,
            })
Example #22
0
  def done(self, fl, form_dict, **kwargs):
    self.request.breadcrumbs( ( 
				('registration','/reg/'),
                            ) )

    done_title = settings.TEMPLATE_CONTENT['reg']['register']['done']['title']
    done_template = settings.TEMPLATE_CONTENT['reg']['register']['done']['template']
    error_template = settings.TEMPLATE_CONTENT['reg']['register']['done']['error_template']
    email_template = settings.TEMPLATE_CONTENT['reg']['register']['done']['email_template']

    m_id = gen_member_id()

    M = lvl = O = A = U = D = Gs = None
    Us = []

    ty = None
    if self.kwargs: 
      for item in Member.MEMBER_TYPES: 
        if unicode(item[1]) == unicode(self.kwargs['type']):
          ty = int(item[0])
    else: 
      t_f = form_dict['type']
      ty = int(t_f.cleaned_data['member_type'])

    a_f = form_dict['address']
    h_f = form_dict['head']
    if a_f.is_valid() and h_f.is_valid():
      A = a_f.save()
      U = h_f.save()
      #role for hol
      Ro = Role(title="Head of List",user=U)
      Ro.save()
      #organisation
      if ty == Member.ORG:
        var = a_f.cleaned_data
        o = a_f.cleaned_data['organisation']
        O = Organisation(name=o,address=A)
        O.save()
  
        #get nb of users
        lvl = int(h_f.cleaned_data['more'])+1 #add one for head-of-list

        # delegate
        delegate = h_f.cleaned_data['delegate']
        if delegate:
          d_f = form_dict['delegate']
          if d_f.is_valid():
            D = d_f.save()
            D.save()

            #role for delegate
            Ro = Role(title="Delegate",user=D)
            Ro.save()

        #all users for ORG type
        mu_fs = form_dict['more']
        if mu_fs.is_valid():
          for u in mu_fs:
            if u.is_valid() and u.has_changed(): 
              if u.cleaned_data['email']:
                user = u.save(commit=False)
                user.username = gen_username(user.first_name,user.last_name)
                user.is_active = False
                user.password = make_password(gen_random_password())
                user.save()
                Us.append(user)


      #student
      if ty == Member.STD:
        sp_f = form_dict['student_proof']
        if sp_f.is_valid():
          M = sp_f.save(commit=False)
          M.pk=m_id
          M.type=ty

      if M == None: M = Member(pk=m_id,type=ty)

      # if of type org, add organisation to Member model
      if ty == Member.ORG: M.organisation = O

      # add address and head_of_list to Member model
      M.address=A
      M.head_of_list=U

      #set the level (number of users) for ORG type
      if lvl: M.lvl=lvl

      # add delegate if exists
      if D != None: M.delegate=D

      # add member_type if in alt mode
      M.type = ty

      # save Member model
      M.save()
      # add all Users for ORG type
      if Us != []: M.users=Us

      reg_hash_code = gen_hash(settings.REG_SALT,M.head_of_list.email,15,M.address)
      # create registration entry for out-of-bound validation
      R = Registration(member=M,hash_code=reg_hash_code,date_of_registration=timezone.now())
      R.save()

      # build confirmation mail
      message_content = {
        'FULLNAME'	: gen_member_fullname(M),
        'MEMBER_TYPE'	: Member.MEMBER_TYPES[int(M.type)][1],
	'LINK'		: gen_confirmation_link(reg_hash_code),
      }
      # send confirmation
      ok=notify_by_email(M.head_of_list.email,done_title,message_content,email_template,None,settings.EMAILS['email']['secgen'])
      if not ok:
        return render(self.request, error_template, { 
				'mode': 'Error in email confirmation', 
				'message': settings.TEMPLATE_CONTENT['error']['email'],
		     })

      head = False
      if int(M.type) == int(Member.ORG): head = True
   
      # done, redirect to thank you page
      return render(self.request, done_template, { 
			'title'	: done_title,
        		'name'	: gen_member_fullname(M),
        		'type'	: Member.MEMBER_TYPES[int(M.type)][1],
		        'head' 	: head,
		   })
Example #23
0
def report(r, meeting_num):

    Mt = Meeting.objects.get(num=meeting_num)

    if r.POST:
        e_template = settings.TEMPLATE_CONTENT['meetings']['report']['done'][
            'email']['template']

        mrf = MeetingReportForm(r.POST, r.FILES)
        if mrf.is_valid():
            Mt.report = mrf.cleaned_data['report']
            Mt.save()

            send = mrf.cleaned_data['send']
            if send:
                email_error = {
                    'ok': True,
                    'who': [],
                }
                for m in get_active_members():

                    #notifiation per email for new report
                    subject = settings.TEMPLATE_CONTENT['meetings']['report'][
                        'done']['email']['subject'] % {
                            'title': str(Mt.title)
                        }
                    message_content = {
                        'FULLNAME': gen_member_fullname(m),
                        'MESSAGE': gen_report_message(e_template, Mt, m),
                    }
                    attachement = settings.MEDIA_ROOT + str(Mt.report)
                    #send email
                    ok = notify_by_email(settings.EMAILS['sender']['default'],
                                         m.email, subject, message_content,
                                         False, attachement)
                    if not ok:
                        email_error['ok'] = False
                        email_error['who'].append(m.email)

                # error in email -> show error messages
                if not email_error['ok']:
                    return TemplateResponse(
                        r, settings.TEMPLATE_CONTENT['meetings']['report']
                        ['done']['template'], {
                            'title':
                            settings.TEMPLATE_CONTENT['meetings']['report']
                            ['done']['title'],
                            'error_message':
                            settings.TEMPLATE_CONTENT['error']['email'] +
                            ' ; '.join([e for e in email_error['who']]),
                        })
                else:
                    # done -> with sending
                    return TemplateResponse(
                        r, settings.TEMPLATE_CONTENT['meetings']['report']
                        ['done']['template'], {
                            'title':
                            settings.TEMPLATE_CONTENT['meetings']['report']
                            ['done']['title_send'],
                            'message':
                            settings.TEMPLATE_CONTENT['meetings']['report']
                            ['done']['message_send'] + ' ; '.join([
                                gen_member_fullname(m)
                                for m in get_active_members()
                            ]),
                        })
            else:
                # done -> no sending
                return TemplateResponse(
                    r, settings.TEMPLATE_CONTENT['meetings']['report']['done']
                    ['template'], {
                        'title':
                        settings.TEMPLATE_CONTENT['meetings']['report']['done']
                        ['title'],
                        'message':
                        settings.TEMPLATE_CONTENT['meetings']['report']['done']
                        ['message'],
                    })

        # form not valid -> error
        else:
            return TemplateResponse(
                r, settings.TEMPLATE_CONTENT['meetings']['report']['done']
                ['template'], {
                    'title':
                    settings.TEMPLATE_CONTENT['meetings']['report']['done']
                    ['title'],
                    'error_message':
                    settings.TEMPLATE_CONTENT['error']['gen'] +
                    ' ; '.join([e for e in mrf.errors]),
                })
    # no post yet -> empty form
    else:
        form = MeetingReportForm(initial={
            'num': Mt.num,
            'title': Mt.title,
            'when': visualiseDateTime(Mt.when),
        })
        title = settings.TEMPLATE_CONTENT['meetings']['report'][
            'title'].format(str(Mt.num))
        return TemplateResponse(
            r, settings.TEMPLATE_CONTENT['meetings']['report']['template'], {
                'title': title,
                'desc':
                settings.TEMPLATE_CONTENT['meetings']['report']['desc'],
                'submit':
                settings.TEMPLATE_CONTENT['meetings']['report']['submit'],
                'form': form,
            })
Example #24
0
def validate(r, val_hash):

  title 		= settings.TEMPLATE_CONTENT['reg']['validate']['title']
  template		= settings.TEMPLATE_CONTENT['reg']['validate']['template']
  done_message		= settings.TEMPLATE_CONTENT['reg']['validate']['done_message']
  error_message		= settings.TEMPLATE_CONTENT['reg']['validate']['error_message']
  email_template	= settings.TEMPLATE_CONTENT['reg']['validate']['email']['template']
  org_msg		= settings.TEMPLATE_CONTENT['reg']['validate']['email']['org_msg']
  users_msg		= settings.TEMPLATE_CONTENT['reg']['validate']['email']['users_msg']

  M = R = None

  debug('reg','hash == ' + val_hash)

  try:
    # if hash code match: it's a member to be validated
    R = Registration.objects.get(hash_code=str(val_hash))
    debug('reg','valid hash found')
    if R.validated != R.OK: M = R.member
  except Registration.DoesNotExist:
    # check if validation by Board member
    if r.user.is_authenticated():
      debug('reg','user is logged in (!)')
      if r.user.has_perm('cms.BOARD'):
        debug('reg','user is board member!')
        #admin validation: val_hash == member_id
        R = Registration.objects.get(member=Member.objects.get(id=str(val_hash)))
        if R.validated != R.OK: M = R.member

  debug('reg','Member is :' + unicode(M))

  if M != None:
    # activate member
    activate_member(M)

    # save registration as OK
    R.date_of_validation = timezone.now()
    R.validated = R.OK
    R.save()

    message = done_message.format(name=gen_member_fullname(M),member_id=M.pk)

    #notify by email
    message_content = {
        'FULLNAME'	: gen_member_fullname(M),
        'MEMBER_ID'	: M.pk,
        'MEMBER_TYPE'	: Member.MEMBER_TYPES[int(M.type)][1],
        'USERNAME'	: M.head_of_list.username,
        'CMS_URL'	: 'https://'+settings.ALLOWED_HOSTS[0]+'/',
    }
    if M.type == Member.ORG: 
      message_content['ORGANISATION']=org_msg.format(orga=M.organisation)
      message_content['USERS']=users_msg.format(users=gen_user_list(M))

    #send email
    ok=notify_by_email(M.head_of_list.email,title,message_content,email_template,None,True)

    return render(r, template, {
                   'title'	: title,
                   'message'	: message,
               })
  else: #error
    debug('reg','error, no valid hash found')
    return render(r, template, {
                   'title'		: title,
                   'error_message'	: error_message,
               })
Example #25
0
def attendance_fast(r, event_type, event_id, attendance_hash):
  E = M = title = deadline = e_yes = e_no = message = member = actions = None
  notify = False
  e_message = None
  A = None

  if event_type == 'meetings':
    M = Meeting.objects.get(pk=event_id)
    deadline = M.deadline
    title = settings.TEMPLATE_CONTENT['attendance']['meeting']['title'] % { 'meeting': M.group, }
    e_yes = settings.TEMPLATE_CONTENT['attendance']['meeting']['email']['yes'] % { 'meeting': M.title, }
    e_no = settings.TEMPLATE_CONTENT['attendance']['meeting']['email']['no'] % { 'meeting': M.title, }
    
    if timezone.now() >= deadline:
      message = settings.TEMPLATE_CONTENT['attendance']['too_late']
    else:
      mTm = None
      try:
        mTm = MtoM.objects.get(yes_hash=attendance_hash)
        # it's a YES
        M = mTm.meeting
        U = mTm.user
        try:
          A = Meeting_Attendance.objects.get(meeting=M,user=U)
        except:
          A = Meeting_Attendance(meeting=M,user=U)

        A.present = True
        A.timestamp = timezone.now()
        A.save()
        notify=True
        member=get_member_from_username(U.username)
        message = settings.TEMPLATE_CONTENT['attendance']['yes'] % { 'name': gen_fullname(U), }
        #add meeting information to the confirmation message
        message += settings.TEMPLATE_CONTENT['attendance']['details'] % { 'title': M.title, 'when': M.when, 'time': visualiseDateTime(M.start) + ' - ' + visualiseDateTime(M.end), 'location': M.location, }
        actions = settings.TEMPLATE_CONTENT['attendance']['actions']
        e_message = e_yes
      except:
        try:
          mTm = MtoM.objects.get(no_hash=attendance_hash) 
          # it's a NO
          M = mTm.meeting
          U = mTm.user
          try:
            A = Meeting_Attendance.objects.get(meeting=M,user=U)
          except:
            A = Meeting_Attendance(meeting=M,user=U)

          A.present = False
          A.timestamp = timezone.now()
          A.save()
          notify=True
          message = settings.TEMPLATE_CONTENT['attendance']['no'] % { 'name': gen_fullname(U), }
          e_message = e_no
        except:
          pass

  if event_type == 'events':
    E = Event.objects.get(pk=event_id)
    G = E.group
    deadline = E.deadline
    title = settings.TEMPLATE_CONTENT['attendance']['event']['title'] % { 'event': E.title, }
    e_yes = settings.TEMPLATE_CONTENT['attendance']['event']['email']['yes'] % { 'event': E.title, }
    e_no = settings.TEMPLATE_CONTENT['attendance']['event']['email']['no'] % { 'event': E.title, }

    if timezone.now() >= deadline:
      message = settings.TEMPLATE_CONTENT['attendance']['too_late']
    else:
      eTm = None
      try:
        eTm = EtoM.objects.get(yes_hash=attendance_hash)
        # it's a YES
        E = eTm.event
        U = eTm.user
        try:
          A = Event_Attendance.objects.get(event=E,user=U)
        except:
          A = Event_Attendance(event=E,user=U)

        A.present = True
        A.timestamp = timezone.now()
        A.save()
        notify=True
        member=get_member_from_username(U.username)
        message = settings.TEMPLATE_CONTENT['attendance']['yes'] % { 'name': gen_fullname(U), }
        actions = settings.TEMPLATE_CONTENT['attendance']['actions']
        e_message = e_yes
      except:
        try:
          eTm = EtoM.objects.get(no_hash=attendance_hash) 
          # it's a NO
          E = eTm.event
          U = eTm.user
          try:
            A = Event_Attendance.objects.get(event=E,user=U)
          except:
            A = Event_Attendance(event=E,user=U)

          A.present = False
          A.timestamp = timezone.now()
          A.save()
          notify=True
          message = settings.TEMPLATE_CONTENT['attendance']['no'] % { 'name': gen_fullname(U), }
          e_message = e_no
        except:
          pass


    if notify:
      #notify by email
      message_content = {
            'FULLNAME'	: gen_fullname(U),
            'MESSAGE'	: e_message,
      }
      #send email
      ok=notify_by_email(U.email,title,message_content)

    #set meeting: id and member_id for invitee link
    if actions:
      actions[0]['url'] += str(M.pk)+'/'+str(member.id)

  return render(r, settings.TEMPLATE_CONTENT['attendance']['template'], {
                   'title': title,
                   'actions' : actions,
                   'message': message,
               })