def alias_add_for_member(request, id, template_name='membership/membership_add_alias.html'): membership = get_object_or_404(Membership, id=id) class Form(ModelForm): class Meta: model = Alias exclude = ('owner', 'account', 'expiration_date') if request.method == 'POST': form = Form(request.POST) if form.is_valid(): f = form.cleaned_data name = f['name'] comment = f['comment'] alias = Alias(owner=membership, name=name, comment=comment) alias.save() messages.success(request, _('Alias {alias} successfully created for {membership}.' '').format(alias=alias, membership=membership)) logger.info("Alias %s added by %s." % (alias, request.user.username)) return redirect('membership_edit', membership.id) else: form = Form() return render_to_response(template_name, {'form': form, 'membership': membership }, context_instance=RequestContext(request))
def alias_add_for_member(request, id, template_name='membership/membership_add_alias.html'): membership = get_object_or_404(Membership, id=id) class Form(ModelForm): class Meta: model = Alias exclude = ('owner', 'account', 'expiration_date') if request.method == 'POST': form = Form(request.POST) if form.is_valid(): f = form.cleaned_data name = f['name'] comment = f['comment'] alias = Alias(owner=membership, name=name, comment=comment) alias.save() messages.success(request, unicode(_('Alias %s successfully created for %s.') % (alias, membership))) logger.info("Alias %s added by %s." % (alias, request.user.username)) return redirect('membership_edit', membership.id) else: form = Form() return render_to_response(template_name, {'form': form, 'membership': membership }, context_instance=RequestContext(request))
def create_dummy_member(self, i, duplicate_of=None): fname = random_first_name() d = { 'street_address' : 'Testikatu %d'%i, 'postal_code' : '%d' % (i+1000), 'post_office' : 'Paska kaupunni', 'country' : 'Finland', 'phone' : "%09d" % (40123000 + i), 'sms' : "%09d" % (40123000 + i), 'email' : '*****@*****.**' % i, 'homepage' : 'http://www.example.com/%d'%i, 'first_name' : fname, 'given_names' : '%s %s' % (fname, "Kapsi"), 'last_name' : random_last_name(), } if duplicate_of is not None: d['first_name'] = duplicate_of.person.first_name d['last_name'] = duplicate_of.person.last_name person = Contact(**d) person.save() membership = Membership(type='P', status='N', person=person, nationality='Finnish', municipality='Paska kaupunni', extra_info='Hintsunlaisesti semmoisia tietoja.') self.stdout.write(unicode(person)) membership.save() forward_alias = Alias(owner=membership, name=Alias.email_forwards(membership)[0]) forward_alias.save() login_alias = Alias(owner=membership, account=True, name=choice(Alias.unix_logins(membership))) login_alias.save() # Services forward_alias_service = Service(servicetype=ServiceType.objects.get(servicetype='Email alias'), alias=forward_alias, owner=membership, data=forward_alias.name) forward_alias_service.save() unix_account_service = Service(servicetype=ServiceType.objects.get(servicetype='UNIX account'), alias=login_alias, owner=membership, data=login_alias.name) unix_account_service.save() if random() < 0.6: mysql_service = Service(servicetype=ServiceType.objects.get(servicetype='MySQL database'), alias=login_alias, owner=membership, data=login_alias.name.replace('-', '_')) mysql_service.save() if random() < 0.6: postgresql_service = Service(servicetype=ServiceType.objects.get(servicetype='PostgreSQL database'), alias=login_alias, owner=membership, data=login_alias.name) postgresql_service.save() # End of services logger.info("New application %s from %s:." % (str(person), '::1')) return membership
def organization_application_save(request): try: membership = Membership(type='O', status='N', nationality=request.session['membership']['nationality'], municipality=request.session['membership']['municipality'], extra_info=request.session['membership']['extra_info']) organization = Contact(**request.session['organization']) try: billing_contact = Contact(**request.session['billing_contact']) except: billing_contact = None try: tech_contact = Contact(**request.session['tech_contact']) except: tech_contact = None organization.save() membership.organization = organization if billing_contact: billing_contact.save() membership.billing_contact = billing_contact if tech_contact: tech_contact.save() membership.tech_contact = tech_contact membership.save() services = [] session = request.session login_alias = Alias(owner=membership, name=session['services']['unix_login'], account=True) login_alias.save() unix_account_service = Service(servicetype=ServiceType.objects.get(servicetype='UNIX account'), alias=login_alias, owner=membership, data=session['services']['unix_login']) unix_account_service.save() services.append(unix_account_service) if session['services'].has_key('mysql_database'): mysql_service = Service(servicetype=ServiceType.objects.get(servicetype='MySQL database'), alias=login_alias, owner=membership, data=session['services']['mysql_database'].replace('-', '_')) mysql_service.save() services.append(mysql_service) if session['services'].has_key('postgresql_database'): postgresql_service = Service(servicetype=ServiceType.objects.get(servicetype='PostgreSQL database'), alias=login_alias, owner=membership, data=session['services']['postgresql_database']) postgresql_service.save() services.append(postgresql_service) if session['services'].has_key('login_vhost'): login_vhost_service = Service(servicetype=ServiceType.objects.get(servicetype='WWW vhost'), alias=login_alias, owner=membership, data=session['services']['login_vhost']) login_vhost_service.save() services.append(login_vhost_service) transaction.commit() send_mail(_('Membership application received'), render_to_string('membership/application_confirmation.txt', { 'membership': membership, 'membership_type': MEMBER_TYPES_DICT[membership.type], 'organization': membership.organization, 'billing_contact': membership.billing_contact, 'tech_contact': membership.tech_contact, 'ip': request.META['REMOTE_ADDR'], 'services': services}), settings.FROM_EMAIL, [membership.email_to()], fail_silently=False) logger.info("New application %s from %s:." % (unicode(organization), request.META['REMOTE_ADDR'])) request.session.set_expiry(0) # make this expire when the browser exits for i in ['membership', 'billing_contact', 'tech_contact', 'services']: try: del request.session[i] except: pass return redirect('new_organization_application_success') except Exception, e: transaction.rollback() logger.error("%s" % traceback.format_exc()) logger.error("Transaction rolled back.") return redirect('new_application_error')
def person_application(request, template_name='membership/new_person_application.html'): if settings.MAINTENANCE_MESSAGE != None: return redirect('frontpage') chosen_email_forward = None if request.method != 'POST': application_form = PersonApplicationForm() elif request.method == 'POST': application_form = PersonApplicationForm(request.POST) if not application_form.is_valid(): try: chosen_email_forward = application_form.fields['email_forward'].clean(application_form.data['email_forward']) except: pass else: f = application_form.cleaned_data try: # Separate a contact dict from the other fields contact_dict = {} for k, v in f.items(): if k not in ['nationality', 'municipality', 'public_memberlist', 'email_forward', 'unix_login', 'extra_info', 'mysql_database', 'postgresql_database', 'login_vhost']: contact_dict[k] = v person = Contact(**contact_dict) person.save() membership = Membership(type='P', status='N', person=person, nationality=f['nationality'], municipality=f['municipality'], public_memberlist=f['public_memberlist'], extra_info=f['extra_info']) membership.save() # Service handling services = [] login_alias = Alias(owner=membership, name=f['unix_login'], account=True) login_alias.save() unix_account_service = Service(servicetype=ServiceType.objects.get(servicetype='UNIX account'), alias=login_alias, owner=membership, data=f['unix_login']) unix_account_service.save() services.append(unix_account_service) if f['email_forward'] != 'no' and f['email_forward'] != f['unix_login']: forward_alias = Alias(owner=membership, name=f['email_forward']) forward_alias.save() forward_alias_service = Service(servicetype=ServiceType.objects.get(servicetype='Email alias'), alias=forward_alias, owner=membership, data=f['unix_login']) forward_alias_service.save() services.append(forward_alias_service) if f['mysql_database'] == True: mysql_service = Service(servicetype=ServiceType.objects.get(servicetype='MySQL database'), alias=login_alias, owner=membership, data=f['unix_login'].replace('-', '_')) mysql_service.save() services.append(mysql_service) if f['postgresql_database'] == True: postgresql_service = Service(servicetype=ServiceType.objects.get(servicetype='PostgreSQL database'), alias=login_alias, owner=membership, data=f['unix_login']) postgresql_service.save() services.append(postgresql_service) if f['login_vhost'] == True: login_vhost_service = Service(servicetype=ServiceType.objects.get(servicetype='WWW vhost'), alias=login_alias, owner=membership, data=f['unix_login']) login_vhost_service.save() services.append(login_vhost_service) logger.debug("Attempting to save with the following services: %s." % ", ".join((str(service) for service in services))) # End of services transaction.commit() logger.info("New application %s from %s:." % (str(person), request.META['REMOTE_ADDR'])) send_mail(_('Membership application received'), render_to_string('membership/application_confirmation.txt', { 'membership': membership, 'membership_type': MEMBER_TYPES_DICT[membership.type], 'person': membership.person, 'billing_contact': membership.billing_contact, 'tech_contact': membership.tech_contact, 'ip': request.META['REMOTE_ADDR'], 'services': services}), settings.FROM_EMAIL, [membership.email_to()], fail_silently=False) return redirect('new_person_application_success') except Exception, e: transaction.rollback() logger.critical("%s" % traceback.format_exc()) logger.critical("Transaction rolled back while trying to process %s." % repr(application_form.cleaned_data)) return redirect('new_application_error')
def create_member(mdata, logins): # legacy fields # ['application_id', 'sendinfo', 'memberclass', 'applicationtime', 'sms', # 'id', 'email', 'website', 'publicwebsite', 'lastname', 'phone', # 'firstnames', 'address', 'nationality', 'post', 'removed', 'publicname', # 'name', 'mobile', 'residence', 'time', 'publicemail', 'period_start', # 'period_end'] # TODO: latest billing period start date? post_index = mdata['post'].find(' ') postcode = mdata['post'][:post_index] postoffice = mdata['post'][post_index+1:] d = { 'street_address' : mdata['address'], 'postal_code' : postcode, 'post_office' : postoffice, 'country' : mdata['nationality'], 'phone' : mdata['phone'].replace(" ", "").replace("-", ""), 'sms' : mdata['sms'].replace(" ", "").replace("-", ""), 'email' : mdata['email'].strip(" "), 'homepage' : mdata['website'].strip(" "), 'first_name' : mdata['name'].strip(" "), 'given_names' : mdata['firstnames'].strip(" "), 'last_name' : mdata['lastname'].strip(" "), # mdata['application_id'], # mdata['sendinfo'], } # Hide non-public websites if not mdata['publicwebsite']: d['homepage'] = "" if not mdata['memberclass']: mtype = 'P' print >> sys.stderr, "# Member type missing for member %d" % mdata['id'] elif mdata['memberclass'] == 'member': mtype = 'P' elif mdata['memberclass'] == 'supporting': mtype = 'S' elif mdata['memberclass'] == 'organization': mtype = 'O' elif mdata['memberclass'] == 'honorary': mtype = 'H' else: print >> sys.stderr, "! Not importing, member class unknown for member %d" % mdata['id'] return False contact = Contact(**d) contact.save() if mtype == 'O': membership = Membership(id=mdata['id'], type=mtype, status='A', created=datetime.utcfromtimestamp(mdata['time']), approved=datetime.utcfromtimestamp(mdata['time']), organization=contact, nationality=mdata['nationality'], municipality=mdata['residence'], extra_info='Imported from legacy', public_memberlist=bool(mdata['publicname'])) else: membership = Membership(id=mdata['id'], type=mtype, status='A', created=datetime.utcfromtimestamp(mdata['time']), approved=datetime.utcfromtimestamp(mdata['time']), person=contact, nationality=mdata['nationality'], municipality=mdata['residence'], extra_info='Imported from legacy', public_memberlist=bool(mdata['publicname'])) logger.info("Member %s imported from legacy database." % (unicode(contact))) membership.save() # Create a period only if there already is one previously. Else let # makebills create one. if mdata.has_key('period_start'): billing_cycle = BillingCycle(membership=membership, is_paid=False, start=datetime.strptime(mdata['period_start'], "%Y-%m-%d %H:%M:%S"), end=datetime.strptime(mdata['period_end'], "%Y-%m-%d %H:%M:%S")+timedelta(days=1)) billing_cycle.save() bill = Bill(billingcycle=billing_cycle) bill.save() # Due to auto_now_add, need to save first before changing bill.created=datetime.strptime(mdata['bill_creation'], "%Y-%m-%d %H:%M:%S") bill.due_date=datetime.strptime(mdata['bill_dueday'], "%Y-%m-%d %H:%M:%S") bill.save() for alias in mdata['aliases']: if alias in logins: a = Alias(owner=membership, name=alias, account=True, created=membership.created) else: a = Alias(owner=membership, name=alias, account=False, created=membership.created) a.save() account_alias_count = Alias.objects.filter(owner=a.owner, account=True).count() if account_alias_count > 1: logger.warning("%i account aliases for %s" % (account_alias_count, a.owner)) log_change(membership, user, change_message="Imported into system") return True
def person_application(request, template_name='membership/new_person_application.html'): if settings.MAINTENANCE_MESSAGE != None: return redirect('frontpage') chosen_email_forward = None if request.method != 'POST': application_form = PersonApplicationForm() elif request.method == 'POST': application_form = PersonApplicationForm(request.POST) if not application_form.is_valid(): try: chosen_email_forward = application_form.fields[ 'email_forward'].clean( application_form.data['email_forward']) except: pass else: f = application_form.cleaned_data try: # Separate a contact dict from the other fields contact_dict = {} for k, v in f.items(): if k not in [ 'nationality', 'municipality', 'public_memberlist', 'email_forward', 'unix_login', 'extra_info', 'mysql_database', 'postgresql_database', 'login_vhost' ]: contact_dict[k] = v person = Contact(**contact_dict) person.save() membership = Membership( type='P', status='N', person=person, nationality=f['nationality'], municipality=f['municipality'], public_memberlist=f['public_memberlist'], extra_info=f['extra_info']) membership.save() # Service handling services = [] login_alias = Alias(owner=membership, name=f['unix_login'], account=True) login_alias.save() unix_account_service = Service( servicetype=ServiceType.objects.get( servicetype='UNIX account'), alias=login_alias, owner=membership, data=f['unix_login']) unix_account_service.save() services.append(unix_account_service) if f['email_forward'] != 'no' and f['email_forward'] != f[ 'unix_login']: forward_alias = Alias(owner=membership, name=f['email_forward']) forward_alias.save() forward_alias_service = Service( servicetype=ServiceType.objects.get( servicetype='Email alias'), alias=forward_alias, owner=membership, data=f['unix_login']) forward_alias_service.save() services.append(forward_alias_service) if f['mysql_database'] == True: mysql_service = Service( servicetype=ServiceType.objects.get( servicetype='MySQL database'), alias=login_alias, owner=membership, data=f['unix_login'].replace('-', '_')) mysql_service.save() services.append(mysql_service) if f['postgresql_database'] == True: postgresql_service = Service( servicetype=ServiceType.objects.get( servicetype='PostgreSQL database'), alias=login_alias, owner=membership, data=f['unix_login']) postgresql_service.save() services.append(postgresql_service) if f['login_vhost'] == True: login_vhost_service = Service( servicetype=ServiceType.objects.get( servicetype='WWW vhost'), alias=login_alias, owner=membership, data=f['unix_login']) login_vhost_service.save() services.append(login_vhost_service) logger.debug( "Attempting to save with the following services: %s." % ", ".join((str(service) for service in services))) # End of services transaction.commit() logger.info("New application %s from %s:." % (str(person), request.META['REMOTE_ADDR'])) send_mail( _('Membership application received'), render_to_string( 'membership/application_confirmation.txt', { 'membership': membership, 'membership_type': MEMBER_TYPES_DICT[membership.type], 'person': membership.person, 'billing_contact': membership.billing_contact, 'tech_contact': membership.tech_contact, 'ip': request.META['REMOTE_ADDR'], 'services': services }), settings.FROM_EMAIL, [membership.email_to()], fail_silently=False) return redirect('new_person_application_success') except Exception, e: transaction.rollback() logger.critical("%s" % traceback.format_exc()) logger.critical( "Transaction rolled back while trying to process %s." % repr(application_form.cleaned_data)) return redirect('new_application_error')
def organization_application_save(request): try: membership = Membership( type='O', status='N', nationality=request.session['membership']['nationality'], municipality=request.session['membership']['municipality'], extra_info=request.session['membership']['extra_info']) organization = Contact(**request.session['organization']) try: billing_contact = Contact(**request.session['billing_contact']) except: billing_contact = None try: tech_contact = Contact(**request.session['tech_contact']) except: tech_contact = None organization.save() membership.organization = organization if billing_contact: billing_contact.save() membership.billing_contact = billing_contact if tech_contact: tech_contact.save() membership.tech_contact = tech_contact membership.save() services = [] session = request.session login_alias = Alias(owner=membership, name=session['services']['unix_login'], account=True) login_alias.save() unix_account_service = Service( servicetype=ServiceType.objects.get(servicetype='UNIX account'), alias=login_alias, owner=membership, data=session['services']['unix_login']) unix_account_service.save() services.append(unix_account_service) if session['services'].has_key('mysql_database'): mysql_service = Service( servicetype=ServiceType.objects.get( servicetype='MySQL database'), alias=login_alias, owner=membership, data=session['services']['mysql_database'].replace('-', '_')) mysql_service.save() services.append(mysql_service) if session['services'].has_key('postgresql_database'): postgresql_service = Service( servicetype=ServiceType.objects.get( servicetype='PostgreSQL database'), alias=login_alias, owner=membership, data=session['services']['postgresql_database']) postgresql_service.save() services.append(postgresql_service) if session['services'].has_key('login_vhost'): login_vhost_service = Service( servicetype=ServiceType.objects.get(servicetype='WWW vhost'), alias=login_alias, owner=membership, data=session['services']['login_vhost']) login_vhost_service.save() services.append(login_vhost_service) transaction.commit() send_mail( _('Membership application received'), render_to_string( 'membership/application_confirmation.txt', { 'membership': membership, 'membership_type': MEMBER_TYPES_DICT[membership.type], 'organization': membership.organization, 'billing_contact': membership.billing_contact, 'tech_contact': membership.tech_contact, 'ip': request.META['REMOTE_ADDR'], 'services': services }), settings.FROM_EMAIL, [membership.email_to()], fail_silently=False) logger.info("New application %s from %s:." % (unicode(organization), request.META['REMOTE_ADDR'])) request.session.set_expiry( 0) # make this expire when the browser exits for i in ['membership', 'billing_contact', 'tech_contact', 'services']: try: del request.session[i] except: pass return redirect('new_organization_application_success') except Exception, e: transaction.rollback() logger.error("%s" % traceback.format_exc()) logger.error("Transaction rolled back.") return redirect('new_application_error')
def create_dummy_member(self, i, duplicate_of=None): fname = random_first_name() d = { 'street_address': 'Testikatu %d' % i, 'postal_code': '%d' % (i + 1000), 'post_office': 'Paska kaupunni', 'country': 'Finland', 'phone': "%09d" % (40123000 + i), 'sms': "%09d" % (40123000 + i), 'email': '*****@*****.**' % i, 'homepage': 'http://www.example.com/%d' % i, 'first_name': fname, 'given_names': '%s %s' % (fname, "Kapsi"), 'last_name': random_last_name(), } if duplicate_of is not None: d['first_name'] = duplicate_of.person.first_name d['last_name'] = duplicate_of.person.last_name person = Contact(**d) person.save() if random() < 0.2: public_memberlist = True else: public_memberlist = False membership = Membership( type='P', status='N', person=person, nationality='Finnish', municipality='Paska kaupunni', public_memberlist=public_memberlist, extra_info='Hintsunlaisesti semmoisia tietoja.') self.stdout.write(unicode(person)) membership.save() forward_alias = Alias(owner=membership, name=Alias.email_forwards(membership)[0]) forward_alias.save() login_alias = Alias(owner=membership, account=True, name=choice(Alias.unix_logins(membership))) login_alias.save() # Services forward_alias_service = Service( servicetype=ServiceType.objects.get(servicetype='Email alias'), alias=forward_alias, owner=membership, data=forward_alias.name) forward_alias_service.save() unix_account_service = Service( servicetype=ServiceType.objects.get(servicetype='UNIX account'), alias=login_alias, owner=membership, data=login_alias.name) unix_account_service.save() if random() < 0.6: mysql_service = Service(servicetype=ServiceType.objects.get( servicetype='MySQL database'), alias=login_alias, owner=membership, data=login_alias.name.replace('-', '_')) mysql_service.save() if random() < 0.6: postgresql_service = Service(servicetype=ServiceType.objects.get( servicetype='PostgreSQL database'), alias=login_alias, owner=membership, data=login_alias.name) postgresql_service.save() # End of services logger.info("New application %s from %s:." % (str(person), '::1')) return membership
def create_dummy_member(self, i, duplicate_of=None): fname = random_first_name() d = { "street_address": "Testikatu %d" % i, "postal_code": "%d" % (i + 1000), "post_office": "Paska kaupunni", "country": "Finland", "phone": "%09d" % (40123000 + i), "sms": "%09d" % (40123000 + i), "email": "*****@*****.**" % i, "homepage": "http://www.example.com/%d" % i, "first_name": fname, "given_names": "%s %s" % (fname, "Kapsi"), "last_name": random_last_name(), } if duplicate_of is not None: d["first_name"] = duplicate_of.person.first_name d["last_name"] = duplicate_of.person.last_name person = Contact(**d) person.save() if random() < 0.2: public_memberlist = True else: public_memberlist = False membership = Membership( type="P", status="N", person=person, nationality="Finnish", municipality="Paska kaupunni", public_memberlist=public_memberlist, extra_info="Hintsunlaisesti semmoisia tietoja.", ) self.stdout.write(unicode(person)) membership.save() forward_alias = Alias(owner=membership, name=Alias.email_forwards(membership)[0]) forward_alias.save() login_alias = Alias(owner=membership, account=True, name=choice(Alias.unix_logins(membership))) login_alias.save() # Services forward_alias_service = Service( servicetype=ServiceType.objects.get(servicetype="Email alias"), alias=forward_alias, owner=membership, data=forward_alias.name, ) forward_alias_service.save() unix_account_service = Service( servicetype=ServiceType.objects.get(servicetype="UNIX account"), alias=login_alias, owner=membership, data=login_alias.name, ) unix_account_service.save() if random() < 0.6: mysql_service = Service( servicetype=ServiceType.objects.get(servicetype="MySQL database"), alias=login_alias, owner=membership, data=login_alias.name.replace("-", "_"), ) mysql_service.save() if random() < 0.6: postgresql_service = Service( servicetype=ServiceType.objects.get(servicetype="PostgreSQL database"), alias=login_alias, owner=membership, data=login_alias.name, ) postgresql_service.save() # End of services logger.info("New application %s from %s:." % (str(person), "::1")) return membership