Commit 15f849b6 authored by Gladys Forte's avatar Gladys Forte

Merge branch 'prod-dev-gladys' into 'feature/RMS.v2.1-AMS'

RMS-PRD-66 - AMS User Privilege Section + DB Schema

See merge request rms/Backend/api-main-service!961
parents 6eedb12e 1fbc31ca
from rest_framework import serializers
from app.entities.models import AMSPrivilege
from app.applicationlayer.utils import model_to_dict
class AMSPrivilegeSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
ret = super().to_representation(instance)
ret['id_number'] = model_to_dict(instance.id_number)
ret['department'] = model_to_dict(instance.department)
ret['company'] = model_to_dict(instance.department.company)
ret['ams_user_type'] = instance.ams_user_type
return ret
class Meta:
model = AMSPrivilege
fields = '__all__'
from django_filters import rest_framework as filters
from app.entities.models import AMSPrivilege
from django.db.models import Q
class AMSPrivilegeFilterSet(filters.FilterSet):
class Meta:
model = AMSPrivilege
fields = '__all__'
from rest_framework import status, viewsets
from rest_framework.response import Response
from app.entities.models import AMSPrivilege
from app.applicationlayer.utils import (CustomPagination,
status_message_response)
from django_filters import rest_framework as filters
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter, OrderingFilter
from app.applicationlayer.ams.ams_privilege.serializer import (
AMSPrivilegeSerializer
)
from app.applicationlayer.ams.ams_privilege.table_filter import (
AMSPrivilegeFilterSet
)
from django.db import transaction
from rest_framework.exceptions import ValidationError
from django.db import IntegrityError
class AMSPrivilegeViewSet(viewsets.ModelViewSet):
queryset = AMSPrivilege.objects.select_related(
'id_number', 'department'
).all()
serializer_class = AMSPrivilegeSerializer
pagination_class = CustomPagination
lookup_field = 'id_number'
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = AMSPrivilegeFilterSet
ordering_fields = '__all__'
search_fields = (
'id_number__code',
'department__code',
'ams_user_type'
)
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 AMS Privilege found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(queryset, many=True)
return Response(
serializer.data,
status=status.HTTP_200_OK
)
@transaction.atomic
def create(self, request, *args, **kwargs):
try:
body_data = request.data['body_data']
id_number = body_data[0]['id_number']
AMSPrivilege.objects.filter(id_number=id_number).delete()
serializer = AMSPrivilegeSerializer(
data=body_data, many=True
)
if serializer.is_valid(raise_exception=True):
serializer.save()
message = {
'code': 201,
'status': 'success',
'message': 'AMS User Privilege successfully saved!',
'results': serializer.data
}
return Response(message, status=status.HTTP_201_CREATED)
except ValidationError as e:
message = {
'code': 400,
'status': 'failed',
'message': str(e),
}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
except IntegrityError as e:
error = 'Adding the same Department under the same Company is not allowed'
message = {
'code': 400,
'status': 'failed',
'message': error,
}
return Response(message,
status=status.HTTP_400_BAD_REQUEST)
except Exception as e:
message = {
'code': 500,
'status': 'failed',
'message': str(e),
}
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
from rest_framework.views import APIView
from rest_framework.response import Response
from app.entities import enums
class AMSUserTypeViewSet(APIView):
def get(self, request, format=None):
manager_value = enums.AMSUserTypeEnum.MANAGER.value
user_client_value = enums.AMSUserTypeEnum.USER_CLIENT.value
support_value = enums.AMSUserTypeEnum.SUPPORT.value
viewer_value = enums.AMSUserTypeEnum.VIEWER.value
manager_key = str(enums.AMSUserTypeEnum.MANAGER.name).capitalize()
user_client_key = str(enums.AMSUserTypeEnum.USER_CLIENT.name).replace('_', '/').title()
support_key = str(enums.AMSUserTypeEnum.SUPPORT.name).capitalize()
viewer_key = str(enums.AMSUserTypeEnum.VIEWER.name).capitalize()
data = {
"code": "200",
"status": "success",
"message": "list of ams user types",
"results":
{
manager_key : manager_value,
user_client_key : user_client_value,
support_key : support_value,
viewer_key : viewer_value
}
}
return Response(data)
\ No newline at end of file
......@@ -4,11 +4,15 @@ from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from app.applicationlayer.ams.asset_group import views as assetgroup
from app.applicationlayer.ams.ams_privilege import views as amsprivilege
from app.applicationlayer.ams.ams_user_type.views import AMSUserTypeViewSet
router = routers.DefaultRouter()
router.register(r'asset-group', assetgroup.AssetGroupViewset)
router.register(r'ams-privilege', amsprivilege.AMSPrivilegeViewSet)
urlpatterns = [
path('', include(router.urls)),
url(r'^ams-user-types/$', AMSUserTypeViewSet.as_view(), name="ams-user-types"),
]
\ No newline at end of file
......@@ -115,3 +115,15 @@ class NotifTypeEnum(Enum):
REMINDER = "REMINDER"
ACTIVITY = "ACTIVITY"
TASK = "TASK"
'''
*********
AMS ENUMS
*********
'''
class AMSUserTypeEnum(Enum):
MANAGER = "MANAGER"
USER_CLIENT = "USER_CLIENT"
SUPPORT = "SUPPORT"
VIEWER = "VIEWER"
# Generated by Django 2.2 on 2020-03-10 14:23
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('entities', '0004_auto_20200309_1843'),
]
operations = [
migrations.CreateModel(
name='AMSPrivilege',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ams_user_type', models.CharField(choices=[('MANAGER', 'MANAGER'), ('USERCLIENT', 'USERCLIENT'), ('SUPPORT', 'SUPPORT'), ('VIEWER', 'VIEWER')], default='MANAGER', max_length=100)),
('created_at', models.DateTimeField(auto_now_add=True)),
('deleted_at', models.DateTimeField(blank=True, null=True)),
('department', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ams_privilege_departments', to='entities.Department', to_field='code')),
('id_number', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ams_privilege_id_number', to=settings.AUTH_USER_MODEL, to_field='code')),
],
options={
'db_table': 'ams_privileges',
'unique_together': {('department', 'id_number')},
},
),
]
......@@ -1200,7 +1200,46 @@ class OverdueTrigger(models.Model):
class Meta:
db_table = 'trigger_overdue'
# comment
class ChangeRequestSettings(models.Model):
code = models.CharField(unique=True, max_length=255)
active_user = models.ForeignKey(
User,
on_delete=models.CASCADE,
to_field='code',
related_name='cms_settings_active_users'
)
behalf_user = models.ForeignKey(
User,
on_delete=models.CASCADE,
to_field='code',
related_name='cms_settings_behalf_users'
)
behalf_approved = models.BooleanField(default=False)
behalf_accepted = models.BooleanField(default=False)
behalf_rejected = models.BooleanField(default=False)
behalf_implemented = models.BooleanField(default=False)
behalf_completed = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
deleted_at = models.DateTimeField(null=True, blank=True)
class Meta:
db_table = 'change_request_settings'
ordering = ['-created']
unique_together = ['active_user', 'behalf_user']
def __str__(self):
return f'{self.code}'
def save(self, *args, **kwargs):
super(ChangeRequestSettings, self).save(*args, **kwargs)
code = number_generator(enums.GenerateCode.CMS_SETTINGS.value, self.id)
if self.code == '':
self.code = code
self.created = datetime.now()
self.save()
"""
**********************
*** AMS TABLES ***
......@@ -1238,41 +1277,29 @@ class AssetGroup(models.Model):
self.save()
class ChangeRequestSettings(models.Model):
code = models.CharField(unique=True, max_length=255)
active_user = models.ForeignKey(
class AMSPrivilege(models.Model):
id_number = models.ForeignKey(
User,
on_delete=models.CASCADE,
to_field='code',
related_name='cms_settings_active_users'
related_name='ams_privilege_id_number'
)
behalf_user = models.ForeignKey(
User,
department = models.ForeignKey(
Department,
on_delete=models.CASCADE,
to_field='code',
related_name='cms_settings_behalf_users'
related_name='ams_privilege_departments',
to_field='code'
)
behalf_approved = models.BooleanField(default=False)
behalf_accepted = models.BooleanField(default=False)
behalf_rejected = models.BooleanField(default=False)
behalf_implemented = models.BooleanField(default=False)
behalf_completed = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
ams_user_type = models.CharField(
choices=[(tag.value, tag.value) for tag in enums.AMSUserTypeEnum],
default=enums.AMSUserTypeEnum.MANAGER.value,
max_length=100
)
created_at = models.DateTimeField(auto_now_add=True)
deleted_at = models.DateTimeField(null=True, blank=True)
class Meta:
db_table = 'change_request_settings'
ordering = ['-created']
unique_together = ['active_user', 'behalf_user']
def __str__(self):
return f'{self.code}'
db_table = 'ams_privileges'
unique_together = ['department', 'id_number']
def save(self, *args, **kwargs):
super(ChangeRequestSettings, self).save(*args, **kwargs)
code = number_generator(enums.GenerateCode.CMS_SETTINGS.value, self.id)
if self.code == '':
self.code = code
self.created = datetime.now()
self.save()
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