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 @@ - - \ No newline at end of file