예제 #1
0
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
예제 #2
0
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']
예제 #3
0
 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)
예제 #4
0
def id_is_current_user(current_user, id):
    if current_user.role in UserRole.admin_access():
        return True
    return current_user.id == id
예제 #5
0
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
예제 #6
0
 def has_write_access(self):
     return self.role in UserRole.write_access()
예제 #7
0
 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
예제 #8
0
 def has_lapsed_access(self, type='any'):
     return self.role in UserRole.lapsed_access(type)
예제 #9
0
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)
예제 #10
0
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
예제 #11
0
 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')