Exemplo n.º 1
0
    def populate_member(self, member_number, return_url, upgrade):
        self.return_url.data = return_url
        member = get_member(member_number)
        dues = member.base_dues() + (member.upgrade_dues() if upgrade else 0)
        self.payment_plan.data = self.get_dd_payment_plan(
            PaymentMethod.dd, member, upgrade).value
        self.txtQuestion1.data = member.dt_number()
        self.txtRegularAmount.data = fmt_curr(dues)[1:]

        address = member.address
        self.txtTitle.data = member.title.name if member.title else ''
        self.txtFirstName.data = member.first_name
        self.txtSurname.data = member.last_name

        self.addr1.data = address.line_1
        self.addr2.data = address.line_2
        self.addr3.data = address.line_3
        self.addr4.data = address.county.name if address.county else ''
        self.txtAddressTown.data = address.city
        self.searchPostCode.data = address.post_code
        self.txtPhone.data = member.home_phone
        self.txtMobile.data = member.mobile_phone
        self.txtEmail.data = member.email

        self.arrayvars.data = "dt_number*|*{}*|*amount*|*{}".format(
            member.dt_number(),
            fmt_curr(dues)[1:])

        return ''  # member.renewal_activated()
    def populate_event(self, event_id, member_id):
        event = get_event(event_id)
        self.bookable.data = event.is_bookable()
        self.at_capacity.data = event.at_capacity()
        if self.bookable.data:
            self.title.data = 'Book Event'
        else:
            self.title.data = 'Event Details'
        self.show_bookings.data = len(event.bookings) > 0
        self.event_id.data = event_id
        self.event_type.data = event.type
        self.date.data = encode_date(event.date)
        if event.organiser:
            self.organiser_id.data = event.organiser.id
            self.organiser.data = event.organiser.player.full_name()
        else:
            self.organiser_id.data = 0
        self.event.data = event.trophy.name if event.trophy else event.venue.name
        self.venue.data = event.venue.name
        contact = event.venue.contact or Contact()
        post_code = contact.post_code or ''
        self.venue_address.data = line_break(
            (contact.address or '') + ',' + post_code, [',', '\r', '\n'])
        self.venue_phone.data = contact.phone or ''
        self.map_url.data = 'http://maps.google.co.uk/maps?q={}&title={}&z=12 target="googlemap"' \
            .format(post_code.replace(' ', '+'), event.venue.name)
        self.venue_directions.data = line_break(event.venue.directions or '',
                                                '\n')
        self.schedule.data = line_break([(s.time.strftime('%H:%M ') + s.text)
                                         for s in event.schedule])
        self.member_price.data = event.member_price
        self.guest_price.data = event.guest_price
        self.booking_deadline.data = encode_date(event.booking_end)
        self.notes.data = event.note or ''

        if member_id == 0:
            self.message.data = ''
            return

        booking = get_booking(event_id, member_id)
        if not booking.id:
            booking.member = get_member(member_id)
            booking.playing = True
        self.message.data = self.booking_message(event, booking)
        if event.is_bookable() or booking.id:
            self.attend.data = booking.playing
            self.comment.data = booking.comment
            self.booking_date.data = fmt_date(booking.date)
            self.member_name.data = booking.member.player.full_name()

            count = 1
            for guest in booking.guests + (3 -
                                           len(booking.guests)) * [Guest()]:
                item_form = GuestForm()
                item_form.item_pos = count
                item_form.guest_name = guest.name
                item_form.handicap = guest.handicap
                self.guests.append_entry(item_form)
                count += 1
Exemplo n.º 3
0
 def populate(self, member_id, year):
     self.year.data = year
     self.member_id.data = member_id
     member = get_member(member_id)
     self.member_name.data = member.player.full_name()
     self.player_id.data = member.player_id
     self.inc_bal_url.data = config.url_for_html('reports', str(year - 1),
                                                 'incexp.htm')
