Table of Contents

Dismembering members

Unpaid dues

This one is the easiest of the routes. Specified in article 22.

Requirements:

  1. Member is more than 2 months behind on dues.
  2. Send reminder that they are behind on dues.
  3. Pass resolution at board meeting to dismember them.

Articles don't specify a timeline for the steps but they do have to happen in that order (and it's good idea to leave a decent interval between reminder and actually dismembering folks so they can respond to the reminder).

#+BEGIN_SRC python # -*- coding: utf-8 -*-

'This script sends out dismemberment emails, from a csv file with 4 columns: username, real name, email address,last payment yagmail is used in combination with gmail for smtp emailing. '

#importing the Yagmail library import yagmail import csv

##gmail username sender = 'youremailaddress' ##gmail app password password = 'yourpassword'

## reply to email reply_email = '57north-ctte-private@57north.org.uk'

##open csv file and loop through every line, sending emails one at a time. with open('dismemberment.csv') as csv_file:

  csv_reader = csv.reader(csv_file, delimiter=',')
      
  for row in csv_reader:
      lastpayment = row[3]
      username = row[0]
      address = row[2]
      contents = [
  """ Hello from 57North Hacklab.
  
  Dear """ + username + """,
  Our records don't show any payments from you since """ + lastpayment+ """. That is long enough ago that you're on the list of people who can have their membership terminated by the board. We're planning to be going through that list at a board meeting on 5th April 2023.
  If you think there should be payment(s) more recently than that: please get in touch (57north-ctte-private@57north.org.uk) with when and how you paid and we can look into why it didn't get recorded. 
  We don't like terminating memberships so, this has led to the member list having people on it that we know have moved away, and others that we haven't seen for quite a while. It really is time we cleaned this up.
  If you don't want to keep up your membership please let us know at 57north-ctte-private@57north.org.uk
  If you do want to continue being a member: please consider paying or if you are having temporary cashflow concerns, then please do let us know so we can work something out. Our preferred mechanism to receive money is via bank transfer (details in hackhub, or below) or you can give cash to a director. If you won't be able to do that before the Tuesday's open night meeting, but do intend to be back in the near future: get in touch (57north-ctte-private@57north.org.uk), we can possibly be a bit more flexible.
  If you're a bit behind we don't necessarily expect you to pay all of the back dues to avoid having your membership terminated - though if you want to we'll certainly appreciate the money. We are happy to consider you back in "good standing" if you pay for this month and last.
  Thanks,
  The 57North Hacklab Ltd. board of directors.
  Bank transfer details:
  Account name:           57North Hacklab Ltd.
  Account number:	        11 088 091
  Sort code:	        83-15-31
  Payment reference:	""" + username + """
  Payment:                GBP 20.00 monthly on/soon after the 1st of every month
  57North Hacklab Ltd. is a company registered in Scotland (No. SC470230).
  57North and 57North Hacklab are trading names of 57North Hacklab Ltd.
  """

]

      ##initializing the server connection
      yag = yagmail.SMTP(user=sender, password=password)
      ##sending the email
      yag.send(to=address,subject='Hello from 57North Hacklab',bcc='57north-ctte-private@57north.org.uk', contents =contents, headers={"Reply-To":f"{reply_email}"})
      

#+END_SRC

Other Reasons

Article 30 lets the membership expel a member for any reason.

Can only be done at a general meeting.

Notice of resolution to expel them has to be sent to member(s) to be expelled at least 21 days before the meeting, and must specify grounds for expulsion.

Needs a 2/3 majority of those voting at the general meeting.

Member to be expelled gets to be heard on the resolution at the meeting.

Members can be temporarily suspended by the board under article 31.

Change in Hub

To update hub that someone has been dismembered add an entry to the dismembered table with their username, timestamp and reason. Leave date_reset and reason_reset blank, these get filled in to undismember them again.

Example script to dismember a list of members:

#+BEGIN_SRC python
from hackhub import get_db
import time

to_dismember = ["someone", "someoneelse"]
reason = "Dues in arrears"
timestamp = int(time.time())

if __name__=="__main__":
    db = get_db()
    cur = db.cursor()
    for u in to_dismember:
        cur.execute("INSERT INTO dismembered (user, timestamp, reason) VALUES (?, ?, ?)", 
        (u, timestamp, reason))
    db.commit()
    db.close()


#+END_SRC