Commit fef94e66 authored by John Red Medrano's avatar John Red Medrano

added endpoint for report and report with archived and restore, adjust model...

added endpoint for report and report with archived and restore, adjust model for AMSREPORT and AMSREPORTTYPE alter deleted_at to is_active added new enums AMSREPORT AMSREPORTYPE for entity logs
parent a5e667ea
from app.entities import models
from rest_framework import serializers
from app.applicationlayer.utils import model_to_dict
class AMSReportSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
ret = super().to_representation(instance)
ret['added_by'] = instance.created_by.name
ret['report_type'] = instance.report_type.name
ret['unique_identifier'] = instance.asset_stock.unique_identifier
ret['asset'] = instance.asset_stock.asset.name
ret['asset_type'] = instance.asset_stock.asset.asset_type.name
del ret['asset_stock']
del ret['created_by']
return ret
class Meta:
model = models.AMSReport
fields = '__all__'
\ No newline at end of file
from django_filters import rest_framework as filters
from app.entities.models import AMSReport
class AMSReportFilter(filters.FilterSet):
class Meta:
model = AMSReport
fields = '__all__'
\ No newline at end of file
from app.entities import models
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 rest_framework.filters import SearchFilter, OrderingFilter
from app.applicationlayer.ams.report.table_filters import AMSReportFilter
from app.applicationlayer.ams.report import serializers
from app.applicationlayer.utils import (
CustomPagination, status_message_response
)
from app.helper import decorators
from django.db import transaction
from app.applicationlayer.utils import model_to_dict
from app.applicationlayer.utils import log_save, enums
from django.db import IntegrityError
from rest_framework.decorators import action
class AMSReportViewset(viewsets.ModelViewSet):
queryset = models.AMSReport.objects.all()
serializer_class = serializers.AMSReportSerializer
pagination_class = CustomPagination
lookup_field = "code"
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
ordering_fields = '__all__'
search_fields = (
'code', 'name'
)
@transaction.atomic
def create(self, request, *args, **kwargs):
form = request.data
form['created_by'] = request.user.code
serializer = self.get_serializer(data=form)
# serializer.is_valid(raise_exception=True)
if serializer.is_valid(raise_exception=True):
serializer.save(created_by=self.request.user)
self.perform_create(serializer)
message = status_message_response(
201, 'success',
'New Report created', serializer.data
)
return Response(
message
)
def update(self, request, *args, **kwargs):
try:
partial = kwargs.pop('partial', False)
instance = self.get_object()
form = request.data
form['created_by'] = request.user.code
serializer = self.get_serializer(instance, data=form, 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.AMSReport.value,
old_instance['id'],
old_instance,
new_instance
)
return Response(serializer.data)
except IntegrityError as e:
print(e)
return Response(
{"message": "Cannot delete or update this reocrd it has foreign key constraint to other tables"},
status=status.HTTP_400_BAD_REQUEST
)
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset()).filter(is_active=True)
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 Report found!',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(self.queryset, many=True)
return Response(
serializer.data,
status=status.HTTP_200_OK
)
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)
@transaction.atomic
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
instance.is_active = False
instance.save()
new_instance = model_to_dict(instance)
log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.AMSReport.value,
new_instance['id'],
new_instance,
''
)
return Response(status=status.HTTP_204_NO_CONTENT)
@action(
methods=['GET'], detail=False,
url_path='archived', url_name='archived'
)
def archived(self, request, *args, **kwargs):
self.serializer_class = serializers.AMSReportSerializer
queryset = self.filter_queryset(self.queryset).filter(is_active=False)
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 Archived Report found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(self.queryset, many=True)
return Response(
serializer.data,
status=status.HTTP_200_OK
)
@action(
methods=['PATCH'], detail=True,
url_path='restore', url_name='restore'
)
def restore(self, request, code=None):
instance = self.get_object()
instance.is_active = True
instance.save()
new_instance = model_to_dict(instance)
log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.AMSReport.value,
new_instance['id'],
new_instance,
''
)
return Response(status=status.HTTP_204_NO_CONTENT)
from app.entities import models
from rest_framework import serializers
from app.applicationlayer.utils import model_to_dict
class AMSReportTypeSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
ret = super().to_representation(instance)
ret['added_by'] = instance.created_by.name
return ret
class Meta:
model = models.AMSReportType
fields = '__all__'
\ No newline at end of file
from django_filters import rest_framework as filters
from app.entities.models import AMSReportType
class AMSReportTypeFilter(filters.FilterSet):
class Meta:
model = AMSReportType
fields = '__all__'
\ No newline at end of file
from app.entities import models
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 rest_framework.filters import SearchFilter, OrderingFilter
from app.applicationlayer.ams.report_type.table_filters import AMSReportTypeFilter
from app.applicationlayer.ams.report_type import serializers
from app.applicationlayer.utils import (
CustomPagination, status_message_response
)
from app.helper import decorators
from django.db import transaction
from app.applicationlayer.utils import model_to_dict
from app.applicationlayer.utils import log_save, enums
from django.db import IntegrityError
from rest_framework.decorators import action
class AMSReportTypeViewset(viewsets.ModelViewSet):
queryset = models.AMSReportType.objects.all()
serializer_class = serializers.AMSReportTypeSerializer
pagination_class = CustomPagination
lookup_field = "code"
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
ordering_fields = '__all__'
search_fields = (
'code', 'name'
)
@transaction.atomic
def create(self, request, *args, **kwargs):
form = request.data
form['created_by'] = request.user.code
serializer = self.get_serializer(data=form)
# serializer.is_valid(raise_exception=True)
if serializer.is_valid(raise_exception=True):
serializer.save(created_by=self.request.user)
self.perform_create(serializer)
message = status_message_response(
201, 'success',
'New Report Type created', serializer.data
)
return Response(
message
)
def update(self, request, *args, **kwargs):
try:
partial = kwargs.pop('partial', False)
instance = self.get_object()
form = request.data
form['created_by'] = request.user.code
serializer = self.get_serializer(instance, data=form, 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.AMSReportType.value,
old_instance['id'],
old_instance,
new_instance
)
return Response(serializer.data)
except IntegrityError as e:
print(e)
return Response(
{"message": "Cannot delete or update this reocrd it has foreign key constraint to other tables"},
status=status.HTTP_400_BAD_REQUEST
)
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset()).filter(is_active=True)
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 Report Types found!',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(self.queryset, many=True)
return Response(
serializer.data,
status=status.HTTP_200_OK
)
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)
@transaction.atomic
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
instance.is_active = False
instance.save()
new_instance = model_to_dict(instance)
log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.AMSReportType.value,
new_instance['id'],
new_instance,
''
)
return Response(status=status.HTTP_204_NO_CONTENT)
@action(
methods=['GET'], detail=False,
url_path='archived', url_name='archived'
)
def archived(self, request, *args, **kwargs):
self.serializer_class = serializers.AMSReportTypeSerializer
queryset = self.filter_queryset(self.queryset).filter(is_active=False)
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 Archived Report type found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(self.queryset, many=True)
return Response(
serializer.data,
status=status.HTTP_200_OK
)
@action(
methods=['PATCH'], detail=True,
url_path='restore', url_name='restore'
)
def restore(self, request, code=None):
instance = self.get_object()
instance.is_active = True
instance.save()
new_instance = model_to_dict(instance)
log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.AMSReportType.value,
new_instance['id'],
new_instance,
''
)
return Response(status=status.HTTP_204_NO_CONTENT)
...@@ -9,6 +9,8 @@ from app.applicationlayer.ams.ams_user_type.views import AMSUserTypeViewSet ...@@ -9,6 +9,8 @@ from app.applicationlayer.ams.ams_user_type.views import AMSUserTypeViewSet
from app.applicationlayer.ams.asset_type import views as assettype from app.applicationlayer.ams.asset_type import views as assettype
from app.applicationlayer.ams.asset.views import AMSAssetViewSet from app.applicationlayer.ams.asset.views import AMSAssetViewSet
from app.applicationlayer.ams.asset_stock.views import AMSAssetStockViewSet from app.applicationlayer.ams.asset_stock.views import AMSAssetStockViewSet
from app.applicationlayer.ams.report_type.views import AMSReportTypeViewset
from app.applicationlayer.ams.report.views import AMSReportViewset
router = routers.DefaultRouter() router = routers.DefaultRouter()
...@@ -17,6 +19,8 @@ router.register(r'asset-type', assettype.AssetTypeViewset) ...@@ -17,6 +19,8 @@ router.register(r'asset-type', assettype.AssetTypeViewset)
router.register(r'ams-privilege', amsprivilege.AMSPrivilegeViewSet) router.register(r'ams-privilege', amsprivilege.AMSPrivilegeViewSet)
router.register(r'assets', AMSAssetViewSet) router.register(r'assets', AMSAssetViewSet)
router.register(r'assets-stock-list', AMSAssetStockViewSet) router.register(r'assets-stock-list', AMSAssetStockViewSet)
router.register(r'report-type', AMSReportTypeViewset)
router.register(r'report', AMSReportViewset)
urlpatterns = [ urlpatterns = [
path('', include(router.urls)), path('', include(router.urls)),
......
...@@ -76,6 +76,9 @@ class LogEntitiesEnum(Enum): ...@@ -76,6 +76,9 @@ class LogEntitiesEnum(Enum):
ChangeRequestFormDetails = "ChangeRequestFormDetails" ChangeRequestFormDetails = "ChangeRequestFormDetails"
ChangeRequestSettings = 'ChangeRequestSettings' ChangeRequestSettings = 'ChangeRequestSettings'
AMSReportType = 'AMSReportType'
AMSReport = 'AMSReport'
''' '''
********* *********
CR HISTORY ENUMS CR HISTORY ENUMS
......
# Generated by Django 2.2 on 2020-03-18 11:39
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('entities', '0009_auto_20200317_1203'),
]
operations = [
migrations.RemoveField(
model_name='amsreport',
name='deleted_at',
),
migrations.RemoveField(
model_name='amsreporttype',
name='deleted_at',
),
migrations.AddField(
model_name='amsreport',
name='is_active',
field=models.BooleanField(default=True),
),
migrations.AddField(
model_name='amsreporttype',
name='is_active',
field=models.BooleanField(default=True),
),
migrations.AlterField(
model_name='amsreport',
name='asset_stock',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_to_asset_stock', to='entities.AMSAssetStock', to_field='code'),
),
migrations.AlterField(
model_name='amsreport',
name='report_type',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_to_report_type', to='entities.AMSReportType', to_field='code'),
),
migrations.AlterField(
model_name='amsreporttype',
name='code',
field=models.CharField(default='', max_length=255, unique=True),
),
migrations.AlterField(
model_name='entitylog',
name='entity',
field=models.CharField(choices=[('USER', 'USER'), ('APPLICATION', 'APPLICATION'), ('COMPANY', 'COMPANY'), ('DEPARTMENT', 'DEPARTMENT'), ('MODULE', 'MODULE'), ('DELEGATION', 'DELEGATION'), ('ChangeRequestTemplateHeader', 'ChangeRequestTemplateHeader'), ('ChangeRequestTemplateApprovers', 'ChangeRequestTemplateApprovers'), ('ChangeRequestTemplateStakeHolders', 'ChangeRequestTemplateStakeHolders'), ('ChangeRequestTemplateAttachments', 'ChangeRequestTemplateAttachments'), ('ChangeRequestTemplateDetails', 'ChangeRequestTemplateDetails'), ('ChangeRequestFormHeader', 'ChangeRequestFormHeader'), ('ChangeRequestFormApprovers', 'ChangeRequestFormApprovers'), ('ChangeRequestFormStakeHolders', 'ChangeRequestFormStakeHolders'), ('ChangeRequestFormAttachments', 'ChangeRequestFormAttachments'), ('ChangeRequestFormDetails', 'ChangeRequestFormDetails'), ('ChangeRequestSettings', 'ChangeRequestSettings'), ('AMSReportType', 'AMSReportType'), ('AMSReport', 'AMSReport')], default='Add', max_length=50),
),
]
...@@ -1507,7 +1507,8 @@ class AMSReportType(models.Model): ...@@ -1507,7 +1507,8 @@ class AMSReportType(models.Model):
code = models.CharField( code = models.CharField(
unique=True, unique=True,
max_length=255) max_length=255,
default='')
name = models.CharField( name = models.CharField(
unique=True, unique=True,
max_length=255) max_length=255)
...@@ -1526,7 +1527,7 @@ class AMSReportType(models.Model): ...@@ -1526,7 +1527,7 @@ class AMSReportType(models.Model):
related_name='ams_report_type_created_by' related_name='ams_report_type_created_by'
) )
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
deleted_at = models.DateTimeField(null=True, blank=True) is_active = models.BooleanField(default=True)
class Meta: class Meta:
db_table = 'ams_report_types' db_table = 'ams_report_types'
...@@ -1549,7 +1550,8 @@ class AMSReport(models.Model): ...@@ -1549,7 +1550,8 @@ class AMSReport(models.Model):
code = models.CharField( code = models.CharField(
unique=True, unique=True,
max_length=255) max_length=255,
default='')
name = models.CharField( name = models.CharField(
unique=True, unique=True,
max_length=255) max_length=255)
...@@ -1560,12 +1562,14 @@ class AMSReport(models.Model): ...@@ -1560,12 +1562,14 @@ class AMSReport(models.Model):
report_type = models.ForeignKey( report_type = models.ForeignKey(
AMSReportType, AMSReportType,
on_delete=models.CASCADE, on_delete=models.CASCADE,
to_field='code' to_field='code',
related_name='report_to_report_type'
) )
asset_stock = models.ForeignKey( asset_stock = models.ForeignKey(
AMSAssetStock, AMSAssetStock,
on_delete=models.CASCADE, on_delete=models.CASCADE,
to_field='code' to_field='code',
related_name='report_to_asset_stock'
) )
created_by = models.ForeignKey( created_by = models.ForeignKey(
User, User,
...@@ -1574,7 +1578,7 @@ class AMSReport(models.Model): ...@@ -1574,7 +1578,7 @@ class AMSReport(models.Model):
related_name='ams_report_created_by' related_name='ams_report_created_by'
) )
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
deleted_at = models.DateTimeField(null=True, blank=True) is_active = models.BooleanField(default=True)
class Meta: class Meta:
db_table = 'ams_reports' db_table = 'ams_reports'
......
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