Commit 35ff9419 authored by Gladys Forte's avatar Gladys Forte

Merge branch 'RMSv2' of http://42.61.118.105:7990/scm/rms/api-main-service into gladys-dev2

parents 8c96990b 3c60f154
......@@ -83,7 +83,6 @@ class CurrentUser(APIView):
serializer = serializer(request.user, context=context)
serializer.data['key'] = 'value'
print(request.user)
serialized = serializer.data
return Response(data=serialized,
......
from rest_framework import serializers
from app.entities.models import User
import ast
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
read_only_fields = (
'created', 'createdby', 'modified', 'modifiedby', 'code',
)
from django_filters import rest_framework as filters
from django.db.models import Count
from app.entities.models import User
from django.db.models import Q
class UserFilterSet(filters.FilterSet):
# search = filters.CharFilter(method='search_bar', label='search')
# def search_bar(self, queryset, name, value):
# return queryset.filter(
# Q(username__icontains=value) |
# Q(first_name__icontains=value) |
# Q(last_name__icontains=value))
class Meta:
model = User
fields = '__all__'
from app.entities import enums
from django.db import transaction
from app.helper.decorators import rms, error_safe
from rest_framework import viewsets, status
from rest_framework.response import Response
from django.forms.models import model_to_dict
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters
from django.contrib.auth.hashers import make_password
from app.entities.models import User, EntityLog
from app.applicationlayer.utils import (
CustomPagination, status_message_response, log_save
)
from django_filters.rest_framework import DjangoFilterBackend
from app.applicationlayer.management.account import serializer
from app.applicationlayer.management.account.table_filters import UserFilterSet
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = serializer.UserSerializer
pagination_class = CustomPagination
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = UserFilterSet
ordering_fields = '__all__'
search_fields = ('name',)
# @check.user_type
@rms.user_create
@transaction.atomic
def create(self, request, *args, **kwargs):
password = make_password(request.data['password'])
request.data['password'] = password
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
message = status_message_response(
201, 'success',
'New Users created', serializer.data
)
return Response(
message
)
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
message = status_message_response(
200,
'success',
'list of Users found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
@error_safe
@transaction.atomic
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
new_instance = model_to_dict(instance)
self.perform_destroy(instance)
log_save(
enums.LogEnum.DELETED.value,
enums.LogEntitiesEnum.USER.value,
new_instance['id'],
new_instance,
''
)
return Response(status=status.HTTP_204_NO_CONTENT)
@transaction.atomic
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
old_instance = model_to_dict(instance)
self.perform_update(serializer)
new_instance = serializer.data
log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.USER.value,
new_instance['id'],
old_instance,
new_instance
)
return Response(serializer.data)
......@@ -5,12 +5,12 @@ from django.db.models import Q
class ApplicationFilterSet(filters.FilterSet):
# search = filters.CharFilter(method='search_bar', label='search')
# def search_bar(self, queryset, name, value):
# return queryset.filter(
# Q(username__icontains=value) |
# Q(first_name__icontains=value) |
# Q(last_name__icontains=value))
# search = filters.CharFilter(method='search_bar', label='search')
# def search_bar(self, queryset, name, value):
# return queryset.filter(
# Q(username__icontains=value) |
# Q(first_name__icontains=value) |
# Q(last_name__icontains=value))
class Meta:
model = Application
......
......@@ -4,7 +4,7 @@ from app.helper import decorators
from rest_framework import viewsets, status
from rest_framework.response import Response
from django.forms.models import model_to_dict
from rest_framework.filters import SearchFilter
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters
from app.entities.models import Application, EntityLog
from app.applicationlayer.utils import (
......@@ -19,9 +19,10 @@ class ApplicationViewSet(viewsets.ModelViewSet):
queryset = Application.objects.all()
serializer_class = serializer.ApplicationSerializer
pagination_class = CustomPagination
filter_backends = (DjangoFilterBackend,)
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = ApplicationFilterSet
# search_fields = ('name',)
ordering_fields = '__all__'
search_fields = ('name',)
@transaction.atomic
def create(self, request, *args, **kwargs):
......
......@@ -365,9 +365,6 @@ def next_appover_email(receiver, form_code, delegation, msg, action, code):
email_status = requests.post(EMAIL, data=data)
print(email_status)
print("next_appover 3")
message = f"{sender_name} {msg} ({template_name})"
notif = send_notification(
......
......@@ -3,7 +3,7 @@ from django.db import transaction
from rest_framework import viewsets, status
from rest_framework.response import Response
from django.forms.models import model_to_dict
from rest_framework.filters import SearchFilter
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters
from app.entities.models import Company, EntityLog
from app.applicationlayer.utils import (
......@@ -19,10 +19,12 @@ class CompanyViewSet(viewsets.ModelViewSet):
queryset = Company.objects.all()
serializer_class = serializer.CompanySerializer
pagination_class = CustomPagination
filter_backends = (DjangoFilterBackend, SearchFilter,)
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = CompanyFilterSet
# search_fields = ('name',)
ordering_fields = '__all__'
search_fields = ('name',)
@decorators.rms.company_crate
@transaction.atomic
def create(self, request, *args, **kwargs):
......@@ -39,10 +41,12 @@ class CompanyViewSet(viewsets.ModelViewSet):
message
)
# @decorators.rms.company_list
def list(self, request, *args, **kwargs):
print(self.queryset)
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
print(self.queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
......
......@@ -3,7 +3,7 @@ from django.db import transaction
from rest_framework import viewsets, status
from rest_framework.response import Response
from django.forms.models import model_to_dict
from rest_framework.filters import SearchFilter
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters
from app.entities.models import Department, EntityLog
from app.applicationlayer.utils import (
......@@ -19,10 +19,12 @@ class DepartmentViewSet(viewsets.ModelViewSet):
queryset = Department.objects.all()
serializer_class = serializer.DepartmentSerializer
pagination_class = CustomPagination
filter_backends = (DjangoFilterBackend, SearchFilter,)
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = DepartmentFilterSet
# search_fields = ('name',)
ordering_fields = '__all__'
search_fields = ('name',)
@decorators.rms.department_crate
@transaction.atomic
def create(self, request, *args, **kwargs):
......@@ -39,6 +41,7 @@ class DepartmentViewSet(viewsets.ModelViewSet):
message
)
# @decorators.rms.department_list
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
......
......@@ -3,7 +3,7 @@ from django.db import transaction
from rest_framework import viewsets, status
from rest_framework.response import Response
from django.forms.models import model_to_dict
from rest_framework.filters import SearchFilter
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters
from app.entities.models import Module, EntityLog
from app.applicationlayer.utils import (
......@@ -14,15 +14,17 @@ from app.applicationlayer.management.module import serializer
from app.applicationlayer.management.module.table_filters import ModuleFilterSet
from app.helper import decorators
from django.db.models import F
from app.helper import decorators
class ModuleViewSet(viewsets.ModelViewSet):
queryset = Module.objects.order_by('parent', 'sort_id')
queryset = Module.objects.order_by('application', 'parent', 'sort_id')
serializer_class = serializer.ModuleSerializer
pagination_class = CustomPagination
filter_backends = (DjangoFilterBackend, SearchFilter,)
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = ModuleFilterSet
# search_fields = ('name',)
ordering_fields = '__all__'
search_fields = ('name',)
@transaction.atomic
def create(self, request, *args, **kwargs):
......@@ -152,6 +154,7 @@ class ModuleViewSet(viewsets.ModelViewSet):
return Response(message)
@decorators.error_safe
@transaction.atomic
def destroy(self, request, *args, **kwargs):
......
......@@ -57,7 +57,8 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
'code', 'name',
'username', 'contact_no',
'email', 'department_name',
'doa', 'department_id'
'doa', 'department_id',
'default_app',
)
# exclude = ['password', 'application', 'groups', 'user_permissions']
......@@ -75,10 +76,10 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
app = user.application.all()
list_app = []
for data in app:
if user.user_type == 'USR' and data.name == 'RMS':
if user.user_type.upper() == 'USR' and data.app_code.upper() == 'RMS':
pass
else:
remove = ['Module', 'Company', 'Department', 'Application']
remove = ['Modules', 'Companies', 'Department']
if user.user_type == 'SU':
mod = data.modules.all().values('name')
......@@ -101,8 +102,8 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
# list_mod.append(body)
app_body = {}
app_body['app_code'] = data.app_code
app_body['name'] = data.name
# app_body['modules'] = list_mod
app_body['modules'] = mod
list_app.append(app_body)
return list_app
......
......@@ -2,7 +2,7 @@ import copy
import json
from app.entities import enums
from app.businesslayer import logger
# from app.businesslayer import log_save
from django.forms.models import model_to_dict
from django.shortcuts import render
......@@ -15,7 +15,7 @@ from app.helper import decorators
from rest_framework import viewsets, status
from rest_framework.decorators import action
from app.applicationlayer import table_filters
from app.applicationlayer.management.user import table_filters
from django_filters.rest_framework import DjangoFilterBackend
from app.applicationlayer import paginators
......@@ -49,8 +49,9 @@ class UsersManagementViewSet(viewsets.ModelViewSet):
@decorators.error_safe
def list(self, request, *args, **kwargs):
print(request.data['department__name'])
self.serializer_class = serializers.UserManagementRetreiveSerializer
self.queryset = QuerySetHelper.Sort(self)
# self.queryset = QuerySetHelper.Sort(self)
return super(UsersManagementViewSet, self).list(request)
@decorators.error_safe
......@@ -75,7 +76,7 @@ class UsersManagementViewSet(viewsets.ModelViewSet):
createdUser.save()
# LOG ADD
logger.log_save(
log_save.log_save(
enums.LogEnum.ADD.value,
enums.LogEntitiesEnum.USER.value,
model_to_dict(createdUser))
......@@ -90,7 +91,7 @@ class UsersManagementViewSet(viewsets.ModelViewSet):
fromObj = copy.copy(serializer.instance)
serializer.save()
toObj = copy.copy(serializer.instance)
logger.log_save(
log_save.log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.USER.value,
model_to_dict(fromObj),
......@@ -142,7 +143,7 @@ class UsersManagementViewSet(viewsets.ModelViewSet):
fromObj = copy.copy(existingUser)
existingUser.save()
toObj = copy.copy(existingUser)
logger.log_save(
log_save.log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.ROBOT.value,
model_to_dict(fromObj),
......@@ -180,7 +181,7 @@ class UsersManagementViewSet(viewsets.ModelViewSet):
fromObj = copy.copy(existingUser)
existingUser.save()
toObj = copy.copy(existingUser)
logger.log_save(
log_save.log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.ROBOT.value,
model_to_dict(fromObj),
......
from rest_framework import serializers
from app.entities.models import Company
class AdminCompanySerializer(serializers.ModelSerializer):
class Meta:
model = Company
fields = '__all__'
from app.helper.decorators import rms
from app.entities.models import Company
from rest_framework import viewsets, status
from rest_framework.response import Response
from django_filters import rest_framework as filters
from django_filters.rest_framework import DjangoFilterBackend
from app.applicationlayer.management.company import serializer
from rest_framework.filters import SearchFilter, OrderingFilter
from app.applicationlayer.master.company.serializer import AdminCompanySerializer
from app.applicationlayer.utils import CustomPagination, status_message_response
from app.applicationlayer.management.company.table_filters import CompanyFilterSet
class AdminCompanyViewSet(viewsets.ModelViewSet):
queryset = Company.objects.all()
serializer_class = AdminCompanySerializer
pagination_class = CustomPagination
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = CompanyFilterSet
ordering_fields = '__all__'
search_fields = ('name',)
http_method_names = ['get']
@rms.company_list
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
message = status_message_response(
200,
'success',
'list of Company found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
from rest_framework import serializers
from app.entities.models import Department
class AdminDepartmentSerializer(serializers.ModelSerializer):
class Meta:
model = Department
fields = '__all__'
read_only_fields = (
'created', 'createdby', 'modified', 'modifiedby', 'code',
)
from rest_framework import viewsets, status
from rest_framework.response import Response
from django.forms.models import model_to_dict
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters
from app.entities.models import Department
from app.applicationlayer.utils import (
CustomPagination, status_message_response
)
from django_filters.rest_framework import DjangoFilterBackend
from app.applicationlayer.master.department import serializer
from app.applicationlayer.management.department.table_filters import DepartmentFilterSet
from app.helper.decorators import rms
class AdminDepartmentViewSet(viewsets.ModelViewSet):
queryset = Department.objects.all()
serializer_class = serializer.AdminDepartmentSerializer
pagination_class = CustomPagination
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = DepartmentFilterSet
ordering_fields = '__all__'
search_fields = ('name',)
@rms.department_list
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
message = status_message_response(
200,
'success',
'list of Department found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
from django.urls import path, include
from rest_framework import routers
from django.conf.urls import url
from app.applicationlayer.master.company.views import AdminCompanyViewSet
from app.applicationlayer.master.department.views import AdminDepartmentViewSet
from app.applicationlayer.master.user_type.views import UserTypeViewSet
router = routers.DefaultRouter()
router.register(r'companies', AdminCompanyViewSet)
router.register(r'departments', AdminDepartmentViewSet)
# router.register(r'user-types', UserTypeViewSet)
urlpatterns = [
path('', include(router.urls)),
url(r'^user-types/$', UserTypeViewSet.as_view(), name="user-types"),
]
\ No newline at end of file
from rest_framework.views import APIView
from rest_framework.response import Response
from app.entities import enums
class UserTypeViewSet(APIView):
def get(self, request, format=None):
enums_super = enums.UserTypeEnum.SUPER_USER.value
enums_OUA = enums.UserTypeEnum.OVERALL_USER_ADMIN.value
enums_company = enums.UserTypeEnum.COMPANY_USER_ADMIN.value
enums_department = enums.UserTypeEnum.DEPARTMENT_USER_ADMIN.value
enums_user = enums.UserTypeEnum.USER.value
data = {
"code": "200",
"status": "success",
"message": "list of user types",
"results": [
{
'Super user': enums_super,
'Overall user admin': enums_OUA,
"Company user admin": enums_company,
"Department user admin": enums_department,
"user": enums_user
}
]
}
if self.request.user.user_type == enums_OUA:
del data['Super user']
del data['Overall user admin']
elif self.request.user.user_type == enums_company:
del data['Super user']
del data['Overall user admin']
del data['Company user admin']
elif self.request.user.user_type == enums_department:
del data['Super User']
del data['Overall user admin']
del data['Company user admin']
del data['Department user admin']
return Response(data)
from django.urls import path, include
from rest_framework import routers
from django.conf.urls import url
from app.applicationlayer.management.application.views import ApplicationViewSet
from app.applicationlayer.management.company.views import CompanyViewSet
from app.applicationlayer.management.department.views import DepartmentViewSet
from app.applicationlayer.management.module.views import ModuleViewSet
# from app.applicationlayer.management.user.views import UsersManagementViewSet
from app.applicationlayer.management.account.views import UserViewSet
from app.businesslayer.company.views import AdminCompanyViewSet
from app.applicationlayer.management.notification.views import NotificationsViewset
from app.applicationlayer.management.changerequest import views as crviews
......@@ -15,7 +19,8 @@ router.register(r'applications', ApplicationViewSet)
router.register(r'companies', CompanyViewSet)
router.register(r'departments', DepartmentViewSet)
router.register(r'modules', ModuleViewSet)
# router.register(r'users', UsersManagementViewSet)
router.register(r'users', UserViewSet)
router.register(r'notifications', NotificationsViewset)
router.register(r'template', crviews.ChangeRequestTemplatesViewset)
......@@ -33,7 +38,6 @@ router.register(r'form', crviews.ChangeRequestFormsViewset)
urlpatterns = (
path('', include(router.urls)),
path('template-post/', crviews.ChangeRequestTemplatePost.as_view()),
path('form-post/', crviews.ChangeRequestFormPost.as_view()),
)
from rest_framework import serializers
from app.entities.models import Company
class AdminCompanySerializer(serializers.ModelSerializer):
class Meta:
model = Company
fields = '__all__'
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters
from app.entities.models import Company
from rest_framework import viewsets, status
from app.businesslayer.company.serializer import AdminCompanySerializer
from app.applicationlayer.utils import CustomPagination, status_message_response
from django_filters.rest_framework import DjangoFilterBackend
from app.applicationlayer.management.company import serializer
from app.applicationlayer.management.company.table_filters import CompanyFilterSet
from app.helper.decorators import rms
from rest_framework.response import Response
class AdminCompanyViewSet(viewsets.ModelViewSet):
queryset = Company.objects.all()
serializer_class = AdminCompanySerializer
pagination_class = CustomPagination
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = CompanyFilterSet
ordering_fields = '__all__'
search_fields = ('name',)
http_method_names = ['get']
@rms.company_list
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
message = status_message_response(
200,
'success',
'list of Company found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
from rest_framework import serializers
from app.entities.models import Department
class AdminDepartmentSerializer(serializers.ModelSerializer):
class Meta:
model = Department
fields = '__all__'
read_only_fields = (
'created', 'createdby', 'modified', 'modifiedby', 'code',
)
from django_filters import rest_framework as filters
from django.db.models import Count
from app.entities.models import Department
from django.db.models import Q
class AdminDepartmentFilterSet(filters.FilterSet):
# search = filters.CharFilter(method='search_bar', label='search')
# def search_bar(self, queryset, name, value):
# return queryset.filter(
# Q(username__icontains=value) |
# Q(first_name__icontains=value) |
# Q(last_name__icontains=value))
class Meta:
model = Department
fields = '__all__'
from rest_framework import viewsets, status
from rest_framework.response import Response
from django.forms.models import model_to_dict
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters
from app.entities.models import Department
from app.applicationlayer.utils import (
CustomPagination, status_message_response
)
from django_filters.rest_framework import DjangoFilterBackend
from app.businesslayer.department import serializer
from app.businesslayer.department.table_filters import AdminDepartmentFilterSet
from app.helper.decorators import rms
class AdminDepartmentViewSet(viewsets.ModelViewSet):
queryset = Department.objects.all()
serializer_class = serializer.AdminDepartmentSerializer
pagination_class = CustomPagination
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = AdminDepartmentFilterSet
ordering_fields = '__all__'
search_fields = ('name',)
@rms.department_list
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
message = status_message_response(
200,
'success',
'list of Department found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
from django.urls import path, include
from rest_framework import routers
from django.conf.urls import url
from app.businesslayer.company.views import AdminCompanyViewSet
from app.businesslayer.department.views import AdminDepartmentViewSet
from app.businesslayer.user_type.views import UserTypeViewSet
router = routers.DefaultRouter()
router.register(r'companies', AdminCompanyViewSet)
router.register(r'departments', AdminDepartmentViewSet)
# router.register(r'user-types', UserTypeViewSet)
urlpatterns = [
path('', include(router.urls)),
url(r'^user-types/$', UserTypeViewSet.as_view(), name="user-types"),
]
from rest_framework.views import APIView
from rest_framework.response import Response
from app.entities import enums
class UserTypeViewSet(APIView):
def get(self, request, format=None):
enums_super = enums.UserTypeEnum.SUPER_USER.value
enums_OUA = enums.UserTypeEnum.OVERALL_USER_ADMIN.value
enums_company = enums.UserTypeEnum.COMPANY_USER_ADMIN.value
enums_department = enums.UserTypeEnum.DEPARTMENT_USER_ADMIN.value
enums_user = enums.UserTypeEnum.USER.value
data = {
'Super user': enums_super,
'Overall user admin': enums_OUA,
"Company user admin": enums_company,
"Department user admin": enums_department,
"user": enums_user
}
if self.request.user.user_type == enums_OUA:
del data['Super user']
del data['Overall user admin']
elif self.request.user.user_type == enums_company:
del data['Super user']
del data['Overall user admin']
del data['Company user admin']
elif self.request.user.user_type == enums_department:
del data['Super User']
del data['Overall user admin']
del data['Company user admin']
del data['Department user admin']
return Response(data)
This diff is collapsed.
# Generated by Django 2.2 on 2019-09-03 16:14
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('entities', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Notification',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('code', models.CharField(max_length=255, unique=True)),
('form_header_code', models.CharField(blank=True, max_length=255, null=True)),
('notif_type', models.CharField(choices=[('REMINDER', 'REMINDER'), ('ACTIVITY', 'ACTIVITY'), ('TASK', 'TASK')], default='TASK', max_length=20)),
('message', models.CharField(blank=True, max_length=255, null=True)),
('is_read', models.BooleanField(default=False, null=True)),
('created', models.DateTimeField(auto_now_add=True)),
('modified', models.DateTimeField(auto_now=True)),
('app_code', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='entities.Application', to_field='code')),
('receiver_account_no', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='receiver_account_no', to=settings.AUTH_USER_MODEL, to_field='code')),
('sender_account_no', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='sender_account_no', to=settings.AUTH_USER_MODEL, to_field='code')),
],
options={
'db_table': 'notifications',
},
),
]
# Generated by Django 2.2 on 2019-09-03 17:25
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('entities', '0002_notification'),
]
operations = [
migrations.RenameField(
model_name='notification',
old_name='receiver_account_no',
new_name='account_no',
),
migrations.RenameField(
model_name='notification',
old_name='app_code',
new_name='app',
),
]
This diff is collapsed.
# Generated by Django 2.2 on 2019-09-04 16:35
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('entities', '0004_auto_20190904_1608'),
]
operations = [
migrations.AddField(
model_name='changerequesttemplateapprovers',
name='action',
field=models.CharField(blank=True, max_length=50, null=True),
),
migrations.AddField(
model_name='changerequesttemplateapprovers',
name='date_sent',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name='module',
name='component',
field=models.CharField(blank=True, max_length=255, null=True),
),
]
# Generated by Django 2.2 on 2019-09-04 18:55
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('entities', '0005_auto_20190904_1635'),
]
operations = [
migrations.RemoveField(
model_name='notification',
name='form_header_code',
),
migrations.AddField(
model_name='notification',
name='form_code',
field=models.ForeignKey(default=django.utils.timezone.now, on_delete=django.db.models.deletion.DO_NOTHING, to='entities.ChangeRequestFormHeader', to_field='form_code'),
preserve_default=False,
),
migrations.AlterField(
model_name='changerequestformapprovers',
name='form_code',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='frm_approvers', to='entities.ChangeRequestFormHeader', to_field='form_code'),
),
migrations.AlterField(
model_name='changerequestformattachments',
name='form_code',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='frm_attachments', to='entities.ChangeRequestFormHeader', to_field='form_code'),
),
migrations.AlterField(
model_name='changerequestformdetails',
name='field_idx',
field=models.TextField(max_length=255),
),
migrations.AlterField(
model_name='changerequestformdetails',
name='field_props',
field=models.TextField(max_length=255),
),
migrations.AlterField(
model_name='changerequestformdetails',
name='field_ref',
field=models.TextField(max_length=255),
),
migrations.AlterField(
model_name='changerequestformdetails',
name='field_val',
field=models.TextField(max_length=255),
),
migrations.AlterField(
model_name='changerequestformdetails',
name='form_code',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='frm_details', to='entities.ChangeRequestFormHeader', to_field='form_code'),
),
migrations.AlterField(
model_name='changerequestformstakeholders',
name='form_code',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='frm_stakes', to='entities.ChangeRequestFormHeader', to_field='form_code'),
),
migrations.AlterField(
model_name='changerequesttemplateapprovers',
name='template_no',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='tmp_approvers', to='entities.ChangeRequestTemplateHeader', to_field='template_no'),
),
migrations.AlterField(
model_name='changerequesttemplateattachments',
name='template_no',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='tmp_attachments', to='entities.ChangeRequestTemplateHeader', to_field='template_no'),
),
migrations.AlterField(
model_name='changerequesttemplatedetails',
name='field_idx',
field=models.TextField(max_length=255),
),
migrations.AlterField(
model_name='changerequesttemplatedetails',
name='field_props',
field=models.TextField(max_length=255),
),
migrations.AlterField(
model_name='changerequesttemplatedetails',
name='field_ref',
field=models.TextField(max_length=255),
),
migrations.AlterField(
model_name='changerequesttemplatedetails',
name='field_val',
field=models.TextField(max_length=255),
),
migrations.AlterField(
model_name='changerequesttemplatedetails',
name='template_no',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='tmp_details', to='entities.ChangeRequestTemplateHeader', to_field='template_no'),
),
migrations.AlterField(
model_name='changerequesttemplatestakeholders',
name='template_no',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='tmp_stakes', to='entities.ChangeRequestTemplateHeader', to_field='template_no'),
),
]
# Generated by Django 2.2 on 2019-09-05 15:30
import datetime
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('entities', '0006_auto_20190904_1855'),
]
operations = [
migrations.RemoveField(
model_name='changerequesttemplateapprovers',
name='action',
),
migrations.AddField(
model_name='changerequestformapprovers',
name='action',
field=models.CharField(blank=True, max_length=50, null=True),
),
migrations.AlterField(
model_name='changerequestformheader',
name='created',
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
preserve_default=False,
),
migrations.AlterField(
model_name='changerequesttemplateheader',
name='created',
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2019, 9, 5, 15, 30, 4, 918778)),
preserve_default=False,
),
]
# Generated by Django 2.2 on 2019-09-05 16:02
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('entities', '0007_auto_20190905_1530'),
]
operations = [
migrations.RemoveField(
model_name='changerequesttemplateapprovers',
name='date_sent',
),
migrations.AddField(
model_name='changerequestformapprovers',
name='date_sent',
field=models.DateTimeField(blank=True, null=True),
),
]
# Generated by Django 2.2 on 2019-09-05 16:25
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('entities', '0008_auto_20190905_1602'),
]
operations = [
migrations.RemoveField(
model_name='changerequesttemplatestakeholders',
name='date_added',
),
]
# Generated by Django 2.2 on 2019-09-05 17:35
import datetime
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('entities', '0009_remove_changerequesttemplatestakeholders_date_added'),
]
operations = [
migrations.RenameField(
model_name='changerequestformattachments',
old_name='upload_no',
new_name='file_path',
),
migrations.RenameField(
model_name='changerequesttemplateattachments',
old_name='attachment_no',
new_name='code',
),
migrations.RenameField(
model_name='changerequesttemplateattachments',
old_name='upload_no',
new_name='file_path',
),
migrations.AlterField(
model_name='changerequestformattachments',
name='file_upload',
field=models.FileField(default=datetime.datetime(2019, 9, 5, 17, 35, 1, 41063), upload_to='uploads/'),
preserve_default=False,
),
migrations.AlterField(
model_name='changerequesttemplateattachments',
name='file_upload',
field=models.FileField(default=datetime.datetime(2019, 9, 5, 17, 35, 10, 500537), upload_to='uploads/'),
preserve_default=False,
),
]
# Generated by Django 2.2 on 2019-09-05 17:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('entities', '0010_auto_20190905_1735'),
]
operations = [
migrations.RemoveField(
model_name='changerequestformattachments',
name='file_path',
),
migrations.RemoveField(
model_name='changerequesttemplateattachments',
name='file_path',
),
migrations.AlterField(
model_name='changerequestformattachments',
name='file_upload',
field=models.FileField(blank=True, null=True, upload_to='uploads/'),
),
migrations.AlterField(
model_name='changerequesttemplateattachments',
name='file_upload',
field=models.FileField(blank=True, null=True, upload_to='uploads/'),
),
]
# Generated by Django 2.2 on 2019-09-06 14:29
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('entities', '0011_auto_20190905_1756'),
]
operations = [
migrations.AddField(
model_name='changerequestformapprovers',
name='tmp_approver',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='entities.ChangeRequestTemplateApprovers', to_field='code'),
),
migrations.AddField(
model_name='changerequestformattachments',
name='tmp_attach',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='entities.ChangeRequestTemplateAttachments', to_field='code'),
),
migrations.AddField(
model_name='changerequestformdetails',
name='tmp_detail',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='entities.ChangeRequestTemplateDetails', to_field='code'),
),
migrations.AddField(
model_name='changerequestformstakeholders',
name='tmp_stake',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='entities.ChangeRequestTemplateStakeHolders', to_field='code'),
),
migrations.AlterField(
model_name='changerequestformapprovers',
name='delegation',
field=models.CharField(blank=True, max_length=50, null=True),
),
migrations.AlterField(
model_name='changerequestformapprovers',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL, to_field='code'),
),
migrations.AlterField(
model_name='changerequestformstakeholders',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL, to_field='code'),
),
migrations.AlterField(
model_name='changerequesttemplateapprovers',
name='delegation',
field=models.CharField(blank=True, max_length=50, null=True),
),
migrations.AlterField(
model_name='changerequesttemplateapprovers',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL, to_field='code'),
),
migrations.AlterField(
model_name='changerequesttemplatestakeholders',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL, to_field='code'),
),
]
# Generated by Django 2.2 on 2019-09-08 20:08
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('entities', '0012_auto_20190906_1429'),
]
operations = [
migrations.CreateModel(
name='ChangeRequestHistory',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True)),
('createdby', models.CharField(max_length=255)),
('modified', models.DateTimeField(auto_now=True)),
('modifiedby', models.CharField(max_length=255)),
('action', models.CharField(choices=[('Add', 'Add'), ('Update', 'Update'), ('DELETED', 'DELETED')], default='Add', max_length=50)),
('entity', models.CharField(choices=[('CR_FRM_APPROVER', 'CR_FRM_APPROVER'), ('CR_FRM_ATTACHMENT', 'CR_FRM_ATTACHMENT'), ('CR_FRM_DETAIL', 'CR_FRM_DETAIL'), ('CR_FRM_HEADER', 'CR_FRM_HEADER'), ('CR_FRM_STAKE', 'CR_FRM_STAKE'), ('CR_TMP_APPROVER', 'CR_TMP_APPROVER'), ('CR_TMP_ATTACHMENT', 'CR_TMP_ATTACHMENT'), ('CR_TMP_DETAIL', 'CR_TMP_DETAIL'), ('CR_TMP_HEADER', 'CR_TMP_HEADER'), ('CR_TMP_STAKE', 'CR_TMP_STAKE')], default='CR_FRM_HEADER', max_length=50)),
('row_id', models.IntegerField()),
('fromValue', models.TextField(blank=True, null=True)),
('toValue', models.TextField(blank=True, null=True)),
],
options={
'db_table': 'change_request_history',
},
),
]
# Generated by Django 2.2 on 2019-09-09 14:15
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('entities', '0013_changerequesthistory'),
]
operations = [
migrations.RenameField(
model_name='changerequesthistory',
old_name='row_id',
new_name='form_code',
),
]
......@@ -26,6 +26,7 @@ class Application(AuditClass):
max_length=255
)
name = models.CharField(unique=True, max_length=255)
app_code = models.CharField(max_length=255)
class Meta:
db_table = 'applications'
......@@ -214,6 +215,7 @@ class User(AbstractUser):
# on_delete=models.PROTECT,
# default=1
# )
default_app = models.CharField(blank=True, null=True, max_length=255)
user_type = models.CharField(
choices=[(tag.value, tag.value) for tag in enums.UserTypeEnum],
default=enums.UserTypeEnum.USER.value,
......
from rest_framework.response import Response
from rest_framework import status
import json
from rest_framework.exceptions import ParseError
from functools import wraps
from rest_framework.authtoken.models import Token
from app.entities.models import User, Department, Company
from app.entities import enums
from django.db.models import Q
def error_safe(function):
......@@ -25,3 +31,137 @@ def error_safe(function):
wrap.__doc__ = function.__doc__
wrap.__name__ = function.__name__
return wrap
class rms:
# variables
enums_super = enums.UserTypeEnum.SUPER_USER.value
enums_OUA = enums.UserTypeEnum.OVERALL_USER_ADMIN.value
enums_company = enums.UserTypeEnum.COMPANY_USER_ADMIN.value
enums_department = enums.UserTypeEnum.DEPARTMENT_USER_ADMIN.value
enums_user = enums.UserTypeEnum.USER.value
access_error = "Logged user is not allowed to access this endpoint."
department_error = 'Department should be the same with the logged user'
company_error = 'Company should be the same with the logged user'
def user(self):
return self.request.user
def user_type(self):
return rms.user(self).user_type
# @staticmethod
# def user_delete(function):
# @wraps(function)
# def wrapper(self, request, *args, **kwargs):
# return function(self, request, *args, **kwargs)
# return wrapper
@staticmethod
def user_create(function):
@wraps(function)
def wrapper(self, request, *args, **kwargs):
if rms.user_type(self) == rms.enums_user:
raise ParseError(
rms.access_error
)
elif rms.user_type(self) == rms.enums_department:
print(request.data)
if request.data['department'] != rms.user(self).department.id:
raise ParseError(
rms.department_error
)
elif rms.user_type(self) == rms.enums_company:
user_company = rms.user(self).department.company
request_department = Department.objects.filter(
Q(id=request.data['department']) &
Q(company=user_company)
)
if not request_department:
raise ParseError(rms.company_error)
return function(self, request, *args, **kwargs)
return wrapper
@staticmethod
def company_crate(function):
@wraps(function)
def wrapper(self, request, *args, **kwargs):
if rms.user_type(self) != rms.enums_super:
raise ParseError(
rms.access_error
)
return function(self, request, *args, **kwargs)
return wrapper
@staticmethod
def department_crate(function):
@wraps(function)
def wrapper(self, request, *args, **kwargs):
if rms.user_type(self) == rms.enums_super:
pass
elif rms.user_type(self) != rms.enums_super or rms.user_type(self) != rms.enums_company:
raise ParseError(
rms.access_error
)
return function(self, request, *args, **kwargs)
return wrapper
@staticmethod
def application_crate(function):
@wraps(function)
def wrapper(self, request, *args, **kwargs):
if rms.user_type(self) != rms.enums_super:
raise ParseError(
rms.access_error
)
return function(self, request, *args, **kwargs)
return wrapper
@staticmethod
def company_list(function):
@wraps(function)
def wrapper(self, request, *args, **kwargs):
if rms.user_type(self) == rms.enums_company:
id = rms.user(self).department.company.id
self.queryset = self.queryset.filter(
id=id
)
elif rms.user_type(self) == rms.enums_super:
pass
elif rms.user_type(self) == rms.enums_OUA:
pass
else:
raise ParseError(
rms.access_error
)
return function(self, request, *args, **kwargs)
return wrapper
@staticmethod
def department_list(function):
@wraps(function)
def wrapper(self, request, *args, **kwargs):
if rms.user_type(self) == rms.enums_department:
id = rms.user(self).department.id
self.queryset = self.queryset.filter(
id=id
)
elif rms.user_type(self) == rms.enums_company:
pass
elif rms.user_type(self) == rms.enums_super:
pass
else:
raise ParseError(
rms.access_error
)
return function(self, request, *args, **kwargs)
return wrapper
......@@ -22,12 +22,9 @@ from app.applicationlayer.management.notification import views as notifview
urlpatterns = [
# path('admin/', admin.site.urls),
path('api-auth/', include('rest_framework.urls')),
path('api/v1/auth/', include('app.accesslayer.urls')),
path('api/v1/', include('app.applicationlayer.urls')),
path('api/v1/management/', include('app.applicationlayer.urls')),
path('api/v1/master/', include('app.applicationlayer.master.urls')),
url(r'^chat/$', notifview.index, name='index'),
url(r'^chat/(?P<room_name>[^/]+)/$', notifview.room, name='room'),
]
INSERT INTO `modules` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `parent`, `sort_id`, `application_id`, `component`) VALUES (1, '2019-09-03 14:19:25.504073', '', '2019-09-04 16:48:50.127104', 'admin', 'MODULE-20190904-0000001', 'Application Management', 0, 4, 1, '/rms/application-management');
INSERT INTO `modules` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `parent`, `sort_id`, `application_id`, `component`) VALUES (2, '2019-09-03 14:21:24.286404', '', '2019-09-04 16:49:13.660932', 'admin', 'MODULE-20190904-0000002', 'Company Management', 0, 5, 1, '/rms/company-management');
INSERT INTO `modules` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `parent`, `sort_id`, `application_id`, `component`) VALUES (3, '2019-09-03 14:21:31.402049', '', '2019-09-04 16:49:34.601081', 'admin', 'MODULE-20190904-0000003', 'Department Management', 0, 6, 1, '/rms/department-management');
INSERT INTO `modules` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `parent`, `sort_id`, `application_id`, `component`) VALUES (4, '2019-09-03 14:21:38.762899', '', '2019-09-04 16:49:45.865485', 'admin', 'MODULE-20190904-0000004', 'Module Management', 0, 7, 1, '/rms/department-management');
INSERT INTO `modules` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `parent`, `sort_id`, `application_id`, `component`) VALUES (5, '2019-09-03 14:32:08.507515', '', '2019-09-04 16:50:03.868745', 'admin', 'MODULE-20190904-0000005', 'User Management', 0, 8, 1, '/rms/user-management');
INSERT INTO `modules` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `parent`, `sort_id`, `application_id`, `component`) VALUES (6, '2019-09-03 14:35:50.893193', '', '2019-09-04 16:47:24.621874', 'admin', 'MODULE-20190904-0000006', 'Notification', 0, 1, 2, '/cms/notifications');
INSERT INTO `modules` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `parent`, `sort_id`, `application_id`, `component`) VALUES (7, '2019-09-03 14:35:57.413233', '', '2019-09-04 16:47:58.262216', 'admin', 'MODULE-20190904-0000007', 'Change Request', 0, 2, 2, '/cms/change-request/form');
INSERT INTO `modules` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `parent`, `sort_id`, `application_id`, `component`) VALUES (8, '2019-09-03 14:36:04.452517', '', '2019-09-04 16:48:06.587965', 'admin', 'MODULE-20190904-0000008', 'Change Request Template', 0, 3, 2, '/cms/change-request/template');
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment