Beispiel #1
0
    def post(self):
        if self.request.get('store') != '1':
            self.redirect('/members')
            return

        try:
            member = Member()
            member.name = self.get_var('name')
            member.address = self.get_var('address')
            member.zipcode = self.get_var('zip')
            member.city = self.get_var('city')
            member.country = Country.get(self.get_var('country'))
            member.email = self.get_var('email', optional=True)
            member.mobile = self.get_var('mobile', optional=True)
            member.home = self.get_var('home', optional=True)
            member.work = self.get_var('work', optional=True)
            member.membertype = MemberType.get(self.get_var('type'))
            member.notes = self.get_var('comment', optional=True)
            member.status = Status.get(self.get_var('status'))
            member.number = dbutils.create_new_member_no()
            member.member_since = datetime.date.today()
            member.generate_access_code()
            mcount = self.get_var('magazine_count', optional=True)
            member.magazine_count = int(mcount) if mcount else 1
            member.put()
            self.redirect('/members/%s/edit' % member.key())
            return
        except MissingField:
            # TODO: Redirect
            template = JINJA_ENVIRONMENT.get_template(
                'templates/members/new_member.html')
            countries = Country.all().order('order').fetch(LIMIT)
            statuses = Status.all().order('order').fetch(LIMIT)
            types = MemberType.all().order('order').fetch(LIMIT)
            data = {}
            for name in [
                    'name', 'address', 'zip', 'country', 'email', 'mobile',
                    'home', 'work', 'type', 'comment', 'status'
            ]:
                data[name] = self.request.get(name)

            params = {
                'countries': countries,
                'statuses': statuses,
                'types': types,
                'data': data
            }
            self.response.write(template.render(params))
            return

        self.redirect('/members')
Beispiel #2
0
    def post(self):
        if self.request.get('store') != '1':
            self.redirect('/members')
            return

        try:
            member = Member()
            member.name = self.get_var('name')
            member.address = self.get_var('address')
            member.zipcode = self.get_var('zip')
            member.city = self.get_var('city')
            member.country = Country.get(self.get_var('country'))
            member.email = self.get_var('email', optional=True)
            member.mobile = self.get_var('mobile', optional=True)
            member.home = self.get_var('home', optional=True)
            member.work = self.get_var('work', optional=True)
            member.membertype = MemberType.get(self.get_var('type'))
            member.notes = self.get_var('comment', optional=True)
            member.status = Status.get(self.get_var('status'))
            member.number = dbutils.create_new_member_no()
            member.member_since = datetime.date.today()
            member.generate_access_code()
            mcount = self.get_var('magazine_count', optional=True)
            member.magazine_count = int(mcount) if mcount else 1
            member.put()
            self.redirect('/members/%s/edit' % member.key())
            return
        except MissingField:
            # TODO: Redirect
            template = JINJA_ENVIRONMENT.get_template('templates/members/new_member.html')
            countries = Country.all().order('order').fetch(LIMIT)
            statuses = Status.all().order('order').fetch(LIMIT)
            types = MemberType.all().order('order').fetch(LIMIT)
            data = { }
            for name in [ 'name', 'address', 'zip', 'country', 'email', 'mobile', 'home', 'work', 'type', 'comment', 'status']:
                data[name] = self.request.get(name)

            params = {
                'countries': countries,
                'statuses': statuses,
                'types': types,
                'data': data
            }
            self.response.write(template.render(params))
            return

        self.redirect('/members')