Exemplo n.º 4
0
def register_user(member_number, user_name, password, email=None, role=UserRole.member, two_phase=False, activate_url=None):
    user_id = 0
    if user_name and password:
        member = get_member(member_number)
        if member:
            if not member.is_active():
                ok, message, message_type = False, 'Sorry, you are not a current member, please contact [email protected]', 'danger'
            else:
                if not match_string(member.email, email):
                    ok, message, message_type = False, 'Email does not match', 'warning'
                else:
                    user = get_user(user_name=user_name)
                    if user and user.member_id != member.id:
                        ok, message, message_type = False, 'User name already in use', 'warning'
                    else:
                        if role == UserRole.member:
                            ok, message, message_type = member.check_credentials(user_name, password)
                            if not ok:
                                return ok, user_id, message, message_type
                        if not member.user:
                            user = User(user_name=user_name, member_id=member.id)
                        else:
                            user = member.user
                            user.user_name = user_name
                        if not user.check_password(password):
                            ok, message, message_type = True, 'Password updated', 'success'
                        else:
                            if two_phase:
                                token, expires = user.get_token(current_app)
                                send_mail(
                                    to=member.email,
                                    sender='*****@*****.**',
                                    cc=[],
                                    subject='Dons Trust Members - registration',
                                    message=render_template('activate.txt',
                                                              full_url_for=full_url_for,
                                                              member=member,
                                                              token=token,
                                                              expires=expires)
                                )
                                ok, message, message_type = True, 'Activation email sent to {}'.format(member.email), 'success'
                            else:
                                ok, message, message_type = True, 'You are now a registered user', 'success'
                        user.set_password(password)
                        if not user.role:
                            user.role = role
                        # else:
                        #     if not role in [role.role for role in user.roles]:
                        #         user.roles += [Role(role=role)]
                        save_user(user)
                        user_id = user.id
        else:
            ok, message, message_type = False, 'Cannot find your membership', 'danger'
    else:
        ok, message, message_type = False, 'Missing user name/password', 'warning'
    return ok, user_id, message, message_type
Exemplo n.º 5
0
 def publish_minutes(self, member_id):
     minutes = Minutes(self.meeting_type.data, self.meeting_date.data)
     link = self.save_file(self, minutes)
     text = 'Latest {} from {}'.format(
         minutes.full_type(),
         get_member(member_id).player.full_name())
     message = self.message.data
     item = (text, link, 'Show minutes')
     news_day = NewsDay(message=message, items=[item])
     News().publish_news_day(news_day)
     return True
Exemplo n.º 6
0
    def save(self, member_id):
        file = path_join(config.get('locations')['export'], 'b_details.csv')
        # if not file_exists(file):
        #     create_data_file(file, ['member_id', 'name', 'number', 'sort'])
        name = self.account_name.data
        number = self.account_number.data
        sort = self.account_sort.data

        rec = '\r' + ','.join([str(member_id), name, number, sort])
        append_file(file, rec)

        return get_member(member_id)
Exemplo n.º 7
0
 def api_get_member(member_number):
     new_member = member_number == 0
     if new_member:
         member = get_new_member()
     else:
         member = get_member(member_number)
     if member:
         if wants_json_response():
             return jsonify(member.to_dict())
         else:
             return jsonify(member.to_dict())  # html??
     else:
         abort(404)
Exemplo n.º 8
0
 def api_update_member(member_number, payload):
     new_member = member_number == 0
     if new_member:
         member = get_new_member()
     else:
         member = get_member(member_number)
     if member:
         member.from_dict(payload)
         if wants_json_response():
             return jsonify(member.to_dict())
         else:
             return jsonify(member.to_dict())  # html??
     else:
         abort(404)
