Skip to content
Merged
15 changes: 15 additions & 0 deletions .github/workflows/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,21 @@ jobs:

- name: Run Tests
run: pytest

- name: Set up SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.ARTIFACT_SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
echo ${{ secrets.ARTIFACT_HOST }} >> ~/.ssh/known_hosts
sudo apt-get install sshpass
- name: Execute remote SSH
run: |
sshpass -p '${{ secrets.SERVER_PASS }}' ssh -v -o StrictHostKeyChecking=no ${{ secrets.SERVERLOGIN }}@${{ secrets.SERVER_ADDR }} <<'ENDSSH'
echo ${{ secrets.SERVER_PASS }} | sudo -S systemctl stop sacsock
echo ${{ secrets.SERVER_PASS }} | sudo -S systemctl start sacsock
ENDSSH

# - name: Use Node.js ${{ matrix.node-version }}
# uses: actions/setup-node@v3
# with:
Expand Down
41 changes: 0 additions & 41 deletions .github/workflows/updateServer.yml

This file was deleted.

17 changes: 1 addition & 16 deletions App/controllers/area.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,6 @@ def get_lockers_in_area(id):
raise("Area does not exist")
return area.getLockersInArea()

def get_area_by_description(description):
areas = Area.query.filter(Area.description.contains(description)).all()
if not areas:
return None
return areas

def get_area_by_description_toJSON(description):
areas = get_area_by_description(description)
if not areas:
return None
return [a.toJSON() for a in areas]


def set_description(id,new_description):
area = get_area_by_id(id)
if not area:
Expand Down Expand Up @@ -91,9 +78,7 @@ def set_longitude(id,new_longitude):
except SQLAlchemyError as e:
db.session.rollback()
raise("Unable to set longitude. Check Error Log for more Details")




def delete_area(id):
area = get_area_by_id(id)
if not area:
Expand Down
10 changes: 7 additions & 3 deletions App/controllers/key.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,29 +66,33 @@ def update_key_id(id,new_key_id):


def update_key_masterkey_id(id,new_id):
from App.controllers import get_masterkey_by_id
key = get_key_by_id(id)
masterkey = get_masterkey_by_id(new_id)

if not key:
if not key or not masterkey:
return None

try:
key.masterkey_id = new_id
db.session.add(key)
db.session.commit()
return Key
return key
except SQLAlchemyError:
db.session.rollback()
return None

def update_key_status(id,new_status):
key = get_key_by_id(id)

if not key:
if not key or new_status is None:
return None

try:
if new_status.upper() in Key_Status.__members__:
key.key_status = Key_Status[new_status.upper()]
else:
return None
db.session.add(key)
db.session.commit()
return key
Expand Down
19 changes: 6 additions & 13 deletions App/controllers/lockers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from App.models.rent import RentStatus as RStatus
from App.models.locker import LockerStatus as Status, LockerTypes
from App.database import db
from App.controllers.area import get_area_by_id,get_area_by_description
from App.controllers.area import get_area_by_id
from App.controllers.key_history import new_keyHistory,getKeyHistory,deactivate
from datetime import datetime
from App.controllers.key import get_key_by_id,new_key as create_key
Expand Down Expand Up @@ -64,18 +64,6 @@ def get_locker_by_area_id_toJSON(id):
return [l.toJSON() for l in lockers]


def get_lockers_by_area_description(description):
area = get_area_by_description(description)

lockers = []

if not area:
return None
for a in area:
lockers = lockers + get_locker_by_area_id_toJSON(a.id)
return lockers


def get_locker_id(id):
locker = db.session.query(Locker,Area,KeyHistory).join(Area,KeyHistory).filter(Locker.locker_code == id,KeyHistory.isActive == Active.ACTIVE).first()
if not locker:
Expand Down Expand Up @@ -155,6 +143,9 @@ def rent_locker(id):

def not_verified(id):
keyH = getKeyHistory(id)
if not keyH:
return None