Beispiel #3
0
def task_member_restore(items):

    for item in items:
        member = Member()
        member.number = item['number']
        member.address = item['address']
        if item['email'] != '' and item['email'] != None:
            member.email = db.Email(item['email'])
        member.name = item['name']
        member.member_since = string_to_date(item['memberSince'])
        if item['phone'] != '' and item['phone'] != None:
            member.phone = db.PhoneNumber(item['phone'])
        if item['phoneWork'] != '' and item['phoneWork'] != None:
            member.phone_work = item['phoneWork']
        if item['phoneHome'] != '' and item['phoneHome'] != None:
            member.phone_home = item['phoneHome']
        member.notes = item['notes']
        member.zipcode = item['zipcode']
        member.city = item['city']
        member.county = item['county']
        member.country = db.get(db.Key.from_path('Country', item['countryId']))
        member.status = db.get(db.Key.from_path('Status', item['statusId']))
        member.membertype = db.get(
            db.Key.from_path('MemberType', item['typeId']))
        member.put()

        for itemdue in item['membershipDues']:
            due = MembershipDues(parent=member,
                                 year=itemdue['year'],
                                 paid=itemdue['paid'])
            due.put()

        for itemcar in item['cars']:
            car = Car()
            car.member = member
            car.registration = itemcar['registration']
            car.model = db.get(db.Key.from_path('CarModel',
                                                itemcar['modelId']))
            car.bought_year = itemcar['boughtYear']
            car.sold_year = itemcar['soldYear']
            car.year = itemcar['year']
            car.notes = itemcar['notes']
            car.serial_no = itemcar['serialNo']
            car.put()
Beispiel #4
0
 def post(self):
     req_user = self.request.user
     gu_obj = GoogleUser.get_or_insert(req_user.user_id())
     if gu_obj.name:
         self.redirect('/')
         return
     
     errors = []
     name = self.POST['name'].strip().lower()
     if name:
         if len(name)<20:
             if re.search('^[a-zA-Z0-9]+$', name):
                 check_obj = Member.get_by_key_name(str(name))
                 if check_obj:
                     errors.append('该用户名已被注册,请换一个吧')
                 else:
                     #get member id
                     mid_obj = Counter.get_or_insert('member_auto_increment',name = 'member_auto_increment', value = 1)
                     nuser_obj = Member(key_name=name, id = mid_obj.value, flag = 1, add = int(time()))
                     nuser_obj.put()
                     if nuser_obj.is_saved():
                         #set google user
                         gu_obj.name = name
                         db.run_in_transaction(obj_runput,gu_obj)
                         #all member num +1
                         mid_obj.value += 1
                         db.run_in_transaction(obj_runput,mid_obj)
                         self.redirect('/setavatar')
                         return
                     else:
                         errors.append('服务器出现意外错误,请稍后再试')
             else:
                 errors.append('用户名只能包含字母和数字')
         else:
             errors.append('用户名太长了')
     else:
         errors.append('用户名必填')
     
     self.echo('setname.html', {
         'title': "设置名字",
         'errors':errors,
         'name':name,
         'newest_node': Node.get_newest(),
     }, layout='_layout.html')
Beispiel #5
0
def task_member_restore(items):

    for item in items:
        member = Member()
        member.number = item['number']
        member.address = item['address']
        if item['email'] != '' and item['email'] != None:
            member.email = db.Email(item['email'])
        member.name = item['name']
        member.member_since = string_to_date(item['memberSince'])
        if item['phone'] != '' and item['phone'] != None:
            member.phone = db.PhoneNumber(item['phone'])
        if item['phoneWork'] != '' and item['phoneWork'] != None:
            member.phone_work = item['phoneWork']
        if item['phoneHome'] != '' and item['phoneHome'] != None:
            member.phone_home = item['phoneHome']
        member.notes = item['notes']
        member.zipcode = item['zipcode']
        member.city = item['city']
        member.county = item['county']
        member.country = db.get(db.Key.from_path('Country', item['countryId']))
        member.status = db.get(db.Key.from_path('Status', item['statusId']))
        member.membertype = db.get(db.Key.from_path('MemberType', item['typeId']))
        member.put()

        for itemdue in item['membershipDues']:
            due = MembershipDues(parent=member, year=itemdue['year'],paid=itemdue['paid'])
            due.put()

        for itemcar in item['cars']:
            car = Car()
            car.member = member
            car.registration = itemcar['registration']
            car.model = db.get(db.Key.from_path('CarModel', itemcar['modelId']))
            car.bought_year = itemcar['boughtYear']
            car.sold_year = itemcar['soldYear']
            car.year = itemcar['year']
            car.notes = itemcar['notes']
            car.serial_no = itemcar['serialNo']
            car.put()