Exemplo n.º 9
0
 def upload_minutes(self, member_id):
     minutes = Minutes(self.meeting_type.data, self.meeting_date.data)
     link = self.save_file(self, minutes, draft=True)
     # notify committee
     subject = '{} {} - draft minutes for review'.format(
         minutes.full_type(), fmt_date(minutes.date))
     sender = get_member(member_id).contact.email
     message = [
         'The draft minutes are available here:', link, self.message.data
     ]
     to = [m.member.contact.email for m in get_committee()]
     send_mail(to=to,
               sender=sender,
               cc=[],
               subject='WAGS: ' + subject,
               message=message)
     return True
Exemplo n.º 10
0
 def save_member(self, member_number):
     qandas = [(QuestionId.Gender, self.gender.data, self.gender_other.data),
               (QuestionId.GenderIdentify, self.gender_identify.data, None),
               (QuestionId.Disability, self.disability.data, None),
               (QuestionId.DisabilityType, self.disability_type.data, self.disability_type_other.data),
               (QuestionId.Impairment, self.impairment.data, None),
               (QuestionId.MaritalStatus, self.marital_status.data, None),
               (QuestionId.Ethnicity, self.ethnicity.data, self.ethnicity_other.data),
               (QuestionId.SexualOrientation, self.sexual_orientation.data, None),
               (QuestionId.Religion, self.religion.data, self.religion_other.data),
               (QuestionId.EmploymentStatus, self.employment.data, self.employment_other.data)]
     if type(member_number) == int:
         member = get_member(member_number)
     else:
         member = member_number
     update_member_questions(member, qandas)
     return member
Exemplo n.º 11
0
 def populate(form, member_id, edit=False):
     if not edit:
         set_select_field_new(form.choose_member,
                              get_member_select_choices(), None, member_id)
     member = get_member(member_id)
     if member:
         player = member.player
         contact = member.contact
         form.status.data = member.status.name
         form.first_name.data = player.first_name
         form.last_name.data = player.last_name
         form.email.data = contact.email
         form.address.data = contact.address
         form.post_code.data = contact.post_code
         form.phone.data = contact.phone
         form.mugshot.data = url_for_html(
             'pictures', 'mugshots',
             player.full_name().replace(' ', '_') + '.jpg')
Exemplo n.º 12
0
def update_member_season_ticket(rec):
    # rec is line of payments file with keys dt id, afcw id
    message = []
    dt_id = rec['dt id'].strip()
    afcw_id = rec['afcw id'].strip()
    if len(afcw_id) > 0:
        if dt_id[0] in ['D', 'J']:
            number = int(dt_id[4:])
        else:
            number = int(dt_id)
        season_ticket = int(afcw_id)
        member = get_member(number)
        if member:
            member.season_ticket_id = season_ticket
            message += ['Season ticket updated: {}'.format(season_ticket)]
            save_member(member)
        else:
            message += ['Member not found: {}'.format(number)]
    return message
Exemplo n.º 13
0
    def populate_account(self, member_id, year):
        member = get_member(member_id)
        self.title.data = '{} - Account information {}'.format(
            member.player.full_name(), year)
        balance = 0
        account = get_member_account(member.player.full_name(), year)
        for item in account.rows():
            item_form = AccountItemForm()
            item_form.date = fmt_date(parse_date(item['date'], reverse=True))
            item_form.item = item['item']
            debit = parse_float(item['debit'])
            item_form.debit = fmt_curr(debit)
            credit = parse_float(item['credit'])
            item_form.credit = fmt_curr(credit)
            self.items.append_entry(item_form)
            balance += (credit or 0) - (debit or 0)

        self.balance.data = fmt_curr(balance)
        self.negative_balance.data = balance < 0
