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

post api form

parent 03ea872b
...@@ -45,7 +45,7 @@ class ChangeRequestTemplateDetailsSerializer( ...@@ -45,7 +45,7 @@ class ChangeRequestTemplateDetailsSerializer(
class Meta: class Meta:
model = models.ChangeRequestTemplateDetails model = models.ChangeRequestTemplateDetails
fields = '__all__' fields = '__all__'
read_only_fields = ['created', 'deleted_at'] read_only_fields = ['created', 'deleted_at', 'code']
class ChangeRequestFormHeaderSerializer( class ChangeRequestFormHeaderSerializer(
...@@ -82,7 +82,7 @@ class ChangeRequestFormHeaderSerializer( ...@@ -82,7 +82,7 @@ class ChangeRequestFormHeaderSerializer(
class Meta: class Meta:
model = models.ChangeRequestFormHeader model = models.ChangeRequestFormHeader
fields = '__all__' fields = '__all__'
read_only_fields = ['created', 'deleted_at'] read_only_fields = ['created', 'deleted_at', 'form_code']
class ChangeRequestFormApproversSerializer( class ChangeRequestFormApproversSerializer(
...@@ -112,7 +112,7 @@ class ChangeRequestFormApproversSerializer( ...@@ -112,7 +112,7 @@ class ChangeRequestFormApproversSerializer(
class Meta: class Meta:
model = models.ChangeRequestFormApprovers model = models.ChangeRequestFormApprovers
fields = '__all__' fields = '__all__'
read_only_fields = ['created', 'deleted_at'] read_only_fields = ['created', 'deleted_at', 'code']
class ChangeRequestFormStakeHoldersSerializer( class ChangeRequestFormStakeHoldersSerializer(
...@@ -121,7 +121,7 @@ class ChangeRequestFormStakeHoldersSerializer( ...@@ -121,7 +121,7 @@ class ChangeRequestFormStakeHoldersSerializer(
class Meta: class Meta:
model = models.ChangeRequestFormStakeHolders model = models.ChangeRequestFormStakeHolders
fields = '__all__' fields = '__all__'
read_only_fields = ['created', 'deleted_at'] read_only_fields = ['created', 'deleted_at', 'code']
class ChangeRequestFormAttachmentsSerializer( class ChangeRequestFormAttachmentsSerializer(
...@@ -130,7 +130,7 @@ class ChangeRequestFormAttachmentsSerializer( ...@@ -130,7 +130,7 @@ class ChangeRequestFormAttachmentsSerializer(
class Meta: class Meta:
model = models.ChangeRequestFormAttachments model = models.ChangeRequestFormAttachments
fields = '__all__' fields = '__all__'
read_only_fields = ['created', 'deleted_at'] read_only_fields = ['created', 'deleted_at', 'code']
class ChangeRequestFormDetailsSerializer( class ChangeRequestFormDetailsSerializer(
...@@ -139,4 +139,4 @@ class ChangeRequestFormDetailsSerializer( ...@@ -139,4 +139,4 @@ class ChangeRequestFormDetailsSerializer(
class Meta: class Meta:
model = models.ChangeRequestFormDetails model = models.ChangeRequestFormDetails
fields = '__all__' fields = '__all__'
read_only_fields = ['created', 'deleted_at'] read_only_fields = ['created', 'deleted_at', 'code']
...@@ -19,7 +19,7 @@ router.register(r'modules', ModuleViewSet) ...@@ -19,7 +19,7 @@ router.register(r'modules', ModuleViewSet)
router.register(r'notifications', NotificationsViewset) router.register(r'notifications', NotificationsViewset)
router.register(r'template', crviews.ChangeRequestTemplatesViewset) router.register(r'template', crviews.ChangeRequestTemplatesViewset)
# router.register(r'template-approvers', crviews.ChangeRequestTemplateApproversViewset) router.register(r'template-approvers', crviews.ChangeRequestTemplateApproversViewset)
# router.register(r'template-stakeholders', crviews.ChangeRequestTemplateStakeHoldersViewset) # router.register(r'template-stakeholders', crviews.ChangeRequestTemplateStakeHoldersViewset)
# router.register(r'template-attachments', crviews.ChangeRequestTemplateAttachmentsViewset) # router.register(r'template-attachments', crviews.ChangeRequestTemplateAttachmentsViewset)
# router.register(r'template-details', crviews.ChangeRequestTemplateDetailsViewset) # router.register(r'template-details', crviews.ChangeRequestTemplateDetailsViewset)
...@@ -35,4 +35,5 @@ urlpatterns = ( ...@@ -35,4 +35,5 @@ urlpatterns = (
path('', include(router.urls)), path('', include(router.urls)),
path('template-post/', crviews.ChangeRequestTemplatePost.as_view()), path('template-post/', crviews.ChangeRequestTemplatePost.as_view()),
path('form-post/', crviews.ChangeRequestFormPost.as_view()),
) )
...@@ -65,4 +65,47 @@ def status_message_response(code, status, message, results): ...@@ -65,4 +65,47 @@ def status_message_response(code, status, message, results):
'message': message, 'message': message,
'results': results 'results': results
} }
return message return message
\ No newline at end of file
class QuerySetHelper:
@staticmethod
def Sort(context):
sort_field = context.request.query_params.get('sort_field')
sort_order = context.request.query_params.get('sort_order')
if sort_field and sort_order:
if sort_order.lower() == 'asc':
context.queryset = context.queryset.order_by(sort_field)
else:
context.queryset = context.queryset.order_by(f"-{sort_field}")
return context.queryset
@staticmethod
def Search(context):
search_field = context.request.query_params.get('search-field')
search_key = context.request.query_params.get('search-key')
if search_field and search_key:
context.queryset = context.queryset(
__raw__={f"{search_field}" : {"$regex" : f".*{search_key.lower()}.*"}}
)
return context.queryset
@staticmethod
def Filter(context):
if int(len(context.request.query_params)) > 0:
filtering_kwargs = {}
with_params = []
common_params = (
'page', 'page-size', 'page_size', 'sort_order', 'sort_field'
)
for field, value in context.request.GET.items():
filtering_kwargs = {}
if value and field.lower() not in common_params:
filtering_kwargs[field] = {"$regex" : f".*{value.lower()}.*"}
filtering_kwargs[field] = {"$regex" : f".*{value}.*"}
# filtering_kwargs[field] = {"$regex" : f".*{value.lower()}.*"}
with_params.append(filtering_kwargs)
raw_query = {"$or": with_params}
context.queryset = context.queryset(__raw__=raw_query)
return context.queryset
\ No newline at end of file
from django.shortcuts import render
from app.entities import models
from app.applicationlayer import paginators
from datetime import datetime
from rest_framework.response import Response
from rest_framework import status, views
from rest_framework.decorators import action
from django.http import Http404
from django.db.models import Q
def list_by_user(user_id_number):
return_queryset = None
try:
approver = models.ChangeRequestFormApprovers.objects.filter(
Q(user=user_id_number) &
Q(deleted_at=None)
)
approver = [data['form_code'] for data in approver]
stake = models.ChangeRequestFormStakeHolders.objects.filter(
Q(user=user_id_number) &
Q(deleted_at=None)
)
stake = [data['form_code'] for data in stake]
headers = models.ChangeRequestFormHeader.objects.filter(
deleted_at=None,
requested_by_user=user_id_number
)
headers = [data['form_code'] for data in headers]
# # TODO: Include priviledges here
# req = get_allowed_company(user_id_number)
# results = req.json()['results']
# # Get the list of distincted group_no
# crViews = list(set(
# map(lambda x: x['group_pivots'],
# list(filter(lambda x: x['view_all_change_request'], results))
# )
# ))
# priviledgedList = models.ChangeRequestFormHeader.objects.filter(
# requested_to_department__in=crViews,
# deleted_at=None,
# )
# priviledgedCrs = [data['form_code'] for data in priviledgedList]
# form_code = list(set(stake + approver + headers + priviledgedCrs))
form_code = list(set(stake + approver + headers))
return_queryset = models.ChangeRequestFormHeader.objects.filter(
form_code__in=form_code,
deleted_at=None,
)
exclude = return_queryset.filter(
status__iexact='Draft',
requested_by_user__ne=user_id_number
)
exclude = [data['form_code'] for data in exclude]
return_queryset = return_queryset.filter(
form_code__nin=exclude
)
except Exception as e:
pass
return return_queryset
def filter_base(base_queryset,
company_requested_to,
department_requested_to,
date_modified_from,
date_modified_to,
date_required_from,
date_required_to,
form_type):
return_queryset = base_queryset
try:
if company_requested_to:
return_queryset = return_queryset.filter(requested_to_company__exact=company_requested_to)
if department_requested_to:
return_queryset = return_queryset.filter(requested_to_department__exact=department_requested_to)
if form_type == 'open':
return_queryset = return_queryset.filter(status__ne='Closed')
elif form_type == 'closed':
return_queryset = return_queryset.filter(status='Closed')
date_modified = []
date_modified_not = []
if date_modified_from and date_modified_to:
for query in return_queryset:
created = datetime.strftime(query.created, "%Y-%m-%d")
if created >= date_modified_from and created <= date_modified_to:
date_modified.append(query.id)
return_queryset = return_queryset.filter(id__in=date_modified)
else:
date_modified_not.append(query.id)
return_queryset = return_queryset.filter(id__nin=date_modified_not)
date_required = []
date_required_not = []
if date_required_from and date_required_to:
for query in return_queryset:
try:
if query.requested_to_target_date:
requested_to_target_date = datetime.strptime(query.requested_to_target_date[:-1], "%Y-%m-%dT%H:%M:%S.%f")
requested_to_target_date = datetime.strftime(requested_to_target_date, "%Y-%m-%d")
if requested_to_target_date >= date_required_from and requested_to_target_date <= date_required_to:
date_required.append(query.id)
return_queryset = return_queryset.filter(id__in=date_required)
else:
date_required_not.append(query.id)
return_queryset = return_queryset.filter(id__nin=date_required_not)
else:
date_required_not.append(query.id)
return_queryset = return_queryset.filter(id__nin=date_required_not)
except ValueError:
if query.requested_to_target_date:
requested_to_target_date = datetime.strptime(query.requested_to_target_date[:-1], "%Y-%m-%d %H:%M:%S")
requested_to_target_date = datetime.strftime(requested_to_target_date, "%Y-%m-%d")
if requested_to_target_date >= date_required_from and requested_to_target_date <= date_required_to:
date_required.append(query.id)
return_queryset = return_queryset.filter(id__in=date_required)
else:
date_required_not.append(query.id)
return_queryset = return_queryset.filter(id__nin=date_required_not)
else:
date_required_not.append(query.id)
return_queryset = return_queryset.filter(id__nin=date_required_not)
return_queryset
except Exception as e:
pass
return return_queryset
def filter_overdue(base_queryset):
return_queryset = base_queryset
try:
now = datetime.now()
overdue = []
for query in return_queryset:
try:
if query.requested_to_target_date:
requested_to_target_date = datetime.strptime(query.requested_to_target_date[:-1], "%Y-%m-%dT%H:%M:%S.%f")
if (requested_to_target_date < now):
overdue.append(query.form_code)
except ValueError:
#convert now
if query.requested_to_target_date:
requested_to_target_date = datetime.strptime(query.requested_to_target_date[:-1], "%Y-%m-%d %H:%M:%S")
if (requested_to_target_date < now):
overdue.append(query.form_code)
return_queryset = return_queryset.filter(
form_code__in=overdue
)
return_queryset
except Exception as e:
pass
return return_queryset
def filter_status(base_queryset,
status):
return_queryset = base_queryset
try:
if status:
return_queryset = return_queryset.filter(
status__iexact=status
)
return_queryset
except Exception as e:
pass
return return_queryset
def filter_awaiting(base_queryset,
user_id_number):
return_queryset = base_queryset
try:
awaiting_included = []
for query in return_queryset:
current_level = models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=query.form_code) &
Q(deleted_at=None) &
(Q(action='') | Q(action=None))
).order_by('level')
if current_level:
if current_level[0]['user'] == user_id_number:
awaiting_included.append(query.form_code)
return_queryset = return_queryset.filter(form_code__in=awaiting_included)
except Exception as e:
pass
return return_queryset
from app.entities import models
def get_template(self, code):
try:
template = {}
header = models.ChangeRequestTemplateHeader.objects.filter(
template_no=code
).values()
approve = models.ChangeRequestTemplateApprovers.objects.filter(
template_no=code
).values()
stakeholder = models.ChangeRequestTemplateStakeHolders.objects.filter(
template_no=code
).values()
attachment = models.ChangeRequestTemplateAttachments.objects.filter(
template_no=code
).values()
details = models.ChangeRequestTemplateDetails.objects.filter(
template_no=code
).values()
task = models.ChangeRequestTemplateTasks.objects.filter(
template_no=code
).values()
template['header'] = header
template['aprrove'] = approve
template['stakeholder'] = stakeholder
template['attachment'] = attachment
template['details'] = details
template['task'] = task
return template
except ChangeRequestTemplateHeader.DoesNotExist:
raise Http404
except ChangeRequestTemplateApprovers.DoesNotExist:
raise Http404
except ChangeRequestTemplateStakeHolders.DoesNotExist:
raise Http404
except ChangeRequestTemplateAttachments.DoesNotExist:
raise Http404
except ChangeRequestTemplateDetails.DoesNotExist:
raise Http404
except ChangeRequestTemplateTasks.DoesNotExist:
raise Http404
# 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'),
),
]
...@@ -389,10 +389,12 @@ class BaseApprover(models.Model): ...@@ -389,10 +389,12 @@ class BaseApprover(models.Model):
user = models.ForeignKey( user = models.ForeignKey(
User, User,
blank=True,
null=True,
on_delete=models.DO_NOTHING, on_delete=models.DO_NOTHING,
to_field='code') to_field='code')
delegation = models.CharField(max_length=50) delegation = models.CharField(max_length=50, blank=True, null=True)
created = models.DateTimeField( created = models.DateTimeField(
blank=True, blank=True,
null=True) null=True)
...@@ -407,6 +409,8 @@ class BaseApprover(models.Model): ...@@ -407,6 +409,8 @@ class BaseApprover(models.Model):
class BaseStakeholder(models.Model): class BaseStakeholder(models.Model):
user = models.ForeignKey( user = models.ForeignKey(
User, User,
blank=True,
null=True,
on_delete=models.DO_NOTHING, on_delete=models.DO_NOTHING,
to_field='code') to_field='code')
delegation = models.CharField( delegation = models.CharField(
...@@ -661,7 +665,11 @@ class ChangeRequestFormHeader(BaseHeader): ...@@ -661,7 +665,11 @@ class ChangeRequestFormHeader(BaseHeader):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
super(ChangeRequestFormHeader, self).save(*args, **kwargs) super(ChangeRequestFormHeader, self).save(*args, **kwargs)
code = number_generator(enums.GenerateCode.FORM.value, self.id) code = number_generator(enums.GenerateCode.FORM.value, self.id)
ChangeRequestFormHeader.objects.filter(id=self.id).update(form_code=code) # ChangeRequestFormHeader.objects.filter(id=self.id).update(form_code=code)
if self.form_code == '':
self.form_code = code
self.save()
class ChangeRequestFormApprovers(BaseApprover): class ChangeRequestFormApprovers(BaseApprover):
...@@ -684,6 +692,12 @@ class ChangeRequestFormApprovers(BaseApprover): ...@@ -684,6 +692,12 @@ class ChangeRequestFormApprovers(BaseApprover):
date_sent = models.DateTimeField( date_sent = models.DateTimeField(
blank=True, blank=True,
null=True) null=True)
tmp_approver = models.ForeignKey(
ChangeRequestTemplateApprovers,
null=True,
blank=True,
on_delete=models.DO_NOTHING,
to_field='code')
class Meta: class Meta:
db_table = 'change_request_form_approvers' db_table = 'change_request_form_approvers'
...@@ -691,9 +705,12 @@ class ChangeRequestFormApprovers(BaseApprover): ...@@ -691,9 +705,12 @@ class ChangeRequestFormApprovers(BaseApprover):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
super(ChangeRequestFormApprovers, self).save(*args, **kwargs) super(ChangeRequestFormApprovers, self).save(*args, **kwargs)
code = number_generator(enums.GenerateCode.FORM_APPROVER.value, self.id) code = number_generator(enums.GenerateCode.FORM_APPROVER.value, self.id)
ChangeRequestFormApprovers.objects.filter(id=self.id).update(code=code) # ChangeRequestFormApprovers.objects.filter(id=self.id).update(code=code)
pass if self.code == '':
self.code = code
self.created = datetime.now()
self.save()
class ChangeRequestFormDetails(BaseDetails): class ChangeRequestFormDetails(BaseDetails):
...@@ -705,6 +722,12 @@ class ChangeRequestFormDetails(BaseDetails): ...@@ -705,6 +722,12 @@ class ChangeRequestFormDetails(BaseDetails):
on_delete=models.DO_NOTHING, on_delete=models.DO_NOTHING,
to_field='form_code', to_field='form_code',
related_name='frm_details') related_name='frm_details')
tmp_detail = models.ForeignKey(
ChangeRequestTemplateDetails,
null=True,
blank=True,
on_delete=models.DO_NOTHING,
to_field='code')
class Meta: class Meta:
db_table = 'change_request_form_details' db_table = 'change_request_form_details'
...@@ -712,9 +735,12 @@ class ChangeRequestFormDetails(BaseDetails): ...@@ -712,9 +735,12 @@ class ChangeRequestFormDetails(BaseDetails):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
super(ChangeRequestFormDetails, self).save(*args, **kwargs) super(ChangeRequestFormDetails, self).save(*args, **kwargs)
code = number_generator(enums.GenerateCode.FORM_DETAIL.value, self.id) code = number_generator(enums.GenerateCode.FORM_DETAIL.value, self.id)
ChangeRequestFormDetails.objects.filter(id=self.id).update(code=code) # ChangeRequestFormDetails.objects.filter(id=self.id).update(code=code)
pass if self.code == '':
self.code = code
self.created = datetime.now()
self.save()
class ChangeRequestFormStakeHolders(BaseStakeholder): class ChangeRequestFormStakeHolders(BaseStakeholder):
...@@ -729,6 +755,12 @@ class ChangeRequestFormStakeHolders(BaseStakeholder): ...@@ -729,6 +755,12 @@ class ChangeRequestFormStakeHolders(BaseStakeholder):
date_added = models.DateTimeField( date_added = models.DateTimeField(
blank=True, blank=True,
null=True) null=True)
tmp_stake = models.ForeignKey(
ChangeRequestTemplateStakeHolders,
null=True,
blank=True,
on_delete=models.DO_NOTHING,
to_field='code')
class Meta: class Meta:
db_table = 'change_request_form_stakeholders' db_table = 'change_request_form_stakeholders'
...@@ -736,9 +768,12 @@ class ChangeRequestFormStakeHolders(BaseStakeholder): ...@@ -736,9 +768,12 @@ class ChangeRequestFormStakeHolders(BaseStakeholder):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
super(ChangeRequestFormStakeHolders, self).save(*args, **kwargs) super(ChangeRequestFormStakeHolders, self).save(*args, **kwargs)
code = number_generator(enums.GenerateCode.FORM_STAKE.value, self.id) code = number_generator(enums.GenerateCode.FORM_STAKE.value, self.id)
ChangeRequestFormStakeHolders.objects.filter(id=self.id).update(code=code) # ChangeRequestFormStakeHolders.objects.filter(id=self.id).update(code=code)
pass if self.code == '':
self.code = code
self.created = datetime.now()
self.save()
class ChangeRequestFormAttachments(BaseAttachment): class ChangeRequestFormAttachments(BaseAttachment):
...@@ -750,6 +785,12 @@ class ChangeRequestFormAttachments(BaseAttachment): ...@@ -750,6 +785,12 @@ class ChangeRequestFormAttachments(BaseAttachment):
on_delete=models.DO_NOTHING, on_delete=models.DO_NOTHING,
to_field='form_code', to_field='form_code',
related_name='frm_attachments') related_name='frm_attachments')
tmp_attach = models.ForeignKey(
ChangeRequestTemplateAttachments,
null=True,
blank=True,
on_delete=models.DO_NOTHING,
to_field='code')
class Meta: class Meta:
db_table = 'change_request_form_attachments' db_table = 'change_request_form_attachments'
...@@ -757,9 +798,12 @@ class ChangeRequestFormAttachments(BaseAttachment): ...@@ -757,9 +798,12 @@ class ChangeRequestFormAttachments(BaseAttachment):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
super(ChangeRequestFormAttachments, self).save(*args, **kwargs) super(ChangeRequestFormAttachments, self).save(*args, **kwargs)
code = number_generator(enums.GenerateCode.FORM_ATTACH.value, self.id) code = number_generator(enums.GenerateCode.FORM_ATTACH.value, self.id)
ChangeRequestFormAttachments.objects.filter(id=self.id).update(code=code) # ChangeRequestFormAttachments.objects.filter(id=self.id).update(code=code)
pass 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