Beispiel #6
0
    def post(self):
        complete = []
        incomplete = []
        values = {}

        # Holy crap this is ugly. There has to be a better way.

        name = self.request.get('name')
        if not name or name.strip() == '' or name.strip().startswith('http'):
            incomplete.append('name')
        else:
            values['name'] = name
            complete.append('name')

        address = self.request.get('address')
        # Spammers put URLs in the address field so we reject those right away
        if not address or address.strip() == '' or address.strip().startswith(
                'http'):
            incomplete.append('address')
        else:
            values['address'] = address
            complete.append('address')

        zipcode = self.request.get('zip')
        if (not zipcode or zipcode.strip() == '') or len(zipcode.strip()) < 4:
            incomplete.append('zip')
        else:
            values['zip'] = zipcode
            complete.append('zip')

        city = self.request.get('city')
        if not city or city.strip() == '':
            incomplete.append('city')
        else:
            values['city'] = city
            complete.append('city')

        if 'zip' in incomplete or 'city' in incomplete:
            incomplete.append('zipcity')

        country_key = self.request.get('country').strip()
        country = Country.get(country_key)

        countries = Country.all().order('order').fetch(100)

        if not country or not country_key or country_key.strip() == '':
            incomplete.append('country')
            # retrieve countries since we're going to need them
        else:
            values['country'] = country.name
            complete.append('country')

        email = self.request.get('email')
        if not email or email.strip() == '' or not mail.is_email_valid(email):
            incomplete.append('email')
        else:
            values['email'] = email
            complete.append('email')

        mobile = self.request.get('mobile')
        if mobile and mobile.strip() == '':
            mobile = None
        values['mobile'] = mobile

        home = self.request.get('home')
        if home and home.strip() == '':
            home = None
        values['home'] = home

        work = self.request.get('work')
        if work and work.strip() == '':
            work = None
        values['work'] = work

        member_type = self.request.get('type')
        if not member_type or member_type.strip() == '':
            member_type = '1'

        types = MemberType.all().fetch(100)

        mtype = None

        # TODO: Custom settings? Constants at least.
        if member_type == '1':
            mtype = next(t for t in types if t.name == DEFAULT_MEMBER_NAME)
        else:
            mtype = next(t for t in types
                         if t.name == DEFAULT_SUPPORT_MEMBER_NAME)

        values['type'] = mtype.name
        comment = self.request.get('comment')
        complete.append('comment')
        values['comment'] = comment

        error_message = ''

        # Check if member exists;
        existing = Member.all().filter('email', email).fetch(1)

        if len(existing) > 0:
            incomplete.append('email')
            error_message = 'Det er allerede registrert noen i medlemsregisteret med denne epostadressen!'
            # TODO: Error message

        if len(incomplete) > 0:
            # missing field, redirect to signup page again
            template = JINJA_ENVIRONMENT.get_template(
                'templates/selfservice/signup.html')
            return self.response.write(
                template.render({
                    'countries': countries,
                    'incomplete': incomplete,
                    'complete': complete,
                    'error_message': error_message,
                    'values': values
                }))

        # invariant: fields are OK, create new member, send mail,
        # create payment history on member.
        template = JINJA_ENVIRONMENT.get_template(
            'templates/selfservice/signup_receipt.html')
        data = {'values': values, 'profile_url': PROFILE_URL}

        statuses = Status.all().fetch(100)

        # TODO: Handle existing members signing up again

        new_member = Member()

        new_member.name = name
        new_member.address = address
        new_member.zipcode = zipcode
        new_member.city = city
        new_member.notes = comment
        new_member.country = country
        new_member.membertype = mtype

        status = next(s for s in statuses if s.name == SIGNUP_STATUS_NAME)
        new_member.status = status

        new_member.number = dbutils.create_new_member_no()

        new_member.email = email
        new_member.member_since = datetime.date.today()
        if mobile:
            new_member.phone = mobile
        if work:
            new_member.phone_work = work
        if home:
            new_member.phone_home = home
        new_member.generate_access_code()
        new_member.member_since = datetime.date.today()
        new_member.member_type = mtype
        new_member.put()
        new_member.update_index()

        self.send_welcome_mail(new_member)
        self.send_notification_mails(new_member)

        # TODO: Invalidate counts for categories
        # Handle mutations on members gracefully

        return self.response.write(template.render(data))