Exemplo n.º 14
0
 def populate_member(self, member_number, return_url, renewal):
     self.return_url.data = return_url
     self.form_type.data = 'renewal' if renewal else 'details'
     member = get_member(member_number)
     if not member.junior:
         self.parental_consent = None
     self.gender.data = get_answer(member, QuestionId.Gender)
     self.gender_identify.data = get_answer(member, QuestionId.GenderIdentify)
     self.disability.data = get_answer(member, QuestionId.Disability)
     self.disability_type.data = get_answer(member, QuestionId.DisabilityType, single=False)
     self.disability_type_other.data = get_answer(member, QuestionId.DisabilityType, other=True)
     self.impairment.data = get_answer(member, QuestionId.Impairment)
     self.marital_status.data = get_answer(member, QuestionId.MaritalStatus)
     self.ethnicity.data = get_answer(member, QuestionId.Ethnicity)
     self.ethnicity_other.data = get_answer(member, QuestionId.Ethnicity, other=True)
     self.sexual_orientation.data = get_answer(member, QuestionId.SexualOrientation)
     self.religion.data = get_answer(member, QuestionId.Religion)
     self.religion_other.data = get_answer(member, QuestionId.Religion, other=True)
     self.employment.data = get_answer(member, QuestionId.EmploymentStatus)
     self.employment_other.data = get_answer(member, QuestionId.EmploymentStatus, other=True)
Exemplo n.º 15
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)
Exemplo n.º 16
0
def update_member_payment(rec, payment_method, save=True):
    # rec is line of payments file with keys id, date, amount and note
    message = []
    number = int(rec['id'][4:])
    date = parse_date(rec['date'], sep='/', reverse=True)
    amount = float(rec['amount'])
    member = get_member(number)
    pending = first_or_default([
        p for p in member.payments
        if p.type == PaymentType.pending and p.method == payment_method
    ], None)
    payment_comment = 'from payments file'
    if pending:
        comment = ['']
        if pending.amount != amount:
            comment = [
                "Expected amount {}, got {}".format(pending.amount, amount)
            ]
            message += comment
        pending.type = PaymentType.dues
        pending.date = date
        pending.amount = amount
        pending.comment = payment_comment + ' ' + comment[0]
    else:
        dues = first_or_default([
            p for p in member.payments
            if p.type == PaymentType.dues and p.method == payment_method
        ], None)
        if dues and dues.amount == amount and dues.date == date and dues.comment.startswith(
                payment_comment):
            message += ['Payment already processed']
            return message
        else:
            message += ["no pending payment: adding one"]
            pending = Payment(member_id=member.id,
                              date=date,
                              amount=amount,
                              type=PaymentType.dues,
                              method=payment_method,
                              comment=payment_comment)
            member.payments.append(pending)
    action = first_or_default([
        a for a in member.actions
        if a.action == MemberAction.card and a.status == ActionStatus.open
    ], None)
    if not action:
        action = Action(member_id=member.id,
                        date=datetime.date.today(),
                        action=MemberAction.card,
                        status=ActionStatus.open,
                        comment=payment_comment)
        member.actions.append(action)
    upgrade = amount in [20.0, 30.0, 45.0
                         ] and member.status != MemberStatus.plus
    action = first_or_default([
        a for a in member.actions
        if a.action == MemberAction.upgrade and a.status == ActionStatus.open
    ], None)
    if action:
        if upgrade:
            member.status = MemberStatus.plus
            action.status = ActionStatus.closed
        # else:
        #     message += ['expected an upgrade payment, upgrade action removed']
        #     member.actions.remove(action)
    else:
        if upgrade:
            action = Action(member_id=member.id,
                            date=date,
                            action=MemberAction.upgrade,
                            status=ActionStatus.closed,
                            comment=payment_comment)
            member.actions.append(action)
    member.end_date = new_end_date
    member.last_payment_method = payment_method
    if save:
        save_member(member)
    return message
