[SUCS Devel] [Git][sucs/accountmanager][master] Lots of new features.

Imran Hussain imranh at sucs.org
Sat Mar 9 16:10:12 GMT 2019


Imran Hussain pushed to branch master at sucs / accountmanager


Commits:
014f5b14 by Imran Hussain at 2019-03-09T16:08:56Z
Lots of new features.

* Can send out reminder emails
* debugmode
* can handle people paying for membership in advance
* Start of the actual deletion stuff

- - - - -


1 changed file:

- sucsam.py


Changes:

=====================================
sucsam.py
=====================================
@@ -1,13 +1,102 @@
+debugmode = 1
+
 import os
+import pwd
 import sys
 import readline
 import psycopg2
+import datetime
+import smtplib
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+
+def correctPaidUntilStr():
+	#same logic as suapi stuff
+	# if it's greater than Sept then year+1
+	# if it's less than Spet then year
+	if (month >= 9):
+		paidyear = year +1
+	elif (month < 8):
+		paidyear = year
+	else:
+		print("Something went really wrong")
+		sys.exit(3)
+	return "Sept. " + str(paidyear)
+
+# annoyingly when people have paid until is stored as a string in the DB
+# as something like "Sept. $YEAR"
+# so explode the str on " " cast $year to int and compare to correct year
+def stripFuturePeople(listofpeeps):
+	badpeeps = []
+	for person in listofpeeps:
+		if person[1] == "delete":
+			badpeeps.append(person)
+		else:
+			paidyeararray = person[1].split(' ')
+			if (month >= 9):
+				paidyear = year + 1
+			elif (month < 8):
+				paidyear = year
+			else:
+				print("Something went really wrong")
+				sys.exit(3)
+			if int(paidyeararray[1]) < paidyear:
+				badpeeps.append(person)
+	return badpeeps
+
+# ok this needs explaning
+# in comes a list [('user1', 'Sept. 2015'), ('user2', 'Sept. 2014')]
+# we need to work out what account type it is,
+# select type from members where username=$peep[0]
+# then from that find the right email text file and send
+# easy peasy
+def sendReminderEmail(listofpeeps):
+	for person in listofpeeps:
+		cur = DBconn.cursor()	
+		cur.execute("SELECT * from members WHERE username=%(user)s",{"user" : person[0]})
+		DBdata = cur.fetchall()
+		cur.close()
+
+		username = DBdata[0][1]
+		realname = DBdata[0][2]
+		email = DBdata[0][3]
+		type = DBdata[0][7]
+		adminname = pwd.getpwuid(os.geteuid())[0]
+
+		if os.path.isfile(str(type)+"-email"):
+			file = open(str(type)+"-email","r")
+			data = file.read()
+			file.close()
+			data = data.replace("{$realname}",realname)
+			data = data.replace("{$username}",username)
+			data = data.replace("{$adminname}",adminname)
+			sender = 'staff at sucs.org'
+			if debugmode > 0
+				receiver = 'imranh at sucs.org'
+			else:
+				receiver = email
+			message = MIMEMultipart()
+			message['From'] = sender
+			message['To'] = receiver
+			message['Subject'] = 'Your SUCS account is due for renewal'
+			messageBody = MIMEText(data, 'plain')
+			message.attach(messageBody)
+
+			smtpConn = smtplib.SMTP('localhost')
+			smtpConn.sendmail(sender, receiver, message.as_string())
+			smtpConn.quit()
+			sys.exit(0)
+		else:
+			print("Renewal email template not found!")
+			sys.exit(4)
 
 def mainMenu():
 	print("\nPlease choose an option")
 	print("[h] Diplay some help")
 	print("[qs] View quick stats of all accounts")
 	print("[la] View a list of ALL accounts")
+	print("[r] Renewals & Reminders")
+	print("[d] Delete accounts")
 	print("[q] Quit")
 
 	option = input("Option: ")
@@ -25,6 +114,12 @@ def mainMenu():
 	elif (option == "la"):
 		listUsers()
 		mainMenu()
+	elif (option == "r"):
+		reminderMenu()
+		mainMenu()
+	elif (option == "d"):
+		deleteAccounts()
+		mainMenu()
 	else:
 		mainMenu()
 
@@ -69,7 +164,78 @@ def listUsers():
 	for hon in hons:
 		print(str(hon[0]) + " (" + str(hon[1]) + ")")
 
+def reminderMenu():
+	print("")
+	print("Double check https://sucs.org/Admin/SU that everyone that has paid to renew has been marked as renwed. This tool doesn't do that job yet!")
+	print("")
+	print("1. View a list of accounts that aren't marked as renewed in the DB")
+	print("2. Semd email to all students reminding them to renew")
+	print("0. Return to main menu")
 
+	option = input("Option: ")
+
+	if (option == "1"):
+		for student in studentsBad:
+			print(str(student[0]) + " because the DB says: " + str(student[1]) )
+		for soc in soceitiesBad:
+			print(str(soc[0]) + " because the DB says: " + str(soc[1]) )
+		for ass in associatesBad:
+			print(str(ass[0]) + " because the DB says: " + str(ass[1]) )
+		reminderMenu()
+	if (option == "2"):
+		sendReminderEmail(studentsBad)
+	if (option == "0"):
+		mainMenu()
+	else:
+		reminderMenu()	
+
+def deleteMenu(deleteArray):
+	print("")
+	print("1. View list of accounts to be deleted")
+	print("2. Add/delete users from delete list")
+	print("3. Auto populate list of users to be deleted")
+	print("9. Do the delete")
+	print("0. Go back to main menu")
+	
+	option = input("Option: ")
+
+	if (option == "1"):
+		print("\nThe following users will be deleted: ")
+		for user in deleteArray:
+			print(user)
+		deleteMenu(deleteArray)
+	elif (option == "2"):
+		print("Enter a username to add or remoeve it from the list.")
+		user = input("Username: ")
+		if (user in deleteArray):
+			deleteArray.remove(user)
+			print(str(user) + " won't be deleted.")
+		else:
+			deleteArray.append(user)
+			print(str(user) + " will be deleted.")
+		deleteMenu(deleteArray)
+	elif (option == "3"):
+		for student in studentsBad:
+			print("Adding " + str(student[0]) + " to the list because the DB says: " + str(student[1]) )
+			deleteArray.append(student[0])
+		for soc in societiesBad:
+			print("Adding " + str(soc[0]) + " to the list because the DB says: " + str(soc[1]) )
+			deleteArray.append(soc[0])
+		deleteMenu(deleteArray)
+	elif (option == "9"):
+		print("Nope not yet")
+		deleteMenu(deleteArray)
+	elif (option == "0"):
+		mainMenu()
+	else:
+		deleteMenu(deleteArray)
+
+def deleteAccounts():
+	#list that store usernames to be deleted
+	#gets reset everytime you go into this bit on purpose
+	tobedeleted = []
+
+	deleteMenu(tobedeleted)
 
 ### MAIN ###
 
@@ -77,6 +243,11 @@ if (os.geteuid() == 0):
 	print("Don't run this as root!")
 	sys.exit(1)
 
+# get some date/time info ready
+now = datetime.datetime.now()
+year = now.year
+month = now.month
+
 #This tool was written for python *3* 
 #but doesn't mean we can't support 2 as well :)
 try:
@@ -96,10 +267,13 @@ cur = DBconn.cursor()
 
 cur.execute("SELECT username,paid from members WHERE type=1 ORDER BY paid")
 students = cur.fetchall()
+studentsBad = stripFuturePeople(students)
 cur.execute("SELECT username,paid from members WHERE type=2 ORDER BY paid")
 societies = cur.fetchall()
+societiesBad = stripFuturePeople(societies)
 cur.execute("SELECT username,paid from members WHERE type=5 ORDER BY paid")
 associates = cur.fetchall()
+associatesBad = stripFuturePeople(associates)
 cur.execute("SELECT username,paid from members WHERE type=4 ORDER BY username")
 lifers = cur.fetchall()
 cur.execute("SELECT username,paid from members WHERE type=3 ORDER BY username")



View it on GitLab: https://projects.sucs.org/sucs/accountmanager/commit/014f5b146623f95244976d6a93f8c4f65ec1f43f

-- 
View it on GitLab: https://projects.sucs.org/sucs/accountmanager/commit/014f5b146623f95244976d6a93f8c4f65ec1f43f
You're receiving this email because of your account on projects.sucs.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sucs.org/pipermail/devel/attachments/20190309/78b26e6e/attachment-0001.html>


More information about the Devel mailing list