diff --git a/.DS_Store b/.DS_Store
index 3ccb36f0..65979269 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/osinaweb/.DS_Store b/osinaweb/.DS_Store
index 770cd965..14d317c3 100644
Binary files a/osinaweb/.DS_Store and b/osinaweb/.DS_Store differ
diff --git a/osinaweb/osinacore/__pycache__/models.cpython-313.pyc b/osinaweb/osinacore/__pycache__/models.cpython-313.pyc
index 82d04c2b..96df60ef 100644
Binary files a/osinaweb/osinacore/__pycache__/models.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/models.cpython-313.pyc differ
diff --git a/osinaweb/osinacore/api/__pycache__/serializers.cpython-313.pyc b/osinaweb/osinacore/api/__pycache__/serializers.cpython-313.pyc
index 701fe287..e625c811 100644
Binary files a/osinaweb/osinacore/api/__pycache__/serializers.cpython-313.pyc and b/osinaweb/osinacore/api/__pycache__/serializers.cpython-313.pyc differ
diff --git a/osinaweb/osinacore/api/__pycache__/urls.cpython-313.pyc b/osinaweb/osinacore/api/__pycache__/urls.cpython-313.pyc
index 4344a9e7..337f462e 100644
Binary files a/osinaweb/osinacore/api/__pycache__/urls.cpython-313.pyc and b/osinaweb/osinacore/api/__pycache__/urls.cpython-313.pyc differ
diff --git a/osinaweb/osinacore/api/__pycache__/views.cpython-313.pyc b/osinaweb/osinacore/api/__pycache__/views.cpython-313.pyc
index 4f8101f9..cb780573 100644
Binary files a/osinaweb/osinacore/api/__pycache__/views.cpython-313.pyc and b/osinaweb/osinacore/api/__pycache__/views.cpython-313.pyc differ
diff --git a/osinaweb/osinacore/api/serializers.py b/osinaweb/osinacore/api/serializers.py
index 17bf5ae4..d7a7357a 100644
--- a/osinaweb/osinacore/api/serializers.py
+++ b/osinaweb/osinacore/api/serializers.py
@@ -2,17 +2,49 @@
from rest_framework import serializers
from osinacore.models import *
-class LoginSerializer(serializers.ModelSerializer):
+
+class BusinessTypeSerializer(serializers.ModelSerializer):
class Meta:
- model = User
- fields = ['email', 'password', 'is_superuser']
+ model = BusinessType
+ fields = "__all__"
+
+class StaffProfileSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = StaffProfile
+ fields = "__all__"
+
+class DepartmentSerializer(serializers.ModelSerializer):
+
+ class Meta:
+ model = Department
+ fields = "__all__"
+
+
+
+class JobPositionSerializer(serializers.ModelSerializer):
+ department = DepartmentSerializer()
+
+ class Meta:
+ model = JobPosition
+ fields = "__all__"
+
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
- fields = ['username', 'email', 'password', 'first_name', 'last_name']
+ fields = "__all__"
class CustomerProfileSerializer(serializers.ModelSerializer):
+ user = UserSerializer()
+ reference_name = serializers.CharField(source='reference.name', read_only=True)
+
class Meta:
model = CustomerProfile
- fields = ['mobile_number']
\ No newline at end of file
+ fields = "__all__"
+
+class StaffProfileSerializer(serializers.ModelSerializer):
+ user = UserSerializer()
+
+ class Meta:
+ model = StaffProfile
+ fields = "__all__"
\ No newline at end of file
diff --git a/osinaweb/osinacore/api/urls.py b/osinaweb/osinacore/api/urls.py
index 05fcd334..8a77cbf4 100644
--- a/osinaweb/osinacore/api/urls.py
+++ b/osinaweb/osinacore/api/urls.py
@@ -1,9 +1,8 @@
from django.urls import path
-from . import views
+from .views import *
urlpatterns = [
- path('login/', views.login_user),
- path('register-device/', views.register_device),
- path('update-device/', views.update_device, name='update_device'),
+ path("users/", UserProfilesAPIView.as_view(), name="users-with-profiles"),
+ path("utilities/", BusinessDataAPIView.as_view(), name="utilities"),
]
\ No newline at end of file
diff --git a/osinaweb/osinacore/api/views.py b/osinaweb/osinacore/api/views.py
index 84556ddf..000fd193 100644
--- a/osinaweb/osinacore/api/views.py
+++ b/osinaweb/osinacore/api/views.py
@@ -1,72 +1,59 @@
+
+
from osinacore.models import *
+from rest_framework.views import APIView
+from rest_framework.response import Response
+from rest_framework import status
+from django.contrib.auth.models import User
from .serializers import *
-from rest_framework.decorators import api_view
-from .utils import *
-import calendar
-from django.contrib.auth.hashers import check_password
-from datetime import datetime
-import datetime as datetime2
-from fcm_django.models import FCMDevice
-
-@api_view(['POST'])
-def login_user(request):
- try:
- username = request.data.get('username')
- password = request.data.get('password')
- if(not password or not username):
- raise ValueError("Missing fields")
- user = User.objects.get(username=username)
- serial = LoginSerializer(user)
- passwordValid = check_password(password, serial.data['password'])
- if passwordValid and StaffProfile.objects.filter(user=user):
- future = datetime.utcnow() + datetime2.timedelta(days=183)
- futuretime = calendar.timegm(future.timetuple())
- encoded_jwt = jwt.encode({"username": username, "exp": futuretime, "is_superuser": serial.data['is_superuser'], "userid":serial.instance.id}, "ibiye4700", algorithm="HS256")
- #encoded_jwt = encoded_jwt.decode('utf-8')
- return successRes(msg={"token": encoded_jwt,"first_name":user.first_name,"last_name":user.last_name,"email":user.email, "id":user.id})
- else:
- raise ValueError("Incorrect password!")
- except User.DoesNotExist:
- return errorRes(msg="User doesn't exist!")
- except ValueError as err:
- return errorRes(msg=str(err))
- except Exception as e:
- print(e)
- return errorRes(msg=str(e))
-
-
-@api_view(['POST'])
-def register_device(request):
- try:
- registration_token = request.data.get('registration_token')
- device_type = request.data.get('device_type')
- # Check if the device already exists
- existing_device = FCMDevice.objects.get(registration_id=registration_token)
- return errorRes(msg='Device already registered')
- except FCMDevice.DoesNotExist:
- # Create a new device
- device = FCMDevice(registration_id=registration_token, type=device_type)
- device.save()
- return successRes(msg="Device registered successfully.")
- except Exception as e:
- return errorRes(str(e))
-
-
-
-@api_view(['POST'])
-def update_device(request):
- try:
- registration_token = request.data.get('registration_token')
- token_data = verify(request.headers.get("Authorization"))
- user_id = token_data['userid']
- user = User.objects.get(id=user_id)
- existing_device = FCMDevice.objects.get(registration_id=registration_token)
- existing_device.user = user
- existing_device.save()
- return successRes(msg='Device updated')
- except FCMDevice.DoesNotExist:
- return errorRes(msg='Device is not registered')
- except TokenError as terr:
- return errorRes(msg=str(terr), status=450)
- except Exception as e:
- return errorRes(str(e))
+
+class UserProfilesAPIView(APIView):
+ def get(self, request):
+ data = []
+
+ users = User.objects.all()
+
+ for user in users:
+ user_data = {
+ "user": UserSerializer(user).data,
+ "customer_profile": None,
+ "staff_profile": None
+ }
+
+ # Check for customer profile
+ customer = CustomerProfile.objects.filter(user=user).first()
+ if customer:
+ user_data["customer_profile"] = CustomerProfileSerializer(customer).data
+
+ # Check for staff profile
+ staff = StaffProfile.objects.filter(user=user).first()
+ if staff:
+ user_data["staff_profile"] = StaffProfileSerializer(staff).data
+
+ data.append(user_data)
+
+ return Response(data, status=status.HTTP_200_OK)
+
+
+def get_all_business_related_data():
+
+ business_types = BusinessType.objects.all()
+ departments = Department.objects.all()
+ job_positions = JobPosition.objects.all()
+
+ business_types_data = BusinessTypeSerializer(business_types, many=True).data
+ departments_data = DepartmentSerializer(departments, many=True).data
+ job_positions_data = JobPositionSerializer(job_positions, many=True).data
+
+ return {
+ 'business_types': business_types_data,
+ 'departments': departments_data,
+ 'job_positions': job_positions_data,
+ }
+
+
+class BusinessDataAPIView(APIView):
+
+ def get(self, request):
+ data = get_all_business_related_data()
+ return Response(data)
\ No newline at end of file
diff --git a/osinaweb/osinacore/models.py b/osinaweb/osinacore/models.py
index 54be5cac..bafdbfad 100644
--- a/osinaweb/osinacore/models.py
+++ b/osinaweb/osinacore/models.py
@@ -16,8 +16,10 @@ from authentication .models import *
class Reference(models.Model):
name = models.CharField(max_length=50)
date = models.DateField()
-
- def __str__(self):
+ @property
+ def display_name(self):
+ if not self.name:
+ return "Not seen yet"
return self.name
diff --git a/osinaweb/osinacore/templates/login.html b/osinaweb/osinacore/templates/login.html
index 43f157b5..cbae32b5 100644
--- a/osinaweb/osinacore/templates/login.html
+++ b/osinaweb/osinacore/templates/login.html
@@ -14,8 +14,6 @@
-
-
@@ -147,5 +145,3 @@