Exemplo n.º 17
0
    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':
            int(self.sex.data),
            'member_type':
            self.type.data,
            'birth_date':
            self.birth_date.data,
            'access':
            int(self.access.data),
            'fan_id':
            self.fan_id.data,
            'home_phone':
            self.home_phone.data.strip(),
            'mobile_phone':
            self.mobile_phone.data.strip(),
            'email':
            self.email.data.strip(),
            'comms':
            self.comms.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),
            'external_access':
            self.external_access(None, self.third_pty_access.data),
            'payment_method':
            self.payment_method.data,
            'comment':
            self.comment.data,
            'upgrade':
            self.upgrade.data
        }
        if self.type.data == MembershipType.junior.value:
            member_details['jd_mail'] = self.jd_email.data.strip()
            member_details['jd_gift'] = self.jd_gift.data
            member_details[
                'parental_consent'] = YesNo.yes if self.parental_consent.data else YesNo.no

        # return key info for save message
        member = get_member(member_number)
        payment_method = PaymentMethod.from_value(self.payment_method.data)
        upgrade = self.upgrade.data
        plus = upgrade or member.status == MemberStatus.plus
        member_type = member.long_membership_type(upgrade=upgrade)
        dues = member.base_dues() + (member.upgrade_dues() if plus else 0)
        if member.is_recent_resume() and not upgrade:
            dues = -1
        renewal_payment = self.get_renewal_payment(payment_method, member,
                                                   upgrade)

        member = save_member_contact_details(member_number, member_details,
                                             self.form_type.data == 'renewal',
                                             False)
        member = DiversityForm.save_member(self, member)
        return payment_method, renewal_payment, dues, member_type, member
Exemplo n.º 18
0
    def populate_member(self, member_number, return_url, renewal):
        self.return_url.data = return_url
        self.form_type.data = 'renewal' if renewal else 'details'
        member = get_member(member_number)
        address = member.address
        self.member_number.data = str(member.number)
        self.recent_new.data = member.is_recent_new()
        self.recent_resume.data = member.is_recent_resume()
        self.payment_required.data = not (
            member.status == MemberStatus.life) and not (
                member.status == MemberStatus.plus and member.is_recent_new()
                or member.is_recent_resume())
        if member.last_payment_method:
            prev = member.last_payment_method.value
        else:
            prev = member.last_payment()
            if prev and prev.method:
                prev = prev.method.value
            else:
                prev = 0
        self.current_payment_method.data = prev
        self.dt_number.data = member.dt_number()
        self.access.data = member.user.role.value if member.user else 0
        self.status.data = member.status.name
        self.plus.data = ' (Dons Trust Plus)' if member.status == MemberStatus.plus else ''
        self.type.data = member.member_type_at_renewal().value

        self.start_date.data = fmt_date(member.start_date)
        self.birth_date.data = member.birth_date
        self.age.data = str(member.age()) if member.age() is not None else None

        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.last_updated.data = fmt_date(member.last_updated)

        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 0

        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

        if member.member_type_at_renewal() == 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 ''
            self.parental_consent.data = 1 if member.junior.parental_consent else 0
        else:
            self.jd_email = self.jd_gift = None

        self.third_pty_access.data = member.third_pty_access()

        self.payment_method.data = self.current_payment_method.data
        previous = member.previous_renewal_payment()
        self.previous_payment_method.data = previous.value if previous else 0

        self.upgrade.data = member.last_action() and member.last_action(
        ).action == MemberAction.upgrade

        self.notes.data = member.renewal_notes() + member.edit_notes()
        self.notes.data += [
            'This year we are collecting diversity information - please complete this section as well.',
        ]
        self.notes.data += [
            'We are also asking for your AFC Wimbledon Fan ID so please give this if you have one.',
        ]
        DiversityForm.populate_member(self, member_number, return_url, renewal)
        return member.renewal_activated()
Exemplo n.º 19
0
    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
Exemplo n.º 20
0
 def populate(self, member_id, upgrade):
     member = get_member(member_id)
     payment = member.last_payment()
     self.description = member.long_membership_type(upgrade)
     self.dt_number.data = member.dt_number()
     self.amount.data = payment.amount