locker = get_locker_id_locker(keyH.locker_id)

if not locker :
Expand All @@ -173,6 +164,8 @@ def not_verified(id):

def release_locker(id):
keyH = getKeyHistory(id)
if keyH is None:
return None
locker = get_locker_id_locker(keyH.locker_id)
if not locker:
return None
Expand Down
10 changes: 10 additions & 0 deletions App/controllers/masterkey.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ def get_all_masterkeys_no_offset():


def get_masterkey_by_id(id):
if id == '' or id is None:
return None

masterkey = MasterKey.query.filter(MasterKey.masterkey_id.contains(id)).first()

if not masterkey:
Expand All @@ -61,6 +64,9 @@ def get_masterkey_by_id(id):
def update_series(id,new_series):
masterkey = get_masterkey_by_id(id)

if new_series is None or new_series == '':
return None

if not masterkey:
return None

Expand Down Expand Up @@ -103,6 +109,8 @@ def delete_masterkey(id):
return None

def update_masterkey_type(id, new_type):
if new_type is None:
return None
masterkey = get_masterkey_by_id(id)
if not masterkey:
return None
Expand All @@ -118,6 +126,8 @@ def update_masterkey_type(id, new_type):
return None

def search_masterkey(query,offset,size):
if query is None or query == '':
return None
if query.upper() in Key_Type.__members__:
data = db.session.query(MasterKey).filter(or_(MasterKey.key_type == Key_Type[query.upper()],MasterKey.masterkey_id.contains(query),MasterKey.series.contains(query))).all()
else:
Expand Down
17 changes: 1 addition & 16 deletions App/controllers/rent.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ def recal_amount_owed(rent,rentType_id,date_returned,rent_date_from,rent_date_to
timestamp = datetime.now()
semester_period = get_rentType_by_id(rentType_id)
orignal_duration = period_elapsed(semester_period,rent_date_from,rent_date_to)

if date_returned:
date_returned_1 = date_returned
return_duration = period_elapsed(semester_period,rent_date_from,date_returned)
Expand All @@ -84,7 +83,6 @@ def late_fees(type, duration, original_duration):
timestamp = datetime.now()
if not type:
return -1

return (duration - original_duration) * type.price

def cal_fixed_price(rentType_id):
Expand Down Expand Up @@ -195,6 +193,7 @@ def rent_additional_payments(id,monetary_value):
try:
db.session.add(rent)
db.session.commit()
return rent
except:
db.session.rollback()
return None
Expand Down Expand Up @@ -231,20 +230,6 @@ def update_rent(id):
raise("Unable to create rent. Check Error Log for more Details")


def get_overdue_rent_by_student(s_id):
rent = Rent.query.filter(and_(Rent.student_id == s_id,Rent.status == Status.OVERDUE)).first()
if not rent :
return None
rent = update_rent(rent.id)
return rent

def get_owed_rent_by_student(s_id):
rent = Rent.query.filter(and_(Rent.student_id== s_id,Rent.status == Status.OWED)).first()
if not rent :
return None
rent = update_rent(rent.id)
return rent

def get_student_current_rental(s_id):
rent = Rent.query.filter(and_(Rent.student_id == s_id, Rent.status != Status.RETURNED, Rent.status != Status.VERIFIED)).first()

Expand Down
25 changes: 7 additions & 18 deletions App/controllers/rentType.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,29 +36,18 @@ def get_rentType_by_id(id):

return rentType

def get_rentType_daily_period(period_from, period_to):
rentType = RentTypes.query.filter(and_(RentTypes.period_to >= period_to, RentTypes.period_from <= period_from,RentTypes.type == Types.DAILY)).first()

def get_rentType_by_period(period_from, period_to,type):
if type.upper() in Types.__members__:
typeEnum = Types[type.upper()]
else:
raise Exception("Type doesn't exist")
rentType = RentTypes.query.filter(and_(RentTypes.period_to <= period_to, RentTypes.period_from >= period_from,RentTypes.type == typeEnum)).first()
print(rentType)
if not rentType:
return None

return rentType

def get_rentType_period(period_to):
rentType = RentTypes.query.filter_by(period_to = period_to)

if not rentType:
return None

return [r.toJSON() for r in rentType]

def get_rentType_price(price):
rentType = RentTypes.query.filter_by(price = price)

if not rentType:
return None

return [r.toJSON() for r in rentType]

def update_rentType_price(id,new_price):
#first check to see if a rentType exist in rent
Expand Down
34 changes: 9 additions & 25 deletions App/controllers/student.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy import or_, and_
from datetime import datetime
from math import ceil

def add_new_student(s_id, f_name, l_name, faculty,p_no,email):
if get_student_by_id(s_id):
Expand Down Expand Up @@ -104,6 +105,7 @@ def update_student_email(s_id, new_email):
student.email = new_email
db.session.add(student)
db.session.commit()
return student

except SQLAlchemyError as e:
db.session.rollback()
Expand Down Expand Up @@ -136,12 +138,18 @@ def update_student_status(id,status):
student.rentStanding = RentStanding[status.upper()]
db.session.add(student)
db.session.commit()
return student

except SQLAlchemyError as e:
db.session.rollback()
return None

def get_available_student(size,offset):
if size < 1 or type(size) is not int:
size = 6
if offset < 1 or type(offset) is not int:
offset = 1

s_offset = (offset *size) - size

students = Student.query.filter(Student.rentStanding != RentStanding.OVERDUE).limit(size).offset(s_offset)
Expand All @@ -151,7 +159,7 @@ def get_available_student(size,offset):
s_list = []
for s in students:
s_list.append(s.toJSON())
return {"num_pages":len(s_list), "data":s_list}
return {"num_pages":ceil(len(s_list)/size), "data":s_list}

def get_all_students():
students = Student.query.all()
Expand Down Expand Up @@ -221,24 +229,6 @@ def search_student(query,size,offset):

return {"num_pages":num_pages,"data":s_list}

def get_student_by_first_name(query):
student = Student.query.filter_by(first_name = query).all()
if not student:
return None
return [s.toJSON() for s in student]

def get_student_by_last_name(query):
student = Student.query.filter_by(last_name = query).all()
if not student:
return None
return [s.toJSON() for s in student]

def get_student_by_faculty(query):
student = Student.query.filter_by(faculty = query).all()
if not student:
return None
return [s.toJSON() for s in student]

def get_student_current_rental(id):
current_rental = Rent.query.filter(and_(Rent.student_id == id, Rent.status != RStatus.VERIFIED)).first()
if current_rental:
Expand Down Expand Up @@ -271,9 +261,3 @@ def get_rental_student(id,size,offset):
r_list.append(r.toJSON())

return {"num_pages":num_pages,"data":r_list}

def get_all_available_student():
students = Student.query.all()
if not students:
return {}
return [S.toJSON() for S in students]
4 changes: 4 additions & 0 deletions App/controllers/transactionLog.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ def get_num_transactions_page(size):
return int(count/size)

def get_transactions_by_offset(size, offset):
if size < 1 or type(size) is not int:
size = 6
if offset < 1 or type(offset) is not int:
offset = 1
t_offset = (offset * size) - size
transactions = TransactionLog.query.order_by(TransactionLog.id.desc()).limit(size).offset(t_offset)

Expand Down
4 changes: 2 additions & 2 deletions App/default_config.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
SQLALCHEMY_DATABASE_URI = "postgresql://sactest:sactest@db/sacdb"
"sqlite:///temp-database.db"
SQLALCHEMY_DATABASE_URI = "sqlite:///temp-database.db"
"postgresql://sactest:sactest@db/sacdb"
SECRET_KEY = "secret key"
JWT_ACCESS_TOKEN_EXPIRES = 7
ENV = "DEVELOPMENT"
Loading
Loading