def user_etl(rec): if rec == 'header': return ['member_number', 'user_name', 'role', 'password'] user = User(member_id=get_member_id(rec['member_number']), user_name=rec['user_name']) user.set_password(rec['password']) user.role = UserRole.from_name(rec['role']) return user
def update_member_details(member, details): member.title = Title(details['title']) if details['title'] > 0 else None member.first_name = details['first_name'] member.last_name = details['last_name'] member.sex = Sex(details['sex']) if details['sex'] > 0 else None member.birth_date = details['birth_date'] member.home_phone = details['home_phone'] member.mobile_phone = details['mobile_phone'] member.email = details['email'] member.comms = CommsType(details['comms']) if 'comms_status' in details: member.comms_status = CommsStatus(details['comms_status']) member.external_access = ExternalAccess(details['external_access']) member.address.line_1 = details['line_1'] member.address.line_2 = details['line_2'] member.address.line_3 = details['line_3'] member.address.city = details['city'] member.address.state = details['state'] member.address.post_code = details['post_code'] member.address.county = details['county'] member.address.country = details['country'] member.address.region = get_region(details['country'], details['post_code']) if 'fan_id' in details and len(details['fan_id']) > 0: member.season_ticket_id = to_int(details['fan_id']) if 'member_type' in details and details['member_type']: member.member_type = MembershipType(details['member_type']) role = UserRole.from_value(details['access']) if member.user: member.user.role = role elif role != UserRole.none: member.user = get_new_user(role) if member.member_type == MembershipType.junior: if not member.junior: member.junior = get_junior() member.junior.email = details['jd_mail'] member.junior.gift = JuniorGift(details['jd_gift']) if details['jd_gift'] and details['jd_gift'] > 0 else None if 'parental_consent' in details: member.junior.parental_consent = details['parental_consent']
def populate_member(self, member_id): new_member = member_id == 0 if new_member: self.first_name.data = 'new' self.last_name.data = 'member' self.status_return.data = MemberStatus.full_member.value self.handicap_return.data = 0 set_select_field_new(self.proposer, get_member_select_choices(), item_name='proposer') else: member = get_member(member_id) proposer = member.proposer_id if member.proposer else 0 set_select_field_new(self.proposer, get_member_select_choices(), default_selection=proposer, item_name='proposer') player = member.player contact = member.contact state = player.state_as_of(datetime.date.today()) set_select_field_new(self.status, MemberStatus.choices(), default_selection=member.status) self.status_return.data = member.status.value self.first_name.data = player.first_name self.last_name.data = player.last_name self.name_return.data = self.first_name.data + ' ' + self.last_name.data self.email.data = contact.email self.address.data = contact.address self.post_code.data = contact.post_code self.phone.data = contact.phone self.accepted_date.data = member.accepted or datetime.date( 1992, 6, 17) self.handicap_return.data = self.handicap.data = state.handicap self.as_of.data = state.date role = member.user.roles[-1].role if member.user else UserRole.user set_select_field_new(self.access, UserRole.choices(), default_selection=role)
def id_is_current_user(current_user, id): if current_user.role in UserRole.admin_access(): return True return current_user.id == id
def user_ok_to_view_member(current_user, member_number): if current_user.role in UserRole.admin_access(): return True return current_user.member_id == member_number
def has_write_access(self): return self.role in UserRole.write_access()
def access_limit(self): if self.role in UserRole.lapsed_access('all'): return 100 if self.role in UserRole.lapsed_access('any'): return MemberStatus.lapsed.value return MemberStatus.current.value
def has_lapsed_access(self, type='any'): return self.role in UserRole.lapsed_access(type)
class MemberDetailsForm(FlaskForm): full_name = StringField(label='Full Name') return_url = HiddenField(label='Return URL') member_number = HiddenField(label='Member Number') dt_number = StringField(label='Id') status = MySelectField(label='Status', choices=MemberStatus.choices(), coerce=MemberStatus.coerce) type = MySelectField(label='Type', choices=MembershipType.choices(), coerce=MembershipType.coerce) start_date = DateField(label='Start') end_date = DateField(label='End') birth_date = DateField(label='DoB', validators=[Optional()]) age = HiddenField(label='Age') last_updated = StringField(label='Updated') access = MySelectField(label='Access', choices=UserRole.choices(blank=False, ), coerce=UserRole.coerce) fan_id = StringField(label='AFCW Fan ID') external_access = MySelectField(label='External access', choices=ExternalAccess.choices(), coerce=ExternalAccess.coerce) payment_method = MySelectField(label='Pay method', choices=PaymentMethod.choices(blank=True), coerce=PaymentMethod.coerce) title = MySelectField(label='Title', choices=Title.choices(blank=True), coerce=Title.coerce) first_name = StringField(label='First', validators=[InputRequired()]) last_name = StringField(label='Last', validators=[InputRequired()]) sex = MySelectField(label='Sex', choices=Sex.choices(blank=True), coerce=int) line1 = StringField(label='Address line 1') line2 = StringField(label='Address line 2') line3 = StringField(label='Address line 3') city = StringField(label='City') state = MySelectField(label='State', choices=state_choices(blank=True), coerce=int) post_code = StringField(label='Post Code') county = MySelectField(label='County', choices=county_choices(blank=True), coerce=int) country = MySelectField(label='Country', choices=country_choices(), coerce=int) home_phone = StringField(label='Home Phone') mobile_phone = StringField(label='Mobile') email = StringField( label='Email ', validators=[Optional(), Email("Invalid email address")]) comms = MySelectField(label='Comms ', choices=CommsType.choices(), coerce=CommsType.coerce) comms_status = MySelectField(label='Status ', choices=CommsStatus.choices(), coerce=CommsStatus.coerce) submit = SubmitField(label='Save') payment_list = FieldList(FormField(PaymentItemForm)) action_list = FieldList(FormField(ActionItemForm)) comment_list = FieldList(FormField(CommentItemForm)) jd_email = StringField( label='JD Email ', validators=[Optional(), Email("Invalid email address")]) jd_gift = MySelectField(label='JD Gift', choices=JuniorGift.choices(blank=True), coerce=JuniorGift.coerce) def populate_member(self, member_number, return_url, copy=False): self.return_url.data = return_url new_member = member_number == 0 if new_member or copy: member = get_new_member() else: member = get_member(member_number) if copy: base_member = get_member(member_number) new_member = True member.last_name = base_member.last_name member.address = base_member.address member.home_phone = base_member.home_phone member.mobile_phone = base_member.mobile_phone member.email = base_member.email member.comms = base_member.comms address = member.address self.member_number.data = str(member.number) self.dt_number.data = member.dt_number() self.status.data = member.status.value self.type.data = member.member_type.value self.start_date.data = member.start_date self.end_date.data = member.end_date self.birth_date.data = member.birth_date self.age.data = str(member.age()) if member.age() is not None else None self.last_updated.data = fmt_date(member.last_updated) self.access.data = member.user.role.value if member.user else 0 self.fan_id.data = member.season_ticket_id if member.season_ticket_id else '' self.external_access.data = (member.external_access or ExternalAccess.none).value self.payment_method.data = member.last_payment_method.value if member.last_payment_method else '' self.full_name.data = member.full_name() self.title.data = member.title.value if member.title else '' self.first_name.data = member.first_name self.last_name.data = member.last_name self.sex.data = member.sex.value if member.sex else '' self.line1.data = address.line_1 self.line2.data = address.line_2 self.line3.data = address.line_3 self.city.data = address.city self.state.data = address.state.id if address.state else 0 self.post_code.data = address.post_code self.county.data = address.county.id if address.county else 0 self.country.data = address.country.id self.home_phone.data = member.home_phone self.mobile_phone.data = member.mobile_phone self.email.data = member.email self.comms.data = member.comms.value self.comms_status.data = member.comms_status.value if member.comms_status else CommsStatus.all_ok for payment in [get_new_payment()] + member.payments: item_form = PaymentItemForm() item_form.date = payment.date item_form.pay_type = payment.type.value ## nb: don't set the data attribute for select fields in a fieldlist! item_form.amount = payment.amount item_form.method = payment.method.value if payment.method else None item_form.comment = payment.comment or '' self.payment_list.append_entry(item_form) for action in [get_new_action(new_member)] + member.actions: item_form = ActionItemForm() if action.action: item_form.action = action.action.value if action.status: item_form.status = action.status.value item_form.date = action.date item_form.comment = action.comment or '' self.action_list.append_entry(item_form) for comment in [get_new_comment()] + member.comments: item_form = CommentItemForm() item_form.date = comment.date item_form.comment = comment.comment or '' self.comment_list.append_entry(item_form) if new_member or member.member_type == MembershipType.junior: if not member.junior: member.junior = get_junior() self.jd_email.data = member.junior.email or '' self.jd_gift.data = member.junior.gift.value if member.junior.gift else '' else: self.jd_email = self.jd_gift = None def validate(self): result = True new_member = int(self.member_number.data) == 0 if not super(MemberDetailsForm, self).validate(): return False if new_member: name = self.first_name.data + ' ' + self.last_name.data existing = get_members_by_name(name) if len(existing) > 0: self.first_name.errors.append('{} is already member {}'.format( name, existing[0].dt_number())) result = False return result def save_member(self, member_number): member_details = { 'title': self.title.data, 'first_name': self.first_name.data.strip(), 'last_name': self.last_name.data.strip(), 'sex': self.sex.data, 'member_type': self.type.data, 'status': self.status.data, 'start_date': self.start_date.data, 'end_date': self.end_date.data, 'birth_date': self.birth_date.data, 'access': self.access.data, 'external_access': self.external_access.data, 'fan_id': self.fan_id.data, 'payment_method': self.payment_method.data, 'home_phone': self.home_phone.data.strip(), 'mobile_phone': self.mobile_phone.data.strip(), 'email': self.email.data.strip(), 'comms': self.comms.data, 'comms_status': self.comms_status.data, 'line_1': self.line1.data.strip(), 'line_2': self.line2.data.strip(), 'line_3': self.line3.data.strip(), 'city': self.city.data.strip(), 'state': get_state(self.state.data), 'post_code': self.post_code.data.strip(), 'county': get_county(self.county.data), 'country': get_country(self.country.data), 'payments': [], 'actions': [], 'comments': [] } if self.type.data == MembershipType.junior.value: member_details['jd_mail'] = self.jd_email.data.strip() member_details['jd_gift'] = self.jd_gift.data for payment in self.payment_list.data: if payment['amount']: member_details['payments'].append(payment) for action in self.action_list.data: if action['action'] > 0: member_details['actions'].append(action) for comment in self.comment_list.data: if comment['comment']: member_details['comments'].append(comment) return save_member_details(member_number, member_details)
class MemberDetailsForm(FlaskForm): member_id = HiddenField(label='Member Id') status = SelectField(label='Status', choices=MemberStatus.choices(), coerce=MemberStatus.coerce) first_name = StringField(label='First Name', validators=[InputRequired()]) last_name = StringField(label='last_name', validators=[InputRequired()]) proposer = SelectField(label='Proposer', coerce=int) email = StringField(label='Email', validators=[InputRequired()]) address = StringField(label='Address') post_code = StringField(label='Post Code') phone = StringField(label='Phone') accepted_date = DateField(label='accepted') handicap = StringField(label='Handicap') as_of = DateField(label='as of', validators=[Optional()]) access = SelectField(label='Access', choices=UserRole.choices(), coerce=UserRole.coerce) save = SubmitField(label='Save') member_id_return = HiddenField() name_return = HiddenField() status_return = HiddenField() handicap_return = HiddenField() def validate(self): new_member = self.member_id.data == 0 self.member_id.data = self.member_id_return.data self.proposer.choices = get_member_select_choices() if not super(MemberDetailsForm, self).validate(): return False result = True if new_member: current_members = [ n.full_name().lower() for n in get_current_members_as_players() ] name = self.first_name.data + ' ' + self.last_name.data if name.lower() in current_members: self.first_name.errors.append( '{} is already a member'.format(name)) result = False date = datetime.date.today() current_guests = [ n.full_name().lower() for n in get_players_as_of(date, PlayerStatus.guest) ] if not name.lower() in current_guests: self.first_name.errors.append( '{} has not been a guest'.format(name)) result = False else: player = get_player_by_name(name) self.handicap_return.data = player.handicaps[-1].handicap self.status_return.data = str( player.handicaps[-1].status.value) return result def populate_member(self, member_id): new_member = member_id == 0 if new_member: self.first_name.data = 'new' self.last_name.data = 'member' self.status_return.data = MemberStatus.full_member.value self.handicap_return.data = 0 set_select_field_new(self.proposer, get_member_select_choices(), item_name='proposer') else: member = get_member(member_id) proposer = member.proposer_id if member.proposer else 0 set_select_field_new(self.proposer, get_member_select_choices(), default_selection=proposer, item_name='proposer') player = member.player contact = member.contact state = player.state_as_of(datetime.date.today()) set_select_field_new(self.status, MemberStatus.choices(), default_selection=member.status) self.status_return.data = member.status.value self.first_name.data = player.first_name self.last_name.data = player.last_name self.name_return.data = self.first_name.data + ' ' + self.last_name.data self.email.data = contact.email self.address.data = contact.address self.post_code.data = contact.post_code self.phone.data = contact.phone self.accepted_date.data = member.accepted or datetime.date( 1992, 6, 17) self.handicap_return.data = self.handicap.data = state.handicap self.as_of.data = state.date role = member.user.roles[-1].role if member.user else UserRole.user set_select_field_new(self.access, UserRole.choices(), default_selection=role) def save_member(self, member_id): member = { 'first_name': self.first_name.data, 'last_name': self.last_name.data, 'handicap': float(self.handicap.data or self.handicap_return.data), 'status': self.status.data, 'as_of': self.as_of.data, 'proposer_id': self.proposer.data, 'email': self.email.data, 'address': self.address.data, 'post_code': self.post_code.data, 'phone': self.phone.data, 'accepted': self.accepted_date.data, 'orig_name': self.name_return.data, 'orig_status': int(self.status_return.data), 'orig_handicap': float(self.handicap_return.data), 'access': self.access.data } save_member(member_id, member) return True
def wrapped(*args, **kwargs): if current_user: required_role = UserRole.from_name(role) if current_user.has_access(required_role): return f(*args, **kwargs) abort(401, description='Sorry, you do not have access')