Beispiel #7
0
    def post(self):
        complete = []
        incomplete = []
        values = {}

        # Holy crap this is ugly. There has to be a better way.

        name = self.request.get('name')
        if not name or name.strip() == '':
            incomplete.append('name')
        else:
            values['name'] = name
            complete.append('name')


        address = self.request.get('address')
        if not address or address.strip() == '':
            incomplete.append('address')
        else:
            values['address'] = address
            complete.append('address')


        zipcode = self.request.get('zip')
        if (not zipcode or zipcode.strip() == '') or len(zipcode.strip()) < 4:
            incomplete.append('zip')
        else:
            values['zip'] = zipcode
            complete.append('zip')


        city = self.request.get('city')
        if not city or city.strip() == '':
            incomplete.append('city')
        else:
            values['city'] = city
            complete.append('city')

        if 'zip' in incomplete or 'city' in incomplete:
            incomplete.append('zipcity')


        country_key = self.request.get('country').strip()
        country = Country.get(country_key)

        countries = Country.all().order('order').fetch(100)

        if not country or not country_key or country_key.strip() == '':
            incomplete.append('country')
            # retrieve countries since we're going to need them
        else:
            values['country'] = country.name
            complete.append('country')

        email = self.request.get('email')
        if not email or email.strip() == '' or not mail.is_email_valid(email):
            incomplete.append('email')
        else:
            values['email'] = email
            complete.append('email')

        mobile = self.request.get('mobile')
        if mobile and mobile.strip() == '':
            mobile = None
        values['mobile'] = mobile

        home = self.request.get('home')
        if home and home.strip() == '':
            home = None
        values['home'] = home

        work = self.request.get('work')
        if work and work.strip() == '':
            work = None
        values['work'] = work

        member_type = self.request.get('type')
        if not member_type or member_type.strip() == '':
            member_type = '1'

        types = MemberType.all().fetch(100)

        mtype = None

        # TODO: Custom settings? Constants at least.
        if member_type == '1':
            mtype = next(t for t in types if t.name == DEFAULT_MEMBER_NAME)
        else:
            mtype = next(t for t in types if t.name == DEFAULT_SUPPORT_MEMBER_NAME)

        values['type'] = mtype.name
        comment = self.request.get('comment')
        complete.append('comment')
        values['comment'] = comment

        error_message = ''

        # Check if member exists;
        existing = Member.all().filter('email', email).fetch(1)

        if len(existing) > 0:
            incomplete.append('email')
            error_message = 'Det er allerede registrert noen i medlemsregisteret med denne epostadressen!'
            # TODO: Error message

        if len(incomplete) > 0:
            # missing field, redirect to signup page again
            template = JINJA_ENVIRONMENT.get_template('templates/selfservice/signup.html')
            return self.response.write(template.render({
                'countries': countries,
                'incomplete': incomplete,
                'complete': complete,
                'error_message': error_message,
                'values': values }))

        # invariant: fields are OK, create new member, send mail,
        # create payment history on member.
        template = JINJA_ENVIRONMENT.get_template('templates/selfservice/signup_receipt.html')
        data = {
            'values': values,
            'profile_url': PROFILE_URL
        }

        statuses = Status.all().fetch(100)

        # TODO: Handle existing members signing up again

        new_member = Member()

        new_member.name = name
        new_member.address = address
        new_member.zipcode = zipcode
        new_member.city = city
        new_member.notes = comment
        new_member.country = country
        new_member.membertype = mtype

        status = next(s for s in statuses if s.name == SIGNUP_STATUS_NAME)
        new_member.status = status

        new_member.number = dbutils.create_new_member_no()

        new_member.email = email
        new_member.member_since = datetime.date.today()
        if mobile:
            new_member.phone = mobile
        if work:
            new_member.phone_work = work
        if home:
            new_member.phone_home = home
        new_member.generate_access_code()
        new_member.member_since = datetime.date.today()
        new_member.member_type = mtype
        new_member.put()

        self.send_welcome_mail(new_member)
        self.send_notification_mails(new_member)

        # TODO: Invalidate counts for categories
        # Handle mutations on members gracefully

        return self.response.write(template.render(data))
