Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Sign in
Toggle navigation
R
red-ci-cd
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
red-group-test
red-ci-cd
Commits
2c8f4c62
Commit
2c8f4c62
authored
Sep 20, 2019
by
John Red Medrano
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'RMSv2' of
http://42.61.118.105:7990/scm/rms/api-main-service
into red-develop
parents
cc34f8a5
0a61a976
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
422 additions
and
330 deletions
+422
-330
app/applicationlayer/cms/form/serializers.py
app/applicationlayer/cms/form/serializers.py
+120
-32
app/applicationlayer/cms/form/views.py
app/applicationlayer/cms/form/views.py
+168
-44
app/applicationlayer/cms/template/views.py
app/applicationlayer/cms/template/views.py
+2
-4
app/applicationlayer/cms/utils_cr.py
app/applicationlayer/cms/utils_cr.py
+94
-158
app/businesslayer/changerequest/change_request.py
app/businesslayer/changerequest/change_request.py
+3
-7
app/datalayer/serializer_handler.py
app/datalayer/serializer_handler.py
+1
-1
app/entities/enums.py
app/entities/enums.py
+6
-0
app/helper/email_service/sender.py
app/helper/email_service/sender.py
+28
-84
No files found.
app/applicationlayer/cms/form/serializers.py
View file @
2c8f4c62
from
app.entities
import
models
from
rest_framework
import
serializers
from
django.db.models
import
Q
from
app.applicationlayer.cms.utils_cr
import
logged_user
from
drf_writable_nested
import
WritableNestedModelSerializer
from
app.applicationlayer.cms.utils_cr
import
(
get_account_details
,
get_dept_details
,
get_companies_details
)
class
ChangeRequestFormApproversSerializer
(
serializers
.
ModelSerializer
):
# def to_representation(self, instance):
# ret = super().to_representation(instance)
# try:
# user = instance.user
def
to_representation
(
self
,
instance
):
ret
=
super
()
.
to_representation
(
instance
)
try
:
user
=
instance
.
user
user_details
=
get_account_details
(
user
.
code
)
name
=
user_details
.
values_list
(
'name'
,
flat
=
True
)[
0
]
dept_code
=
user_details
.
values_list
(
'department'
,
flat
=
True
)[
0
]
department_details
=
get_dept_details
(
dept_code
)
department
=
department_details
.
values_list
(
'name'
,
flat
=
True
)[
0
]
comp_code
=
department_details
.
values_list
(
'company'
,
flat
=
True
)[
0
]
company_details
=
get_companies_details
(
comp_code
)
company
=
company_details
.
values_list
(
'name'
,
flat
=
True
)[
0
]
# user_details = get_account_details(user)
# name = user_details['name']
# group = user_details['groups'][0]['name']
# company = user_details['groups'][0]['company__name']
# ret['name'] = name
# ret['department'] = group
# ret['company'] = company
# return ret
# except Exception as e:
# ret['name'] = "none"
# ret['department'] = "none"
# ret['company'] = "none"
# return ret
ret
[
'name'
]
=
name
ret
[
'department'
]
=
department
ret
[
'company'
]
=
company
return
ret
except
Exception
as
e
:
ret
[
'name'
]
=
"none"
ret
[
'department'
]
=
"none"
ret
[
'company'
]
=
"none"
return
ret
class
Meta
:
model
=
models
.
ChangeRequestFormApprovers
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'
archived_at'
,
'
code'
]
read_only_fields
=
[
'created'
,
'code'
]
class
ChangeRequestFormStakeHoldersSerializer
(
...
...
@@ -41,7 +47,7 @@ class ChangeRequestFormStakeHoldersSerializer(
class
Meta
:
model
=
models
.
ChangeRequestFormStakeHolders
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'
archived_at'
,
'
code'
]
read_only_fields
=
[
'created'
,
'code'
]
class
ChangeRequestFormAttachmentsSerializer
(
...
...
@@ -50,7 +56,7 @@ class ChangeRequestFormAttachmentsSerializer(
class
Meta
:
model
=
models
.
ChangeRequestFormAttachments
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'
archived_at'
,
'
code'
]
read_only_fields
=
[
'created'
,
'code'
]
class
ChangeRequestFormDetailsSerializer
(
...
...
@@ -59,31 +65,113 @@ class ChangeRequestFormDetailsSerializer(
class
Meta
:
model
=
models
.
ChangeRequestFormDetails
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'
archived_at'
,
'
code'
]
read_only_fields
=
[
'created'
,
'code'
]
class
ChangeRequestFormHeaderSerializer
(
WritableNested
ModelSerializer
serializers
.
ModelSerializer
):
frm_approvers
=
ChangeRequestFormApproversSerializer
(
many
=
True
,
required
=
False
)
many
=
True
,
read_only
=
True
)
# frm_stakes = ChangeRequestFormStakeHoldersSerializer(
# many=True, required=False)
frm_stakes
=
ChangeRequestFormStakeHoldersSerializer
(
many
=
True
,
re
quired
=
Fals
e
)
many
=
True
,
re
ad_only
=
Tru
e
)
frm_attachments
=
ChangeRequestFormAttachmentsSerializer
(
many
=
True
,
re
quired
=
Fals
e
)
many
=
True
,
re
ad_only
=
Tru
e
)
frm_details
=
ChangeRequestFormDetailsSerializer
(
many
=
True
,
required
=
False
)
many
=
True
,
read_only
=
True
)
# def update(self, instance, validated_data):
# Update the book instance
# instance.requested_to_template_name = validated_data['requested_to_template_name']
# instance.requested_to_objective = validated_data['requested_to_objective']
# instance.requested_to_target_date = validated_data['requested_to_target_date']
# instance.requested_to_priority = validated_data['requested_to_priority']
# instance.description = validated_data['description']
# instance.status = validated_data['status']
# instance.company_desc = validated_data['company_desc']
# instance.department_desc = validated_data['department_desc']
# instance.requested_desc = validated_data['requested_desc']
# instance.requested_to_template_id = validated_data['requested_to_template_id']
# instance.requested_to_company = validated_data['requested_to_company']
# instance.requested_to_department = validated_data['requested_to_department']
# instance.requested_to_user = validated_data['requested_to_user']
# instance.requested_by_user = validated_data['requested_by_user']
# instance.requested_by_department = validated_data['requested_by_department']
# instance.template_no = validated_data['template_no']
# instance.save()
# Delete any pages not included in the request
# approvers_ids = [item.id for item in validated_data['frm_approvers']]
# for i in validated_data['frm_approvers']:
# print(i)
# print(approvers_ids)
# for page in instance.frm_approvers:
# if page.id not in approvers_ids:
# page.delete()
# # Create or update page instances that are in the request
# for item in validated_data['pages']:
# page = Page(id=item['page_id'], text=item['text'], book=instance)
# page.save()
# return instance
# def update(self, instance, validated_data):
# frm_approvers = validated_data.pop('frm_approvers')
# instance.requested_to_template_name = validated_data.get("requested_to_template_name", instance.requested_to_template_name)
# instance.requested_to_objective = validated_data.get("requested_to_objective", instance.requested_to_objective)
# instance.requested_to_target_date = validated_data.get("requested_to_target_date", instance.requested_to_target_date)
# instance.requested_to_priority = validated_data.get("requested_to_priority", instance.requested_to_priority)
# instance.description = validated_data.get("description", instance.description)
# instance.status = validated_data.get("status", instance.status)
# instance.company_desc = validated_data.get("company_desc", instance.company_desc)
# instance.department_desc = validated_data.get("department_desc", instance.department_desc)
# instance.requested_desc = validated_data.get("requested_desc", instance.requested_desc)
# instance.requested_to_template_id = validated_data.get("requested_to_template_id", instance.requested_to_template_id)
# instance.requested_to_company = validated_data.get("requested_to_company", instance.requested_to_company)
# instance.requested_to_department = validated_data.get("requested_to_department", instance.requested_to_department)
# instance.requested_to_user = validated_data.get("requested_to_user", instance.requested_to_user)
# instance.requested_by_user = validated_data.get("requested_by_user", instance.requested_by_user)
# instance.requested_by_department = validated_data.get("requested_by_department", instance.requested_by_department)
# instance.template_no = validated_data.get("template_no", instance.template_no)
# instance.save()
# print(instance.form_code)
# keep_choices = []
# for choice in frm_approvers:
# if "id" in choice.keys():
# if models.ChangeRequestFormApprovers.objects.filter(id=choice["id"]).exists():
# c = models.ChangeRequestFormApprovers.objects.get(id=choice["id"])
# c.text = choice.get('text', c.text)
# c.save()
# keep_choices.append(c.id)
# else:
# continue
# else:
# c = models.ChangeRequestFormApprovers.objects.create(**choice)
# keep_choices.append(c.id)
# for choice in instance.frm_approvers:
# if choice.id not in keep_choices:
# choice.delete()
# return instance
def
to_representation
(
self
,
instance
):
ret
=
super
()
.
to_representation
(
instance
)
try
:
user
=
self
.
context
[
'request'
]
.
user
print
(
user
.
code
)
id_number
=
user
.
code
current_level
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
ret
[
'form_code'
])
&
Q
(
archived_at
=
None
)
&
Q
(
form_code
=
ret
[
'form_code'
])
(
Q
(
action
=
''
)
|
Q
(
action
=
None
))
)
.
order_by
(
'level'
)
...
...
app/applicationlayer/cms/form/views.py
View file @
2c8f4c62
...
...
@@ -25,10 +25,12 @@ from app.businesslayer.changerequest import change_request
from
app.applicationlayer.cms.utils_cr
import
(
number_generator
,
send_mail_requestor
,
next_approver_email
,
crhistory_save
)
crhistory_save
,
send_mail_vendor
)
from
app.entities
import
enums
from
django.forms.models
import
model_to_dict
import
json
from
django.shortcuts
import
get_object_or_404
APPROVER_MESSAGE
=
settings
.
APPROVER_MESSAGE
...
...
@@ -264,7 +266,6 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
archived_at
=
None
,
form_code
=
str
(
self
.
kwargs
.
get
(
'form_code'
))
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
...
...
@@ -431,21 +432,46 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
)
def
actions
(
self
,
request
,
*
args
,
**
kwargs
):
# get request data
id
=
request
.
data
[
'id'
]
current_user
=
request
.
data
[
'user'
]
# current_user = self.request.user
form_code
=
request
.
data
[
'form_code'
]
delegation
=
request
.
data
[
'delegation'
]
action
=
request
.
data
[
'action'
]
level
=
request
.
data
[
'level'
]
next_level
=
int
(
request
.
data
[
'level'
])
+
1
remarks
=
request
.
data
[
'remarks'
]
# get old data
old_instance
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
pk
=
id
)
.
values
()
old_instance
=
list
(
old_instance
)
# update current row in routing table
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
pk
=
id
)
.
update
(
action
=
action
,
remarks
=
remarks
,
action_date
=
datetime
.
now
())
# get new data
new_instance
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
pk
=
id
)
.
values
()
new_instance
=
list
(
new_instance
)
crenum
=
action
.
upper
()
# save history in form approver
crhistory_save
(
crenum
,
enums
.
CREntitiesEnum
.
CR_FRM_APPROVER
.
value
,
form_code
,
old_instance
,
new_instance
)
# get details of next approver/s
next_approver
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
level
=
str
(
next_level
),
form_code
=
form_code
...
...
@@ -465,17 +491,18 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
remarks
,
level
)
# LOOP on next approver for sending email
for
n_approver
in
next_approver
:
print
(
n_approver
.
user
)
if
n_approver
.
delegation
.
lower
()
==
'vendor/implementor'
:
notification_msg
=
VENDOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
0
]
next_approver_email
(
n_approver
.
user
,
form_code
,
delegation
,
notification_msg
,
action
n_approver
.
user
.
code
,
form_code
,
delegation
,
notification_msg
)
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
str
(
next_level
))
)
.
update
(
...
...
@@ -483,61 +510,53 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
)
elif
action
.
lower
()
==
'rejected'
:
# send email to vendor
if
delegation
.
lower
()
==
'requestor'
:
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
email_code
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
1
]
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
notification_msg
,
action
,
remarks
,
level
)
else
:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
1
]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
requestor_notification_msg
,
action
,
remarks
,
level
)
elif
action
.
lower
()
==
'completed'
:
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
archived_at
=
None
)
&
Q
(
level
=
str
(
next_level
))
)
.
update
(
date_sent
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_COMPLETION_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_COMPLETION_MESSAGE
.
split
(
';'
)[
1
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
requestor_notification_msg
,
action
,
remarks
,
level
)
elif
action
.
lower
()
==
'acknowledged'
:
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
level
=
str
(
next_level
))
)
.
update
(
date_sent
=
datetime
.
now
()
)
# models.ChangeRequestFormApprovers.objects.filter(
# level=str(next_level)
# ).update(
# date_sent=datetime.now().strftime('%Y-%m-%d, %H:%M:%S')
# )
elif
action
.
lower
()
==
'acknowledged'
:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
1
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
requestor_notification_msg
,
action
,
remarks
,
level
)
...
...
@@ -545,29 +564,115 @@ class ChangeRequestFormsViewset(meviewsets.ModelViewSet):
# EMAIL CODE FOR VENDOR
requestor_notification_msg
=
VENDOR_ACCEPTANCE_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
VENDOR_ACCEPTANCE_MESSAGE
.
split
(
';'
)[
1
]
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
requestor_notification_msg
,
action
,
remarks
,
level
)
# elif action.lower() == 'cancelled':
elif
action
.
lower
()
==
'cancelled'
:
# changed form status to cancelled
# action_cancelled(self, request, *args, **kwargs)
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
'Cancelled'
)
# headers = self.get_success_headers(serializer.data)
return
Response
(
"Action performed"
,
status
=
status
.
HTTP_200_OK
)
# return Response(
# serializer.data, status=status.HTTP_201_CREATED
# )
@
action
(
methods
=
[
'PATCH'
],
detail
=
True
,
url_path
=
'save'
,
url_name
=
'save'
)
def
save
(
self
,
request
,
*
args
,
**
kwargs
):
form_code
=
kwargs
[
'form_code'
]
form_header_data
=
request
.
data
# get pk
frm_id
=
models
.
ChangeRequestFormHeader
.
objects
.
get
(
form_code
=
form_code
)
# get data CR Form Header
form_header
=
get_object_or_404
(
models
.
ChangeRequestFormHeader
.
objects
.
all
(),
pk
=
frm_id
.
id
)
serializer
=
serializers
.
ChangeRequestFormHeaderSerializer
(
form_header
,
data
=
form_header_data
)
if
serializer
.
is_valid
():
serializer
.
save
()
# get approvers data
approver_id
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
)
# list existing id to variable
existing_approver_ids
=
[
item
.
id
for
item
in
approver_id
]
frm_approvers
=
form_header_data
[
'frm_approvers'
]
updated_approver_ids
=
[]
# get all ids
for
frm_approver
in
frm_approvers
:
if
"id"
in
frm_approver
:
updated_approver_ids
.
append
(
frm_approver
[
'id'
])
# Delete any approvers not included in the request
for
e
in
existing_approver_ids
:
if
e
not
in
updated_approver_ids
:
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
pk
=
e
)
.
delete
()
# Create or update approver data that are in the request
for
frm_approver
in
frm_approvers
:
print
(
frm_approver
)
if
"id"
in
frm_approver
:
print
(
frm_approver
[
'id'
])
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
pk
=
frm_approver
[
'id'
])
.
update
(
level
=
frm_approver
[
'level'
],
delegation
=
frm_approver
[
'delegation'
],
created
=
datetime
.
now
(),
remarks
=
None
,
action
=
None
,
action_date
=
None
,
date_sent
=
None
,
user
=
frm_approver
[
'user'
],
tmp_approver
=
frm_approver
[
'tmp_approver'
])
else
:
user_instance
=
models
.
User
.
objects
.
get
(
code
=
frm_approver
[
'user'
])
form_code_instance
=
models
.
ChangeRequestFormHeader
.
objects
.
get
(
code
=
form_code
)
models
.
ChangeRequestFormApprovers
.
objects
.
create
(
level
=
frm_approver
[
'level'
],
delegation
=
frm_approver
[
'delegation'
],
created
=
datetime
.
now
(),
user
=
user_instance
,
form_code
=
form_code_instance
)
return
Response
(
serializer
.
data
)
return
Response
(
"
Action perform
ed"
,
"
Change request form successfully re rout
ed"
,
status
=
status
.
HTTP_200_OK
)
@
action
(
methods
=
[
'PATCH'
],
detail
=
True
,
url_path
=
'submit'
,
url_name
=
'submit'
)
def
submit
(
self
,
request
,
*
args
,
**
kwargs
):
form_code
=
kwargs
[
'form_code'
]
return
Response
(
"Change request form successfully re routed"
,
status
=
status
.
HTTP_200_OK
)
class
ChangeRequestFormApproversViewset
(
meviewsets
.
ModelViewSet
):
...
...
@@ -630,9 +735,7 @@ class ChangeRequestFormApproversViewset(meviewsets.ModelViewSet):
# )
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
archived_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
self
.
queryset
=
QuerySetHelper
.
Filter
(
self
)
return
super
(
ChangeRequestFormApproversViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
...
...
@@ -837,17 +940,38 @@ class ChangeRequestFormPost(APIView):
requested_to_template_id
=
generate_tmp
)
# create template approvers
counter
=
0
for
frm_approver
in
frm_approvers
:
frm_approver
[
'form_code'
]
=
frm_id
counter
=
counter
+
1
data_list_approver
.
append
(
frm_approver
)
counter
=
counter
+
1
vendor_data
=
{
'level'
:
counter
,
'delegation'
:
'Vendor/Implementor'
,
'user'
:
form_header
[
'requested_to_user'
],
'form_code'
:
frm_id
}
data_list_approver
.
append
(
vendor_data
)
counter
=
counter
+
1
requestor_data
=
{
'level'
:
counter
,
'delegation'
:
'Requestor'
,
'user'
:
form_header
[
'requested_by_user'
],
'form_code'
:
frm_id
}
data_list_approver
.
append
(
requestor_data
)
serializerApprover
=
serializers
.
ChangeRequestFormApproversSerializer
(
data
=
data_list_approver
,
many
=
True
)
if
serializerApprover
.
is_valid
(
raise_exception
=
True
):
serializerApprover
.
save
()
# create template stakes
for
frm_stake
in
frm_stakes
:
...
...
app/applicationlayer/cms/template/views.py
View file @
2c8f4c62
...
...
@@ -101,8 +101,6 @@ class UserList(APIView):
return
self
.
paginator
.
get_paginated_response
(
data
)
class
ChangeRequestTemplatesViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateHeader
.
objects
.
all
()
...
...
@@ -192,7 +190,7 @@ class ChangeRequestTemplatesViewset(meviewsets.ModelViewSet):
@
transaction
.
atomic
def
partial_update
(
self
,
request
,
*
args
,
**
kwargs
):
partial
=
kwargs
.
pop
(
'partial'
,
False
)
instance
=
self
.
get_object
()
...
...
@@ -204,7 +202,7 @@ class ChangeRequestTemplatesViewset(meviewsets.ModelViewSet):
if
not
tmp_no_exists
:
serializer
=
self
.
get_serializer
(
instance
,
data
=
request
.
data
,
partial
=
partial
)
serializer
.
is_valid
(
raise_exception
=
True
)
old_instance
=
model_to_dict
(
instance
)
self
.
perform_update
(
serializer
)
new_instance
=
serializer
.
data
...
...
app/applicationlayer/cms/utils_cr.py
View file @
2c8f4c62
...
...
@@ -17,7 +17,6 @@ from rest_framework.exceptions import APIException
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
# NOTIFICATION = settings.NOTIFICATION
def
entity_log_bulk
(
queryset
,
entity
,
tbl
):
...
...
@@ -93,16 +92,6 @@ class QuerySetHelper:
)
return
context
.
queryset
# 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 = QuerySetHelper.Sort(self)
@
staticmethod
def
Filter
(
context
):
if
int
(
len
(
context
.
request
.
query_params
))
>
0
:
...
...
@@ -124,7 +113,8 @@ class QuerySetHelper:
def
ApproverStatus
(
status
):
choices
=
[
"pending"
,
"rejected"
,
"approved"
,
"completed"
,
"cancelled"
,
'acknowledged'
,
'accepted'
]
choices
=
[
"pending"
,
"rejected"
,
"approved"
,
"completed"
,
"cancelled"
,
'acknowledged'
,
'accepted'
]
if
status
not
in
choices
:
return
False
else
:
...
...
@@ -139,41 +129,6 @@ def number_generator(prefix, id):
return
autogenerated_no
def
logged_user
(
self
):
# return self.request.META.get('HTTP_ACCOUNT_NO')
return
self
.
request
.
user
def
receiver_body
(
sender_account_no
,
receiver_account_no
,
email_code
,
email_recipient
,
app
,
sent
,
name
,
routing_level
,
status
,
cr_number
,
cr_name
,
company_requestedto
,
department_requestedto
,
priority_level
,
url
):
receiver_data
=
{
"sender_account_no"
:
sender_account_no
,
"receiver_account_no"
:
receiver_account_no
,
"email_code"
:
email_code
,
"email_recipient"
:
email_recipient
,
"app"
:
app
,
"sent"
:
"False"
,
"name"
:
name
,
"routing_level"
:
routing_level
,
"status"
:
status
,
"cr_number"
:
cr_number
,
"cr_name"
:
cr_name
,
"company_requestedto"
:
company_requestedto
,
"department_requestedto"
:
department_requestedto
,
"priority_level"
:
priority_level
,
"url"
:
url
}
return
receiver_data
def
get_template_instance
(
form_code
):
template_instance
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
...
...
@@ -181,97 +136,76 @@ def get_template_instance(form_code):
return
template_instance
def
send_notification
(
form_code
,
cr_number
,
user_id_number
,
user_name
,
message
,
app
,
sender_id_number
,
sender_name
):
notification_data
=
{
"slug"
:
form_code
,
"change_request_template_code"
:
cr_number
,
# (OPENING TAG) receiver credential
"account_no"
:
user_id_number
,
"user"
:
user_name
,
# (CLOSING TAG) receiver credential
"notif_type"
:
"ACTIVITY"
,
"message"
:
message
,
"is_read"
:
False
,
"app"
:
app
,
"sender_account_no"
:
sender_id_number
,
"createdby"
:
sender_name
}
notification
=
requests
.
post
(
NOTIFICATION
,
data
=
notification_data
)
# return notification.status
return
notification
def
send_mail_vendor
(
receiver
,
form_code
,
delegation
,
msg
,
action
,
code
,
def
send_mail_vendor
(
requestor
,
form_code
,
delegation
,
msg
,
action
,
remarks
,
routing_level
):
app
=
'cms'
cr_link
=
f
'{CR_FRONT_LINK}/{form_code}'
template_instance
=
get_template_instance
(
form_code
)
cr_number
=
template_instance
.
requested_to_template_id
template_name
=
template_instance
.
requested_to_template_name
requested_to_company
=
template_instance
.
requested_to_company
requested_to_department
=
template_instance
.
requested_to_department
requested_by_user
=
template_instance
.
requested_by_user
created
=
template_instance
.
created
requested_to_company
=
template_instance
.
requested_to_company
.
code
requested_to_department
=
template_instance
.
requested_to_department
.
code
requested_by_user
=
template_instance
.
requested_by_user
.
code
requested_to_priority
=
template_instance
.
requested_to_priority
vendor_instance
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
delegation
=
"Vendor/Implementor"
)
&
Q
(
form_code
=
form_code
)
)
.
first
()
status
=
template_instance
.
status
requested_to_user
=
template_instance
.
requested_to_user
.
code
# receiver details
vendor
=
get_account_details
(
vendor_instance
.
user
)
requestor_name
=
vendor
[
'name'
]
requestor_email
=
vendor
[
'email'
]
requestor_account_id
=
vendor
[
'id_number'
]
vendor
_instance
=
get_account_details
(
requested_to_
user
)
vendor_name
=
vendor_instance
.
values_list
(
'name'
,
flat
=
True
)[
0
]
vendor_email
=
vendor_instance
.
values_list
(
'email'
,
flat
=
True
)[
0
]
vendor_code
=
vendor_instance
.
values_list
(
'code'
,
flat
=
True
)[
0
]
# sender details
sender_instance
=
get_account_details
(
receiver
)
sender_account_username
=
sender_instance
[
'username'
]
sender_account_id
=
sender_instance
[
'id_number'
]
sender_name
=
sender_instance
[
'name'
]
group
=
get_dept_details
(
requested_to_department
)
group_name
=
group
[
'name'
]
sender_instance
=
get_account_details
(
requestor
)
sender_name
=
sender_instance
.
values_list
(
'name'
,
flat
=
True
)[
0
]
sender_code
=
sender_instance
.
values_list
(
'code'
,
flat
=
True
)[
0
]
sender_email
=
sender_instance
.
values_list
(
'email'
,
flat
=
True
)[
0
]
# department details
department
=
get_dept_details
(
requested_to_department
)
dept_name
=
department
.
values_list
(
'name'
,
flat
=
True
)[
0
]
company
=
get_companies_details
(
requested_to_company
)
company_name
=
company
[
'name'
]
company_name
=
company
.
values_list
(
'name'
,
flat
=
True
)[
0
]
container
=
receiver_body
(
sender_account_id
,
requestor_account_id
,
code
,
requestor_email
,
app
,
"False"
,
requestor_name
,
routing_level
,
action
,
cr_number
,
template_name
,
company_name
,
group_name
,
requested_to_priority
,
cr_link
)
# call sender email
if
action
.
lower
()
==
'rejected'
:
new_body
=
{
"rejected_by"
:
requestor_name
,
"remarks"
:
remarks
}
elif
action
.
lower
()
==
'accepted'
:
new_body
=
{
"approved_by"
:
requestor_name
}
data
=
{
**
container
,
**
new_body
}
email_status
=
requests
.
post
(
EMAIL
,
data
=
data
)
name
=
vendor_name
action_by
=
sender_name
routing_level
=
routing_level
status
=
status
cr_number
=
cr_number
cr_name
=
template_name
company_requestedto
=
company_name
department_requestedto
=
dept_name
priority_level
=
requested_to_priority
url
=
cr_link
remarks
=
remarks
recipient
=
vendor_email
action_type
=
action
delegation_type
=
delegation
admin
=
sender_email
args
=
[
name
,
action_by
,
routing_level
,
status
,
cr_number
,
cr_name
,
company_requestedto
,
department_requestedto
,
priority_level
,
url
,
remarks
,
recipient
,
action_type
,
delegation_type
,
admin
]
main_threading
(
args
,
sender
.
routing_table_actions
)
message
=
f
"{sender_name} {msg} ({template_name})"
send_notification
(
form_code
,
cr_number
,
requestor_account_id
,
requestor_name
,
message
,
app
,
sender_account_id
,
sender_account_username
)
# create notification
notification_create
(
form_code
,
message
,
vendor_code
,
sender_code
)
def
send_mail_requestor
(
current_user
,
...
...
@@ -325,11 +259,12 @@ def send_mail_requestor(current_user,
recipient
=
requestor_email
action_type
=
action
delegation_type
=
delegation
admin
=
sender_email
args
=
[
name
,
action_by
,
routing_level
,
status
,
cr_number
,
cr_name
,
company_requestedto
,
department_requestedto
,
priority_level
,
url
,
re
cipient
,
ac
tion_type
,
admin
]
url
,
re
marks
,
recipient
,
action_type
,
delega
tion_type
,
admin
]
main_threading
(
args
,
sender
.
routing_table_actions
)
...
...
@@ -341,62 +276,63 @@ def send_mail_requestor(current_user,
current_user
)
def
next_approver_email
(
receiver
,
form_code
,
delegation
,
msg
,
action
):
def
next_approver_email
(
receiver
,
form_code
,
delegation
,
msg
):
cr_link
=
f
'{CR_FRONT_LINK}/{form_code}'
template_instance
=
get_template_instance
(
form_code
)
app
=
'cms'
cr_number
=
template_instance
.
requested_to_template_id
template_name
=
template_instance
.
requested_to_template_name
requested_to_company
=
template_instance
.
requested_to_company
requested_to_department
=
template_instance
.
requested_to_department
requested_by_user
=
template_instance
.
requested_by_user
requested_to_company
=
template_instance
.
requested_to_company
.
code
requested_to_department
=
template_instance
.
requested_to_department
.
code
requested_by_user
=
template_instance
.
requested_by_user
.
code
requested_to_priority
=
template_instance
.
requested_to_priority
cr_status
=
template_instance
.
status
# for rec in receiver:
# receiver details
# if action == 'initial':
# next approver details --------------------------------------------------
receiver_instance
=
get_account_details
(
receiver
)
# else:
# receiver_instance = get_account_details(receiver.user)
receiver_name
=
receiver_instance
[
'name'
]
receiver_email
=
receiver_instance
[
'email'
]
receiver_account_id
=
receiver_instance
[
'id_number'
]
receiver_name
=
receiver_instance
.
values_list
(
'name'
,
flat
=
True
)[
0
]
receiver_email
=
receiver_instance
.
values_list
(
'email'
,
flat
=
True
)[
0
]
receiver_code
=
receiver_instance
.
values_list
(
'code'
,
flat
=
True
)[
0
]
#
sender details
#
requestor details --------------------------------------------------
sender_instance
=
get_account_details
(
requested_by_user
)
sender_
account_username
=
sender_instance
[
'username'
]
sender_
account_id
=
sender_instance
[
'id_number'
]
sender_
name
=
sender_instance
[
'name'
]
sender_
email
=
sender_instance
.
values_list
(
'email'
,
flat
=
True
)[
0
]
sender_
name
=
sender_instance
.
values_list
(
'name'
,
flat
=
True
)[
0
]
sender_
code
=
sender_instance
.
values_list
(
'code'
,
flat
=
True
)[
0
]
group
=
get_dept_details
(
requested_to_department
)
group_name
=
group
[
'name'
]
department
=
get_dept_details
(
requested_to_department
)
dept_name
=
department
.
values_list
(
'name'
,
flat
=
True
)[
0
]
company
=
get_companies_details
(
requested_to_company
)
company_name
=
company
[
'name'
]
company_name
=
company
.
values_list
(
'name'
,
flat
=
True
)[
0
]
data
=
receiver_body
(
sender_account_id
,
receiver_account_id
,
code
,
receiver_email
,
app
,
"False"
,
receiver_name
,
1
,
"Pending"
,
cr_number
,
template_name
,
company_name
,
group_name
,
requested_to_priority
,
cr_link
)
email_status
=
requests
.
post
(
EMAIL
,
data
=
data
)
# call sender email
name
=
receiver_name
cr_number
=
cr_number
cr_name
=
template_name
company_requestedto
=
company_name
department_requestedto
=
dept_name
priority_level
=
requested_to_priority
status
=
cr_status
url
=
cr_link
recipient
=
receiver_email
delegation_type
=
delegation
admin
=
sender_email
args
=
[
name
,
cr_number
,
cr_name
,
company_requestedto
,
department_requestedto
,
priority_level
,
status
,
url
,
recipient
,
delegation_type
,
admin
]
main_threading
(
args
,
sender
.
routing_table_actions_required
)
message
=
f
"{sender_name} {msg} ({template_name})"
notif
=
send_notification
(
form_code
,
cr_number
,
receiver_account_id
,
receiver_name
,
message
,
app
,
sender_account_id
,
sender_account_username
)
# create notification
return
True
notification_create
(
form_code
,
message
,
receiver_code
,
sender_code
)
def
cancel_overdue
(
request
):
...
...
app/businesslayer/changerequest/change_request.py
View file @
2c8f4c62
...
...
@@ -21,20 +21,17 @@ def list_by_user(user_id_number):
try
:
approver
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
user
=
user_id_number
)
&
Q
(
archived_at
=
None
)
Q
(
user
=
user_id_number
)
)
approver
=
[
data
.
form_code
for
data
in
approver
]
stake
=
models
.
ChangeRequestFormStakeHolders
.
objects
.
filter
(
Q
(
user
=
user_id_number
)
&
Q
(
archived_at
=
None
)
Q
(
user
=
user_id_number
)
)
stake
=
[
data
.
form_code
for
data
in
stake
]
headers
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
archived_at
=
None
,
requested_by_user
=
user_id_number
)
headers
=
[
data
.
form_code
for
data
in
headers
]
...
...
@@ -61,8 +58,7 @@ def list_by_user(user_id_number):
form_code
=
list
(
set
(
stake
+
approver
+
headers
))
return_queryset
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code__in
=
form_code
,
archived_at
=
None
,
form_code__in
=
form_code
)
exclude
=
return_queryset
.
filter
(
status__iexact
=
'Draft'
,
...
...
app/datalayer/serializer_handler.py
View file @
2c8f4c62
...
...
@@ -26,7 +26,7 @@ def custom_exception_handler(exc, context):
value
=
value
[
0
]
error_message
[
'code'
]
=
response
.
status_code
error_message
[
'status'
]
=
'failed'
error_message
[
'status'
]
=
'failed
kk
'
error_message
[
'message'
]
=
value
response
.
data
=
error_message
...
...
app/entities/enums.py
View file @
2c8f4c62
...
...
@@ -97,6 +97,12 @@ class CREnum(Enum):
RESUBMIT
=
"RESUBMIT"
SUBMIT
=
"SUBMIT"
SAVE
=
"SAVE"
APPROVED
=
"APPROVED"
COMPLETED
=
"COMPLETED"
CANCELLED
=
"CANCELLED"
ACCEPTED
=
"ACCEPTED"
ACKNOWLEDGED
=
"ACKNOWLEDGED"
REJECTED
=
"REJECTED"
class
CREntitiesEnum
(
Enum
):
...
...
app/helper/email_service/sender.py
View file @
2c8f4c62
...
...
@@ -479,7 +479,9 @@ def admin_changepassword(args):
# # html_message=FC
# # )
# RMS-CRAPPROVED ; RMS-CRACKNOWLEDGE ; RMS-CRCOMPLETED ; RMS-CRACCEPTED
# RMS-CRAPPROVED ; RMS-CRACKNOWLEDGE ; RMS-CRCOMPLETED ; RMS-CRACCEPTED ;
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
def
routing_table_actions
(
args
):
name
=
args
[
0
]
action_by
=
args
[
1
]
...
...
@@ -491,92 +493,31 @@ def routing_table_actions(args):
department_requestedto
=
args
[
7
]
priority_level
=
args
[
8
]
url
=
args
[
9
]
remarks
=
args
[
10
]
recipient
=
args
[
10
]
action_type
=
args
[
11
]
admin
=
args
[
12
]
recipient
=
args
[
11
]
action_type
=
args
[
12
]
delegation_type
=
args
[
13
]
admin
=
args
[
14
]
if
a
ction_type
.
lower
()
==
'approved'
:
if
a
rgs
[
12
]
.
lower
()
==
'approved'
:
email_template
=
'RMS-CRAPPROVED.html'
subject
=
'Resource Management System - Change Request Approved'
elif
a
ction_type
.
lower
()
==
'acknowledged'
:
elif
a
rgs
[
12
]
.
lower
()
==
'acknowledged'
:
email_template
=
'RMS-CRACKNOWLEDGE.html'
subject
=
'Resource Management System - Change Request Acknowledged'
elif
a
ction_by
.
lower
()
==
'completed'
:
elif
a
rgs
[
12
]
.
lower
()
==
'completed'
:
email_template
=
'RMS-CRCOMPLETED.html'
subject
=
'Resource Management System - Change Request Completed'
elif
a
ction_type
.
lower
()
==
'accepted'
:
elif
a
rgs
[
12
]
.
lower
()
==
'accepted'
:
email_template
=
'RMS-CRACCEPTED.html'
subject
=
'Resource Management System - Change Request Accepted'
F
=
open
(
os
.
path
.
join
(
settings
.
EMAIL_TEMPLATES_ROOT
,
email_template
),
'r'
)
FC
=
F
.
read
()
FC
=
FC
.
replace
(
'{name}'
,
name
)
FC
=
FC
.
replace
(
'{action_by}'
,
action_by
)
FC
=
FC
.
replace
(
'{routing_level}'
,
routing_level
)
FC
=
FC
.
replace
(
'{status}'
,
status
)
FC
=
FC
.
replace
(
'{cr_number}'
,
cr_number
)
FC
=
FC
.
replace
(
'{cr_name}'
,
cr_name
)
FC
=
FC
.
replace
(
'{company_requestedto}'
,
company_requestedto
)
FC
=
FC
.
replace
(
'{department_requestedto}'
,
department_requestedto
)
FC
=
FC
.
replace
(
'{priority_level}'
,
priority_level
)
FC
=
FC
.
replace
(
'{url}'
,
url
)
try
:
send_mail
(
subject
=
subject
,
message
=
''
,
from_email
=
settings
.
EMAIL_DEFAULT_SENDER
,
recipient_list
=
(
recipient
,),
html_message
=
FC
,
fail_silently
=
False
)
models
.
EmailLogs
.
objects
.
create
(
template
=
email_template
,
recipients
=
recipient
,
content
=
FC
,
is_sent
=
True
,
createdby
=
admin
,
modifiedby
=
admin
)
except
Exception
as
e
:
models
.
EmailLogs
.
objects
.
create
(
template
=
email_template
,
recipients
=
recipient
,
content
=
FC
,
is_sent
=
False
,
createdby
=
admin
,
modifiedby
=
admin
)
return
True
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
def
routing_table_actions_rejected
(
args
):
name
=
args
[
0
]
action_by
=
args
[
1
]
routing_level
=
args
[
2
]
status
=
args
[
3
]
cr_number
=
args
[
4
]
cr_name
=
args
[
5
]
company_requestedto
=
args
[
6
]
department_requestedto
=
args
[
7
]
priority_level
=
args
[
8
]
url
=
args
[
9
]
remarks
=
args
[
10
]
recipient
=
args
[
11
]
rejected_type
=
args
[
12
]
admin
=
args
[
13
]
if
rejected_type
==
'requestor'
:
email_template
=
'RMS-CRREJECTED.html'
subject
=
'Resource Management System - Change Request Rejected'
elif
rejected_type
==
'vendor'
:
email_template
=
'RMS-CRREJECTED-VENDOR.html'
elif
args
[
12
]
.
lower
()
==
'rejected'
:
subject
=
'Resource Management System - Change Request Rejected'
if
args
[
13
]
.
lower
()
==
'requestor'
:
email_template
=
'RMS-CRREJECTED.html'
elif
args
[
13
]
.
lower
()
==
'vendor/implementor'
:
email_template
=
'RMS-CRREJECTED-VENDOR.html'
F
=
open
(
os
.
path
.
join
(
settings
.
EMAIL_TEMPLATES_ROOT
,
email_template
),
'r'
)
...
...
@@ -592,7 +533,9 @@ def routing_table_actions_rejected(args):
FC
=
FC
.
replace
(
'{department_requestedto}'
,
department_requestedto
)
FC
=
FC
.
replace
(
'{priority_level}'
,
priority_level
)
FC
=
FC
.
replace
(
'{url}'
,
url
)
FC
=
FC
.
replace
(
'{remarks}'
,
remarks
)
if
args
[
11
]
.
lower
()
==
'rejected'
:
FC
=
FC
.
replace
(
'{remarks}'
,
remarks
)
try
:
send_mail
(
...
...
@@ -635,20 +578,21 @@ def routing_table_actions_required(args):
url
=
args
[
7
]
recipient
=
args
[
8
]
ac
tion_type
=
args
[
9
]
delega
tion_type
=
args
[
9
]
admin
=
args
[
10
]
if
action_type
==
'requestor'
:
email_template
=
'RMS-ACTIONREQUIRED.html'
subject
=
'Resource Management System - Action Required for Change Request'
elif
action_type
==
'vendor'
:
if
delegation_type
.
lower
()
==
'vendor/implementor'
:
email_template
=
'RMS-ACTIONREQUIRED-VENDOR.html'
subject
=
'Resource Management System - Action Required for Change Request'
else
:
email_template
=
'RMS-ACTIONREQUIRED.html'
subject
=
'Resource Management System - Action Required for Change Request'
F
=
open
(
os
.
path
.
join
(
settings
.
EMAIL_TEMPLATES_ROOT
,
email_template
),
'r'
)
FC
=
F
.
read
()
FC
=
FC
.
replace
(
'{name}'
,
name
)
FC
=
FC
.
replace
(
'{cr_number}'
,
cr_number
)
FC
=
FC
.
replace
(
'{cr_name}'
,
cr_name
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment