Commit 5338a671 authored by Gladys Forte's avatar Gladys Forte

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

Feature/rms.v2.1 ams

See merge request rms/Backend/api-main-service!1007
parents 5f350587 e63c7383
...@@ -9,7 +9,9 @@ class AMSAssetSerializer(serializers.ModelSerializer): ...@@ -9,7 +9,9 @@ class AMSAssetSerializer(serializers.ModelSerializer):
ret['asset_type'] = instance.asset_type.name ret['asset_type'] = instance.asset_type.name
ret['in_qty'] = instance.ams_asset_to_assetdetail.filter(status='In-Store').count() ret['in_qty'] = instance.ams_asset_to_assetdetail.filter(status='In-Store').count()
ret['out_qty'] = instance.ams_asset_to_assetdetail.filter(status='Deployed').count() ret['out_qty'] = instance.ams_asset_to_assetdetail.filter(status='Deployed').count()
ret['unavailable'] = instance.ams_asset_to_assetdetail.filter(status='Faulty').count() ret['unavailable'] = instance.ams_asset_to_assetgroup.filter(
status__in=['Faulty', 'Returned', 'Written Off']
).count()
ret['created_by'] = instance.created_by.name ret['created_by'] = instance.created_by.name
return ret return ret
......
...@@ -143,29 +143,44 @@ class AMSAssetViewSet(viewsets.ModelViewSet): ...@@ -143,29 +143,44 @@ class AMSAssetViewSet(viewsets.ModelViewSet):
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
@action( @action(
methods=['PATCH'], detail=True, methods=['PATCH'], detail=True,
url_path='restore', url_name='restore' url_path='restore', url_name='restore'
) )
def restore(self, request, code=None): def restore(self, request, code=None):
instance = self.get_object()
instance.is_active = True
instance.save()
new_instance = model_to_dict(instance)
log_save( try:
enums.LogEnum.UPDATE.value, instance = self.get_object()
enums.LogEntitiesEnum.AMSAsset.value, instance.is_active = True
new_instance['id'], instance.save()
new_instance, new_instance = model_to_dict(instance)
''
)
return Response(status=status.HTTP_204_NO_CONTENT) log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.AMSAsset.value,
new_instance['id'],
new_instance,
''
)
message = status_message_response(
200, 'success',
'Archived Asset restored',
''
)
return Response(message, status=status.HTTP_200_OK)
except Exception as e:
message = status_message_response(
500, 'failed',
'Request was not able to process' + str(e), []
)
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
@action(methods=['GET'], detail=True, @action(methods=['GET'], detail=True,
url_path='stock-list', url_name='stock_list') url_path='stock-list', url_name='stock_list')
def stock_list(self, request, code): def stock_list(self, request, code):
self.serializer_class = AMSAssetStockSerializer self.serializer_class = AMSAssetStockSerializer
queryset = self.get_object().ams_asset_to_assetdetail.all() queryset = self.get_object().ams_asset_to_assetdetail.all()
...@@ -193,8 +208,6 @@ class AMSAssetViewSet(viewsets.ModelViewSet): ...@@ -193,8 +208,6 @@ class AMSAssetViewSet(viewsets.ModelViewSet):
status=status.HTTP_200_OK status=status.HTTP_200_OK
) )
#comment
@action( @action(
methods=['GET'], detail=False, methods=['GET'], detail=False,
url_path='archived', url_name='archived' url_path='archived', url_name='archived'
......
from app.entities import models from app.entities import models
from rest_framework import serializers from rest_framework import serializers
from app.applicationlayer.utils import model_to_dict from app.applicationlayer.utils import model_to_dict
from django.db.models import Q
class AssetGroupSerializerList(serializers.ModelSerializer):
def to_representation(self, instance):
ret = super().to_representation(instance)
asset_stocks = models.AMSAssetStock.objects.filter(asset_group=instance.code)
asset_counter = 0
asset_type_counter = 0
for asset_stock in asset_stocks:
asset_counter = asset_counter + models.AMSAsset.objects.filter(code=asset_stock.asset.code).count()
asset_type_counter = asset_type_counter + 1
ret['asset_type_count'] = asset_type_counter # recheck
ret['asset_count'] = instance.ams_asset_to_assetgroup.count() # recheck
ret['asset_stock_count'] = instance.ams_asset_to_assetgroup.count()
return ret
class Meta:
model = models.AMSAssetGroup
fields = '__all__'
read_only_fields = ['created', 'created_by', 'code']
class AssetGroupSerializer(serializers.ModelSerializer): class AssetGroupSerializer(serializers.ModelSerializer):
...@@ -16,10 +42,23 @@ class AssetGroupSerializer(serializers.ModelSerializer): ...@@ -16,10 +42,23 @@ class AssetGroupSerializer(serializers.ModelSerializer):
asset_counter = asset_counter + models.AMSAsset.objects.filter(code=asset_stock.asset.code).count() asset_counter = asset_counter + models.AMSAsset.objects.filter(code=asset_stock.asset.code).count()
asset_type_counter = asset_type_counter + 1 asset_type_counter = asset_type_counter + 1
ret['asset_type_count'] = asset_type_counter ret['asset_type_count'] = asset_type_counter # recheck
ret['asset_count'] = asset_counter ret['asset_count'] = instance.ams_asset_to_assetgroup.count() # recheck
ret['asset_stock_count'] = instance.ams_asset_to_assetgroup.count() ret['asset_stock_count'] = instance.ams_asset_to_assetgroup.count()
ret['own'] = instance.ams_asset_to_assetgroup.filter(acquisition_type='Owned').count()
ret['loan'] = instance.ams_asset_to_assetgroup.filter(acquisition_type='Loan').count()
ret['in_qty'] = instance.ams_asset_to_assetgroup.filter(status='In-Store').count()
ret['out_qty'] = instance.ams_asset_to_assetgroup.filter(status='Deployed').count()
ret['unavailable'] = instance.ams_asset_to_assetgroup.filter(
status__in=['Faulty', 'Returned', 'Written Off']
).count()
ret['in_store'] = instance.ams_asset_to_assetgroup.filter(status='In-Store').count()
ret['deployed'] = instance.ams_asset_to_assetgroup.filter(status='Deployed').count()
ret['returned'] = instance.ams_asset_to_assetgroup.filter(status='Returned').count()
ret['written_off'] = instance.ams_asset_to_assetgroup.filter(status='Written Off').count()
ret['faulty'] = instance.ams_asset_to_assetgroup.filter(status='Faulty').count()
return ret return ret
class Meta: class Meta:
......
...@@ -6,4 +6,4 @@ class AssetGroupFilter(filters.FilterSet): ...@@ -6,4 +6,4 @@ class AssetGroupFilter(filters.FilterSet):
class Meta: class Meta:
model = AMSAssetGroup model = AMSAssetGroup
fields = '__all__' fields = '__all__'
\ No newline at end of file
...@@ -12,6 +12,8 @@ from app.applicationlayer.utils import ( ...@@ -12,6 +12,8 @@ from app.applicationlayer.utils import (
from app.helper import decorators from app.helper import decorators
from django.db import transaction from django.db import transaction
from rest_framework.decorators import action from rest_framework.decorators import action
from app.applicationlayer.utils import log_save, enums
from app.applicationlayer.utils import model_to_dict
class AssetGroupViewset(viewsets.ModelViewSet): class AssetGroupViewset(viewsets.ModelViewSet):
...@@ -30,8 +32,7 @@ class AssetGroupViewset(viewsets.ModelViewSet): ...@@ -30,8 +32,7 @@ class AssetGroupViewset(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data) serializer = self.get_serializer(data=request.data)
# serializer.is_valid(raise_exception=True)
if serializer.is_valid(raise_exception=True): if serializer.is_valid(raise_exception=True):
serializer.save(created_by=self.request.user) serializer.save(created_by=self.request.user)
...@@ -48,6 +49,7 @@ class AssetGroupViewset(viewsets.ModelViewSet): ...@@ -48,6 +49,7 @@ class AssetGroupViewset(viewsets.ModelViewSet):
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):
self.serializer_class = serializers.AssetGroupSerializerList
queryset = self.filter_queryset(self.get_queryset()) queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset) page = self.paginate_queryset(queryset)
...@@ -80,7 +82,17 @@ class AssetGroupViewset(viewsets.ModelViewSet): ...@@ -80,7 +82,17 @@ class AssetGroupViewset(viewsets.ModelViewSet):
def destroy(self, request, *args, **kwargs): def destroy(self, request, *args, **kwargs):
instance = self.get_object() instance = self.get_object()
self.perform_destroy(instance) instance.is_active = False
instance.save()
new_instance = model_to_dict(instance)
log_save(
enums.LogEnum.DELETED.value,
enums.LogEntitiesEnum.AMSAssetGroup.value,
new_instance['id'],
new_instance,
''
)
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
...@@ -113,3 +125,39 @@ class AssetGroupViewset(viewsets.ModelViewSet): ...@@ -113,3 +125,39 @@ class AssetGroupViewset(viewsets.ModelViewSet):
serializer.data, serializer.data,
status=status.HTTP_200_OK status=status.HTTP_200_OK
) )
@action(
methods=['PATCH'], detail=True,
url_path='restore', url_name='restore'
)
def restore(self, request, code=None):
try:
instance = self.get_object()
instance.is_active = True
instance.save()
new_instance = model_to_dict(instance)
log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.AMSAssetGroup.value,
new_instance['id'],
new_instance,
''
)
message = status_message_response(
200, 'success',
'Archived Asset Group restored',
''
)
return Response(message, status=status.HTTP_200_OK)
except Exception as e:
message = status_message_response(
500, 'failed',
'Request was not able to process' + str(e), []
)
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
...@@ -164,23 +164,38 @@ class AMSAssetStockViewSet(viewsets.ModelViewSet): ...@@ -164,23 +164,38 @@ class AMSAssetStockViewSet(viewsets.ModelViewSet):
status=status.HTTP_200_OK status=status.HTTP_200_OK
) )
@action( @action(
methods=['PATCH'], detail=True, methods=['PATCH'], detail=True,
url_path='restore', url_name='restore' url_path='restore', url_name='restore'
) )
def restore(self, request, code=None): def restore(self, request, code=None):
instance = self.get_object()
instance.is_active = True
instance.save()
new_instance = model_to_dict(instance)
log_save( try:
enums.LogEnum.UPDATE.value, instance = self.get_object()
enums.LogEntitiesEnum.AMSAsset.value, instance.is_active = True
new_instance['id'], instance.save()
new_instance, new_instance = model_to_dict(instance)
''
)
return Response(status=status.HTTP_204_NO_CONTENT) log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.AMSAssetStock.value,
new_instance['id'],
new_instance,
''
)
message = status_message_response(
200, 'success',
'Archived Asset Stock restored',
''
)
return Response(message, status=status.HTTP_200_OK)
except Exception as e:
message = status_message_response(
500, 'failed',
'Request was not able to process' + str(e), []
)
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
...@@ -13,8 +13,8 @@ from app.helper import decorators ...@@ -13,8 +13,8 @@ from app.helper import decorators
from django.db import transaction from django.db import transaction
from rest_framework.decorators import action from rest_framework.decorators import action
from app.applicationlayer.utils import model_to_dict from app.applicationlayer.utils import model_to_dict
from app.applicationlayer.utils import log_save from app.applicationlayer.utils import log_save, enums
from app.entities import enums from app.applicationlayer.utils import model_to_dict
class AssetTypeViewset(viewsets.ModelViewSet): class AssetTypeViewset(viewsets.ModelViewSet):
...@@ -33,16 +33,7 @@ class AssetTypeViewset(viewsets.ModelViewSet): ...@@ -33,16 +33,7 @@ class AssetTypeViewset(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data) serializer = self.get_serializer(data=request.data)
# serializer.is_valid(raise_exception=True)
# if requestor == poc:
# message = {
# 'code': 400,
# 'status': 'failed',
# 'message': 'Cannot assign same user on point of contact and requestor',
# }
# return Response(message, status=status.HTTP_400_BAD_REQUEST)
if serializer.is_valid(raise_exception=True): if serializer.is_valid(raise_exception=True):
serializer.save(created_by=self.request.user) serializer.save(created_by=self.request.user)
self.perform_create(serializer) self.perform_create(serializer)
...@@ -59,17 +50,7 @@ class AssetTypeViewset(viewsets.ModelViewSet): ...@@ -59,17 +50,7 @@ class AssetTypeViewset(viewsets.ModelViewSet):
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset()) queryset = self.filter_queryset(self.get_queryset())
# queryset = models.AMSAssetType.objects.annotate(
# view_count=Sum(
# When(relations_item__has_viewed=True, then=1),
# output_field=IntegerField(),
# ),
# love_count=Sum(
# When(relations_item__has_loved=True, then=1),
# output_field=IntegerField(),
# ),
# )
page = self.paginate_queryset(queryset) page = self.paginate_queryset(queryset)
if page is not None: if page is not None:
...@@ -102,15 +83,15 @@ class AssetTypeViewset(viewsets.ModelViewSet): ...@@ -102,15 +83,15 @@ class AssetTypeViewset(viewsets.ModelViewSet):
instance = self.get_object() instance = self.get_object()
instance.is_active = False instance.is_active = False
instance.save() instance.save()
# new_instance = model_to_dict(instance) new_instance = model_to_dict(instance)
# log_save( log_save(
# enums.LogEnum.DELETED.value, enums.LogEnum.DELETED.value,
# enums.LogEntitiesEnum., enums.LogEntitiesEnum.AMSAssetType.value,
# new_instance['id'], new_instance['id'],
# new_instance, new_instance,
# '' ''
# ) )
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
...@@ -144,15 +125,26 @@ class AssetTypeViewset(viewsets.ModelViewSet): ...@@ -144,15 +125,26 @@ class AssetTypeViewset(viewsets.ModelViewSet):
status=status.HTTP_200_OK status=status.HTTP_200_OK
) )
#restore archived asset_type @action(
def partial_update(self, request, *args, **kwargs): methods=['PATCH'], detail=True,
url_path='restore', url_name='restore'
)
def restore(self, request, code=None):
try: try:
kwargs['partial'] = True instance = self.get_object()
code = self.kwargs['code'] instance.is_active = True
instance = models.AMSAssetType.objects.filter( instance.save()
code=code new_instance = model_to_dict(instance)
log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.AMSAssetType.value,
new_instance['id'],
new_instance,
''
) )
instance.update(is_active=True)
message = status_message_response( message = status_message_response(
200, 'success', 200, 'success',
'Archived Asset Type restored', 'Archived Asset Type restored',
...@@ -160,7 +152,7 @@ class AssetTypeViewset(viewsets.ModelViewSet): ...@@ -160,7 +152,7 @@ class AssetTypeViewset(viewsets.ModelViewSet):
) )
return Response(message, status=status.HTTP_200_OK) return Response(message, status=status.HTTP_200_OK)
except Exception as e: except Exception as e:
message = status_message_response( message = status_message_response(
500, 'failed', 500, 'failed',
......
...@@ -167,17 +167,33 @@ class AMSReportViewset(viewsets.ModelViewSet): ...@@ -167,17 +167,33 @@ class AMSReportViewset(viewsets.ModelViewSet):
url_path='restore', url_name='restore' url_path='restore', url_name='restore'
) )
def restore(self, request, code=None): 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) try:
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,
''
)
message = status_message_response(
200, 'success',
'Archived Report restored',
''
)
return Response(message, status=status.HTTP_200_OK)
except Exception as e:
message = status_message_response(
500, 'failed',
'Request was not able to process' + str(e), []
)
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
...@@ -160,23 +160,38 @@ class AMSReportTypeViewset(viewsets.ModelViewSet): ...@@ -160,23 +160,38 @@ class AMSReportTypeViewset(viewsets.ModelViewSet):
status=status.HTTP_200_OK status=status.HTTP_200_OK
) )
@action( @action(
methods=['PATCH'], detail=True, methods=['PATCH'], detail=True,
url_path='restore', url_name='restore' url_path='restore', url_name='restore'
) )
def restore(self, request, code=None): def restore(self, request, code=None):
instance = self.get_object()
instance.is_active = True
instance.save()
new_instance = model_to_dict(instance)
log_save( try:
enums.LogEnum.UPDATE.value, instance = self.get_object()
enums.LogEntitiesEnum.AMSReportType.value, instance.is_active = True
new_instance['id'], instance.save()
new_instance, new_instance = model_to_dict(instance)
''
)
return Response(status=status.HTTP_204_NO_CONTENT) log_save(
enums.LogEnum.UPDATE.value,
enums.LogEntitiesEnum.AMSReportType.value,
new_instance['id'],
new_instance,
''
)
message = status_message_response(
200, 'success',
'Archived Report Type restored',
''
)
return Response(message, status=status.HTTP_200_OK)
except Exception as e:
message = status_message_response(
500, 'failed',
'Request was not able to process' + str(e), []
)
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
...@@ -1286,7 +1286,6 @@ class AMSAssetGroup(models.Model): ...@@ -1286,7 +1286,6 @@ class AMSAssetGroup(models.Model):
related_name='ams_asset_group_created_by' related_name='ams_asset_group_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) is_active = models.BooleanField(default=True)
class Meta: class Meta:
...@@ -1325,7 +1324,6 @@ class AMSAssetType(models.Model): ...@@ -1325,7 +1324,6 @@ class AMSAssetType(models.Model):
related_name='ams_asset_type_created_by' related_name='ams_asset_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) is_active = models.BooleanField(default=True)
class Meta: class Meta:
...@@ -1360,7 +1358,6 @@ class AMSAsset(models.Model): ...@@ -1360,7 +1358,6 @@ class AMSAsset(models.Model):
to_field='code', to_field='code',
related_name='ams_asset_type' related_name='ams_asset_type'
) )
# asset_type = models.ManyToManyField(AMSAssetType)
description = models.CharField( description = models.CharField(
blank=True, blank=True,
null=True, null=True,
...@@ -1372,7 +1369,6 @@ class AMSAsset(models.Model): ...@@ -1372,7 +1369,6 @@ class AMSAsset(models.Model):
related_name='ams_asset_created_by' related_name='ams_asset_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) is_active = models.BooleanField(default=True)
class Meta: class Meta:
...@@ -1443,7 +1439,6 @@ class AMSAssetStock(models.Model): ...@@ -1443,7 +1439,6 @@ class AMSAssetStock(models.Model):
related_name='ams_asset_to_assetgroup' related_name='ams_asset_to_assetgroup'
) )
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) is_active = models.BooleanField(default=True)
class Meta: class Meta:
...@@ -1489,7 +1484,6 @@ class AMSAssetStockSupport(models.Model): ...@@ -1489,7 +1484,6 @@ class AMSAssetStockSupport(models.Model):
to_field='code' to_field='code'
) )
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) is_active = models.BooleanField(default=True)
class Meta: class Meta:
......
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