Commit 9d701a28 authored by Gladys Forte's avatar Gladys Forte

do not merge

parent 1a61c3d3
......@@ -165,11 +165,12 @@ class ChangeRequestTemplateApproversViewset(meviewsets.ModelViewSet):
queryset = models.ChangeRequestTemplateApprovers.objects.all()
serializer_class = serializers.ChangeRequestTemplateApproversSerializer
pagination_class = paginators.SimplePageNumberPagination
lookup_field = "code"
def list(self, request, *args, **kwargs):
self.queryset = self.queryset.filter(deleted_at=None)
self.queryset = QuerySetHelper.Sort(self)
# self.queryset = QuerySetHelper.Filter(self)
return super(ChangeRequestTemplateApproversViewset, self).list(request)
def retrieve(self, request, *args, **kwargs):
......@@ -178,6 +179,57 @@ class ChangeRequestTemplateApproversViewset(meviewsets.ModelViewSet):
return Response(serializer.data)
class ChangeRequestTemplateAttachmentsViewset(meviewsets.ModelViewSet):
queryset = models.ChangeRequestTemplateAttachments.objects.all()
serializer_class = serializers.ChangeRequestTemplateAttachmentsSerializer
pagination_class = paginators.SimplePageNumberPagination
lookup_field = "code"
def list(self, request, *args, **kwargs):
self.queryset = self.queryset.filter(deleted_at=None)
self.queryset = QuerySetHelper.Sort(self)
return super(
ChangeRequestTemplateAttachmentsViewset, self
).list(request)
class ChangeRequestTemplateStakeHoldersViewset(meviewsets.ModelViewSet):
queryset = models.ChangeRequestTemplateStakeHolders.objects.all()
serializer_class = serializers.ChangeRequestTemplateStakeHoldersSerializer
pagination_class = paginators.SimplePageNumberPagination
def list(self, request, *args, **kwargs):
self.queryset = self.queryset.filter(deleted_at=None)
self.queryset = QuerySetHelper.Sort(self)
# self.queryset = QuerySetHelper.Filter(self)
return super(ChangeRequestTemplateStakeHoldersViewset, self).list(request)
def retrieve(self, request, *args, **kwargs):
instance = self.queryset.filter(deleted_at=None).first()
serializer = self.get_serializer(instance)
return Response(serializer.data)
class ChangeRequestTemplateDetailsViewset(meviewsets.ModelViewSet):
queryset = models.ChangeRequestTemplateDetails.objects.all()
serializer_class = serializers.ChangeRequestTemplateDetailsSerializer
pagination_class = paginators.SimplePageNumberPagination
def list(self, request, *args, **kwargs):
self.queryset = self.queryset.filter(deleted_at=None)
self.queryset = QuerySetHelper.Sort(self)
# self.queryset = QuerySetHelper.Filter(self)
return super(ChangeRequestTemplateDetailsViewset, self).list(request)
def retrieve(self, request, *args, **kwargs):
instance = self.queryset.filter(deleted_at=None).first()
serializer = self.get_serializer(instance)
return Response(serializer.data)
class ChangeRequestTemplatePost(APIView):
@transaction.atomic()
......@@ -296,6 +348,433 @@ class ChangeRequestTemplatePost(APIView):
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
lookup_field = 'form_code'
queryset = models.ChangeRequestFormHeader.objects.all()
serializer_class = serializers.ChangeRequestFormHeaderSerializer
pagination_class = paginators.SimplePageNumberPagination
def list(self, request, *args, **kwargs):
# id_number = logged_user(self)
# id_number = 'Acct-20190813-0000138'
# self.queryset = change_request.list_by_user(id_number)
self.queryset = change_request.filter_base(
self.queryset,
request.query_params.get('company_requested_to'),
request.query_params.get('department_requested_to'),
request.query_params.get('date_modified_from'),
request.query_params.get('date_modified_to'),
request.query_params.get('date_required_from'),
request.query_params.get('date_required_to'),
request.query_params.get('form_type'),
)
if self.request.query_params.get('search'):
search_key = self.request.query_params.get('search')
self.queryset = self.queryset.filter(
Q(requested_to_template_name__icontains=search_key.lower()) |
Q(requested_to_template_id__icontains=search_key.lower())
)
# self.queryset = self.queryset.order_by('-created')
self.queryset = QuerySetHelper.Sort(self)
# self.queryset = QuerySetHelper.Search(self) # comment
return super(ChangeRequestFormsViewset, self).list(request)
@action(detail=False,
methods=['get'],
url_path='dashboard',
name="Dashboard Summary")
def dashboard_view(self, request):
id_number = logged_user(self)
# id_number = 'Acct-20190813-0000138'
self.queryset = change_request.list_by_user(id_number)
self.queryset = change_request.filter_base(
self.queryset,
request.query_params.get('company_requested_to'),
request.query_params.get('department_requested_to'),
request.query_params.get('date_modified_from'),
request.query_params.get('date_modified_to'),
request.query_params.get('date_required_from'),
request.query_params.get('date_required_to'),
request.query_params.get('form_type'),
)
pending = self.queryset.filter(
status__iexact='Pending'
).count()
approved = self.queryset.filter(
status__iexact='Approved'
).count()
rejected = self.queryset.filter(
status__iexact='Rejected'
).count()
cancelled = self.queryset.filter(
status__iexact='Cancelled'
).count()
completed = self.queryset.filter(
status__iexact='Closed' #Completed
).count()
high = self.queryset.filter(
requested_to_priority='High'
).count()
normal = self.queryset.filter(
requested_to_priority='Normal'
).count()
awaiting_filtered = change_request.filter_awaiting(self.queryset, id_number)
# awaiting = awaiting_filtered.count()
awaiting = 0
for awaits in awaiting_filtered:
if awaits.status.lower() == 'rejected':
print("rejected")
elif awaits.status.lower() == 'closed':
print("closed")
elif awaits.status.lower() == 'cancelled':
print("cancelled")
else:
awaiting = awaiting + 1
overdue_filtered = change_request.filter_overdue(self.queryset)
overdue = overdue_filtered.count()
message = {
'account_no': id_number,
'pending': pending,
'approved': approved,
'rejected': rejected,
'cancelled': cancelled,
'completed': completed,
'high': high,
'normal': normal,
'awaiting': awaiting,
'overdue': overdue,
'code': 200,
'status': 'success',
'message': 'Dashboard Summary'
}
return Response(message, status=status.HTTP_200_OK)
@action(detail=False,
methods=['get'],
url_path='status',
name="Dashboard Summary Status")
def list_by_status_view(self, request):
id_number = logged_user(self)
# id_number = 'Acct-20190531-0000002'
self.queryset = change_request.list_by_user(id_number)
self.queryset = change_request.filter_status(
self.queryset,
request.query_params.get('status')
)
self.queryset = change_request.filter_base(
self.queryset,
request.query_params.get('company_requested_to'),
request.query_params.get('department_requested_to'),
request.query_params.get('date_modified_from'),
request.query_params.get('date_modified_to'),
request.query_params.get('date_required_from'),
request.query_params.get('date_required_to'),
request.query_params.get('form_type'),
)
self.queryset = self.queryset.order_by('-created')
self.queryset = QuerySetHelper.Sort(self)
# self.queryset = QuerySetHelper.Filter(self)
return super(ChangeRequestFormsViewset, self).list(request)
@action(detail=False,
methods=['get'],
url_path='overdue',
name="Dashboard Summary Overdue")
def list_by_overdue_view(self, request):
id_number = logged_user(self)
# id_number = 'Acct-20190531-0000002'
self.queryset = change_request.list_by_user(id_number)
self.queryset = change_request.filter_overdue(self.queryset)
self.queryset = change_request.filter_base(
self.queryset,
request.query_params.get('company_requested_to'),
request.query_params.get('department_requested_to'),
request.query_params.get('date_modified_from'),
request.query_params.get('date_modified_to'),
request.query_params.get('date_required_from'),
request.query_params.get('date_required_to'),
request.query_params.get('form_type'),
)
self.queryset = self.queryset.order_by('-created')
self.queryset = QuerySetHelper.Sort(self)
return super(ChangeRequestFormsViewset, self).list(request)
@action(detail=False,
methods=['get'],
url_path='awaiting',
name="Dashboard Summary Awaiting")
def list_by_awaiting_view(self, request):
id_number = logged_user(self)
# id_number = 'Acct-20190813-0000137'
self.queryset = change_request.list_by_user(id_number)
self.queryset = change_request.filter_awaiting(self.queryset, id_number)
self.queryset = change_request.filter_base(
self.queryset,
request.query_params.get('company_requested_to'),
request.query_params.get('department_requested_to'),
request.query_params.get('date_modified_from'),
request.query_params.get('date_modified_to'),
request.query_params.get('date_required_from'),
request.query_params.get('date_required_to'),
request.query_params.get('form_type'),
)
self.queryset = self.queryset.filter(status__ne='Rejected')
self.queryset = self.queryset.filter(status__ne='Closed')
self.queryset = self.queryset.filter(status__ne='Cancelled')
self.queryset = self.queryset.order_by('-created')
self.queryset = QuerySetHelper.Sort(self)
return super(ChangeRequestFormsViewset, self).list(request)
def destroy(self, request, *args, **kwargs):
# instance = self.get_object()
form_code = self.kwargs['form_code']
instance = models.ChangeRequestFormHeader.objects.filter(
form_code=form_code
).first()
if instance.status.lower() == 'draft':
models.ChangeRequestFormApprovers.objects(
form_code=form_code
).delete()
models.ChangeRequestFormDetails.objects(
form_code=form_code
).delete()
models.ChangeRequestFormStakeHolders.objects(
form_code=form_code
).delete()
models.ChangeRequestFormAttachments.objects(
form_code=form_code
).delete()
models.ChangeRequestFormTasks.objects(
form_code=form_code
).delete()
models.ChangeRequestFormHeader.objects(form_code=form_code).delete()
# self.perform_destroy(instance)
return Response({"message": "Change Request Deleted"}, status=status.HTTP_200_OK)
else:
message = {"message": "Cant delete this record, it has an ongoing tansaction"}
return Response(
message,
status=status.HTTP_204_NO_CONTENT
)
def retrieve(self, request, *args, **kwargs):
instance = self.queryset.filter(
deleted_at=None,
form_code=str(self.kwargs.get('form_code'))
).first()
serializer = self.get_serializer(instance)
return Response(serializer.data)
# @transaction.atomic
def create(self, request, *args, **kwargs):
try:
form_code = request.data['form_code']
created = ''
if not form_code.lower() == 'frm':
header = models.ChangeRequestFormHeader.objects.filter(
Q(form_code=form_code) &
Q(deleted_at=None)
)
instance = header.first()
# if instance.requested_by_user != logged_user(self):
# return Response(
# {"message": "access denied, this form is not for the logged user"},
# status=status.HTTP_406_NOT_ACCEPTABLE
# )
header.update(
deleted_at=datetime.now()
)
# request.data['created'] = instance.created
created = instance.created
# models.ChangeRequestFormStakeHolders.objects.filter(
# form_code=form_code
# ).update(
# deleted_at=datetime.now()
# )
# models.ChangeRequestFormAttachments.objects.filter(
# form_code=form_code
# ).update(
# deleted_at=datetime.now()
# )
# models.ChangeRequestFormDetails.objects.filter(
# form_code=form_code
# ).update(
# deleted_at=datetime.now()
# )
# models.ChangeRequestFormApprovers.objects.filter(
# form_code=form_code
# ).update(
# deleted_at=datetime.now()
# )
series = form_code
if request.data['status'] == 'Pending':
if instance.status == 'Draft':
CR_Prefix = request.data['requested_to_template_id']
if CR_Prefix:
db_counter = models.ChangeRequestFormHeader.objects.filter(
deleted_at=None
).count()
db_counter = db_counter + 2
db_counter = db_counter - 1
request.data['requested_to_template_id'] = number_generator(CR_Prefix, db_counter)
# get all details needed for report
company_desc = get_companies_details(
request.data['requested_to_company']
)
department_desc = get_group_details(
request.data['requested_to_department']
)
requested_desc = get_account_details(
request.data['requested_by_user']
)
request.data['company_desc'] = company_desc['name']
request.data['department_desc'] = department_desc['name']
request.data['requested_desc'] = requested_desc['name']
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
if serializer.is_valid():
x = serializer.save()
if not created == '':
x.created = instance.created
x.save()
else:
x.created = datetime.now()
x.save()
# self.perform_create(serializer)
if form_code.lower() == 'frm':
id = serializer.data['id']
template_id = request.data['requested_to_template_id']
db_counter = models.ChangeRequestFormHeader.objects.filter(
deleted_at=None
).count()
db_counter = db_counter + 2
db_counter = db_counter - 1
series = number_generator("FRM", db_counter)
models.ChangeRequestFormHeader.objects.filter(id=id).update(
set__form_code=series
)
if template_id and request.data['status'] == 'Pending':
models.ChangeRequestFormHeader.objects.filter(id=id).update(
set__requested_to_template_id=number_generator(
template_id, db_counter
)
)
# test = cancel_overdue(request)
headers = self.get_success_headers(serializer.data)
return Response(
data={"code": series},
status=status.HTTP_201_CREATED, headers=headers
)
except Exception as e:
message = {
'code': 500,
'status': 'failed',
'message': 'Request was not able to process' + str(e.__class__)
}
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
@action(detail=True,
methods=['get'],
url_path='history',
name="CR History")
def list_cr_history(self, request, form_code=None, **kwargs):
form_code = self.kwargs['form_code']
form_code_list = []
form_code_list.append(form_code)
for frmitem in models.ChangeRequestFormHeader.objects.filter(old_form_code__ne=None).order_by('created'):
if frmitem.form_code == form_code:
form_code_list.append(frmitem.old_form_code)
form_code = frmitem.old_form_code
# remove duplicates
mylist = list(dict.fromkeys(form_code_list))
print(mylist)
queryset = models.ChangeRequestFormApprovers.objects.filter(
(Q(action__ne=None) & Q(action__ne='')),
form_code__in=mylist).order_by('created')
self.serializer_class = serializers.ChangeRequestFormApproversSerializer
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
class ChangeRequestFormPost(APIView):
# @transaction.atomic()
......
......@@ -20,9 +20,9 @@ router.register(r'notifications', NotificationsViewset)
router.register(r'template', crviews.ChangeRequestTemplatesViewset)
router.register(r'template-approvers', crviews.ChangeRequestTemplateApproversViewset)
# router.register(r'template-stakeholders', crviews.ChangeRequestTemplateStakeHoldersViewset)
# router.register(r'template-attachments', crviews.ChangeRequestTemplateAttachmentsViewset)
# router.register(r'template-details', crviews.ChangeRequestTemplateDetailsViewset)
router.register(r'template-attachments', crviews.ChangeRequestTemplateAttachmentsViewset)
router.register(r'template-stakeholders', crviews.ChangeRequestTemplateStakeHoldersViewset)
router.register(r'template-details', crviews.ChangeRequestTemplateDetailsViewset)
# router.register(r'form', crviews.ChangeRequestFormsViewset)
# router.register(r'form-approvers', crviews.ChangeRequestFormApproversViewset)
......
......@@ -78,6 +78,25 @@ class LogEntitiesEnum(Enum):
# STOCK_ITEM = "Stock Item"
# REQUISITION = "Requisition Header"
'''
*********
CR HISTORY ENUMS
*********
'''
class CREntitiesEnum(Enum):
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"
'''
*********
NOTIFICATION ENUMS
......
# 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',
},
),
]
......@@ -805,6 +805,33 @@ class ChangeRequestFormAttachments(BaseAttachment):
self.created = datetime.now()
self.save()
'''
*****
CR HISTORY
*****
'''
class ChangeRequestHistory(AuditClass):
action = models.CharField(
choices=[
(tag.value, tag.value) for tag in enums.LogEnum],
default=enums.LogEnum.ADD.value,
max_length=50)
entity = models.CharField(
choices=[
(tag.value, tag.value) for tag in enums.CREntitiesEnum],
default=enums.CREntitiesEnum.CR_FRM_HEADER.value,
max_length=50)
row_id = models.IntegerField()
fromValue = models.TextField(blank=True, null=True)
toValue = models.TextField(blank=True, null=True)
def __str__(self):
return self.entity
class Meta:
db_table = 'change_request_history'
"""
**********************
......
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