Beispiel #8
0
    def post(self):
        req_user = self.request.user
        gu_obj = GoogleUser.get_or_insert(req_user.email())
        if gu_obj.name:
            self.redirect('/')
            return

        errors = []
        name = self.POST['name'].strip().lower()
        if name:
            if len(name) < 20:
                if re.search('^[a-zA-Z0-9]+$', name):
                    check_obj = Member.get_by_key_name(str(name))
                    if check_obj:
                        errors.append('该用户名已被注册,请换一个吧')
                    else:
                        #get member id
                        mid_obj = Counter.get_or_insert(
                            'member_auto_increment',
                            name='member_auto_increment',
                            value=1)
                        nuser_obj = Member(key_name=name,
                                           id=mid_obj.value,
                                           flag=1,
                                           add=int(time()))
                        nuser_obj.put()
                        if nuser_obj.is_saved():
                            #set google user
                            gu_obj.name = name
                            db.run_in_transaction(obj_runput, gu_obj)
                            #all member num +1
                            mid_obj.value += 1
                            db.run_in_transaction(obj_runput, mid_obj)

                            #try to Fetch Google Plus Profile Picture
                            try:
                                img_url = 'https://profiles.google.com/s2/photos/profile/' + req_user.nickname(
                                )
                                img_data = read_img(img_url)
                                #self.header['Content-Type'] = "image/jpg"
                                if img_data:
                                    pass
                                else:
                                    img_url = 'https://www.gravatar.com/avatar/%s?s=73&d=monsterid' % md5(
                                        req_user.email()).hexdigest()
                                    img_data = read_img(img_url)

                                if img_data:
                                    imgobj = images.Image(img_data)
                                    if imgobj.width <= 73 and imgobj.height <= 73:
                                        img_large = img_data
                                    else:
                                        imgobj.resize(73, 73)
                                        imgobj.im_feeling_lucky()
                                        img_large = imgobj.execute_transforms(
                                            output_encoding=images.JPEG,
                                            quality=95)

                                    u = UpYun(DOMAIN_NAME_AVATAR, UPYUN_USER,
                                              UPYUN_PW)
                                    file_path_name = '/avatar/%s.jpg' % self.cur_user.name
                                    avatar = u.writeFile(
                                        file_path_name, img_large, True)

                                    if avatar:
                                        m_obj = self.cur_user  #Member.get_by_key_name(self.cur_user.name)
                                        if m_obj.flag == 1:
                                            if m_obj.id == 1:
                                                m_obj.flag = 99
                                            else:
                                                m_obj.flag = 2
                                            db.run_in_transaction(
                                                obj_runput, m_obj, [
                                                    'cur_user:'******'Fetch Google Plus Profile Picture Failure: '
                                    + req_user.email())
                            #
                            self.redirect('/setavatar')
                            return
                        else:
                            errors.append('服务器出现意外错误,请稍后再试')
                else:
                    errors.append('用户名只能包含字母和数字')
            else:
                errors.append('用户名太长了')
        else:
            errors.append('用户名必填')

        self.echo('setname.html', {
            'title': "设置名字",
            'errors': errors,
            'name': name,
            'newest_node': Node.get_newest(),
        },
                  layout='_layout.html')
Beispiel #9
0
    def import_members(self, member_csv):
        member_csv = member_csv.split('\n')
        lines = self.unmangle(member_csv)

        count = 0
        for fields in lines:
            #fields.reverse()
            print '-' * 80
            print fields
            print '=' * 80
            fields.reverse()
            member = Member()

            (fee2009, fee2010, fee2011, fee2012,
             fee2013, fee2014) = (fields.pop(), fields.pop(), fields.pop(),
                                  fields.pop(), fields.pop(), fields.pop())

            member.address = fields.pop()
            # Skip the cars
            for carno in range(1, 6):
                (car, registration) = (fields.pop(), fields.pop())

            email = fields.pop()
            if email != '':
                member.email = db.Email(email)

            (lastname, firstname) = (fields.pop(), fields.pop())
            full_name = firstname + ' ' + lastname
            member.name = full_name.strip()

            member.county = fields.pop().strip()
            member_since = fields.pop()
            date = self.string_to_date(member_since)
            if date:
                member.member_since = date
            else:
                print 'Error converting date from', member_since

            country = fields.pop().strip()
            if country == '':
                country = 'Norge'
            member.country = self.string_to_country(country)
            member.membertype = self.string_to_type(fields.pop())
            member.number = fields.pop()
            mobile = fields.pop()
            if mobile != '':
                member.phone = db.PhoneNumber(mobile)

            member.notes = fields.pop()
            member.zipcode = fields.pop()
            member.city = fields.pop()
            work = fields.pop()
            home = fields.pop()
            if work != '':
                member.phone_work = db.PhoneNumber(work)
            if home != '':
                member.phone_home = db.PhoneNumber(home)
            member.status = self.get_status('Medlem')
            member.generate_access_code()
            member.put()

            self.add_due(member, 2009, fee2009 == 'Betalt')
            self.add_due(member, 2010, fee2010 == 'Betalt')
            self.add_due(member, 2011, fee2011 == 'Betalt')
            self.add_due(member, 2012, fee2012 == 'Betalt')
            self.add_due(member, 2013, fee2013 == 'Betalt')
            self.add_due(member, 2014, fee2014 == 'Betalt')
            count = count + 1

        print 'Imported', count, 'members'
Beispiel #10
0
    def import_members(self, member_csv):
        member_csv = member_csv.split('\n')
        lines = self.unmangle(member_csv)

        count = 0
        for fields in lines:
            #fields.reverse()
            print '-'*80
            print fields
            print '='*80
            fields.reverse()
            member = Member()

            (fee2009, fee2010, fee2011,
                fee2012, fee2013, fee2014) = (
                    fields.pop(), fields.pop(), fields.pop(),
                    fields.pop(), fields.pop(), fields.pop())

            member.address = fields.pop()
            # Skip the cars
            for carno in range(1,6):
                (car, registration) = (fields.pop(), fields.pop())

            email = fields.pop()
            if email != '':
                member.email = db.Email(email)

            (lastname, firstname) = (fields.pop(), fields.pop())
            full_name = firstname + ' ' + lastname
            member.name = full_name.strip()

            member.county = fields.pop().strip()
            member_since = fields.pop()
            date = self.string_to_date(member_since)
            if date:
                member.member_since = date
            else:
                print 'Error converting date from',member_since

            country = fields.pop().strip()
            if country == '':
                country = 'Norge'
            member.country = self.string_to_country(country)
            member.membertype = self.string_to_type(fields.pop())
            member.number = fields.pop()
            mobile = fields.pop()
            if mobile != '':
                member.phone = db.PhoneNumber(mobile)

            member.notes = fields.pop()
            member.zipcode = fields.pop()
            member.city = fields.pop()
            work = fields.pop()
            home = fields.pop()
            if work != '':
                member.phone_work = db.PhoneNumber(work)
            if home != '':
                member.phone_home = db.PhoneNumber(home)
            member.status = self.get_status('Medlem')
            member.generate_access_code()
            member.put()

            self.add_due(member, 2009, fee2009=='Betalt')
            self.add_due(member, 2010, fee2010=='Betalt')
            self.add_due(member, 2011, fee2011=='Betalt')
            self.add_due(member, 2012, fee2012=='Betalt')
            self.add_due(member, 2013, fee2013=='Betalt')
            self.add_due(member, 2014, fee2014=='Betalt')
            count = count + 1


        print 'Imported',count,'members'