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
2e875deb
Commit
2e875deb
authored
Nov 08, 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
7a8bddaa
de9e7054
Changes
34
Show whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
1008 additions
and
902 deletions
+1008
-902
app/applicationlayer/cms/allowed_company/views.py
app/applicationlayer/cms/allowed_company/views.py
+1
-1
app/applicationlayer/cms/auto_email/cancel.py
app/applicationlayer/cms/auto_email/cancel.py
+4
-1
app/applicationlayer/cms/auto_email/overdue.py
app/applicationlayer/cms/auto_email/overdue.py
+12
-13
app/applicationlayer/cms/auto_email/reminder.py
app/applicationlayer/cms/auto_email/reminder.py
+4
-1
app/applicationlayer/cms/form/approver/serializers.py
app/applicationlayer/cms/form/approver/serializers.py
+29
-6
app/applicationlayer/cms/form/header/views.py
app/applicationlayer/cms/form/header/views.py
+29
-347
app/applicationlayer/cms/master/form/department/serializer.py
...applicationlayer/cms/master/form/department/serializer.py
+1
-1
app/applicationlayer/cms/master/form/department/views.py
app/applicationlayer/cms/master/form/department/views.py
+7
-2
app/applicationlayer/cms/template/approver/serializers.py
app/applicationlayer/cms/template/approver/serializers.py
+15
-2
app/applicationlayer/cms/template/header/views.py
app/applicationlayer/cms/template/header/views.py
+6
-0
app/applicationlayer/cms/urls_cms.py
app/applicationlayer/cms/urls_cms.py
+2
-1
app/applicationlayer/cms/utils_cr.py
app/applicationlayer/cms/utils_cr.py
+53
-5
app/applicationlayer/management/application/views.py
app/applicationlayer/management/application/views.py
+1
-1
app/applicationlayer/management/delegation/serializer.py
app/applicationlayer/management/delegation/serializer.py
+11
-0
app/applicationlayer/management/delegation/table_filters.py
app/applicationlayer/management/delegation/table_filters.py
+9
-0
app/applicationlayer/management/delegation/views.py
app/applicationlayer/management/delegation/views.py
+112
-0
app/applicationlayer/management/module/serializer.py
app/applicationlayer/management/module/serializer.py
+1
-1
app/applicationlayer/management/user/views.py
app/applicationlayer/management/user/views.py
+1
-1
app/applicationlayer/master/department/serializer.py
app/applicationlayer/master/department/serializer.py
+10
-1
app/applicationlayer/master/department/views.py
app/applicationlayer/master/department/views.py
+37
-4
app/applicationlayer/urls.py
app/applicationlayer/urls.py
+2
-0
app/applicationlayer/utils.py
app/applicationlayer/utils.py
+4
-9
app/businesslayer/changerequest/change_request.py
app/businesslayer/changerequest/change_request.py
+286
-5
app/businesslayer/department/serializer.py
app/businesslayer/department/serializer.py
+1
-1
app/businesslayer/department/views.py
app/businesslayer/department/views.py
+1
-1
app/entities/enums.py
app/entities/enums.py
+2
-0
app/entities/migrations/0028_auto_20191029_1513.py
app/entities/migrations/0028_auto_20191029_1513.py
+29
-0
app/entities/migrations/0029_auto_20191104_1228.py
app/entities/migrations/0029_auto_20191104_1228.py
+25
-0
app/entities/migrations/0030_auto_20191104_1507.py
app/entities/migrations/0030_auto_20191104_1507.py
+17
-0
app/entities/migrations/0031_auto_20191107_1239.py
app/entities/migrations/0031_auto_20191107_1239.py
+44
-0
app/entities/migrations/0032_auto_20191108_1109.py
app/entities/migrations/0032_auto_20191108_1109.py
+23
-0
app/entities/models.py
app/entities/models.py
+50
-8
app/helper/email_service/sender.py
app/helper/email_service/sender.py
+0
-368
requirements/RMSv2.postman_collection.json
requirements/RMSv2.postman_collection.json
+179
-122
No files found.
app/applicationlayer/cms/allowed_company/views.py
View file @
2e875deb
app/applicationlayer/cms/auto_email/cancel.py
View file @
2e875deb
...
...
@@ -10,11 +10,14 @@ from django.conf import settings
from
datetime
import
timedelta
from
app.helper.email_service
import
sender
from
app.applicationlayer.utils
import
main_threading
from
rest_framework.permissions
import
AllowAny
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
class
CancelTriggerAPIView
(
views
.
APIView
):
permission_classes
=
(
AllowAny
,)
def
get
(
self
,
request
):
date_now
=
datetime
.
now
()
today_mail
=
models
.
CancelTrigger
.
objects
.
filter
(
...
...
app/applicationlayer/cms/auto_email/overdue.py
View file @
2e875deb
...
...
@@ -10,28 +10,32 @@ from django.conf import settings
from
datetime
import
timedelta
from
app.helper.email_service
import
sender
from
app.applicationlayer.utils
import
main_threading
from
rest_framework.permissions
import
AllowAny
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
class
OverdueTriggerAPIView
(
views
.
APIView
):
permission_classes
=
(
AllowAny
,)
def
get
(
self
,
request
):
date_now
=
datetime
.
now
()
today_mail
=
models
.
CancelTrigger
.
objects
.
filter
(
Q
(
auto_cancel_date
=
date_now
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
))
today_mail
=
models
.
OverdueTrigger
.
objects
.
filter
(
Q
(
overdue_date
=
date_now
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
))
&
Q
(
is_sent
=
False
)
)
list_of_emails
=
[]
for
data
in
today_mail
:
if
data
.
is_sent
==
False
and
data
.
form_code
.
status
==
'Pending'
and
data
.
frm_approver
.
is_action
==
True
:
if
data
.
is_sent
==
False
and
(
data
.
form_code
.
status
==
'Pending'
or
data
.
form_code
.
status
==
'Approved'
or
data
.
form_code
.
status
==
'Rejected'
):
cr_link
=
f
'{CR_FRONT_LINK}/{data.form_code}'
requestor_name
=
data
.
form_code
.
requested_by_user
.
name
auto_cancel_date
=
data
.
auto_cancel_date
.
strftime
(
'
%
B
%
d,
%
Y'
)
date_submitted_last_approver
=
data
.
date_submitted_last_approver
.
strftime
(
'
%
B
%
d,
%
Y'
)
approver_pending_action
=
data
.
frm_approver
.
user
.
name
target_date
=
data
.
form_code
.
requested_to_target_date
.
strftime
(
'
%
B
%
d,
%
Y'
)
cr_number
=
data
.
form_code
.
requested_to_template_id
cr_name
=
data
.
form_code
.
requested_to_template_name
company_requestedto
=
data
.
form_code
.
requested_to_company
.
name
...
...
@@ -42,17 +46,12 @@ class OverdueTriggerAPIView(views.APIView):
requestor_recipient
=
data
.
form_code
.
requested_by_user
.
email
admin
=
'Test'
args_requestor
=
[
requestor_name
,
auto_cancel_date
,
date_submitted_last_approver
,
approver_pending_action
,
args_requestor
=
[
requestor_name
,
target_date
,
cr_number
,
cr_name
,
company_requestedto
,
department_requestedto
,
priority_level
,
form_status
,
url
,
requestor_recipient
,
admin
]
main_threading
(
args_requestor
,
sender
.
routing_table_cancelled
)
cancel
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
data
.
form_code
)
.
update
(
status
=
'Cancelled'
)
main_threading
(
args_requestor
,
sender
.
routing_table_overdue
)
list_of_emails
.
append
(
data
.
form_code
.
form_code
)
...
...
app/applicationlayer/cms/auto_email/reminder.py
View file @
2e875deb
...
...
@@ -10,11 +10,14 @@ from django.conf import settings
from
datetime
import
timedelta
from
app.helper.email_service
import
sender
from
app.applicationlayer.utils
import
main_threading
from
rest_framework.permissions
import
AllowAny
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
class
ReminderTriggerAPIView
(
views
.
APIView
):
permission_classes
=
(
AllowAny
,)
def
get
(
self
,
request
):
date_now
=
datetime
.
now
()
next_day
=
date_now
+
timedelta
(
days
=
1
)
...
...
@@ -26,7 +29,7 @@ class ReminderTriggerAPIView(views.APIView):
# print(today_mail)
list_of_emails
=
[]
for
data
in
today_mail
:
if
data
.
frm_approver
.
is_action
==
True
:
if
data
.
frm_approver
.
is_action
==
True
and
data
.
form_code
.
status
==
'Pending'
:
# common details
cr_link
=
f
'{CR_FRONT_LINK}/{data.frm_approver.form_code}'
...
...
app/applicationlayer/cms/form/approver/serializers.py
View file @
2e875deb
...
...
@@ -28,32 +28,44 @@ class ChangeRequestFormApproversSerializer(
"contact_no"
:
instance
.
user
.
contact_no
}
ret
[
'user'
]
=
user_object
ret
[
'delegation'
]
=
{
"id"
:
instance
.
delegation
.
id
,
"code"
:
instance
.
delegation
.
code
,
"name"
:
instance
.
delegation
.
name
}
if
instance
.
form_code
.
status
==
'Draft'
:
if
instance
.
tmp_approver
:
if
instance
.
tmp_approver
.
user
or
instance
.
tmp_approver
.
delegation
.
lower
()
==
'requestor'
:
if
instance
.
tmp_approver
.
user
or
instance
.
tmp_approver
.
delegation
.
name
.
lower
()
==
'requestor'
:
ret
[
'editable_user'
]
=
False
else
:
ret
[
'editable_user'
]
=
True
if
instance
.
tmp_approver
.
company
or
instance
.
tmp_approver
.
delegation
.
lower
()
==
'requestor'
:
if
instance
.
tmp_approver
.
company
or
instance
.
tmp_approver
.
delegation
.
name
.
lower
()
==
'requestor'
:
ret
[
'editable_comp'
]
=
False
else
:
ret
[
'editable_comp'
]
=
True
if
instance
.
tmp_approver
.
department
or
instance
.
tmp_approver
.
delegation
.
lower
()
==
'requestor'
:
if
instance
.
tmp_approver
.
department
or
instance
.
tmp_approver
.
delegation
.
name
.
lower
()
==
'requestor'
:
ret
[
'editable_dept'
]
=
False
else
:
ret
[
'editable_dept'
]
=
True
if
instance
.
tmp_approver
.
delegation
or
instance
.
tmp_approver
.
delegation
.
name
.
lower
()
==
'requestor'
:
ret
[
'editable_deleg'
]
=
False
else
:
ret
[
'editable_deleg'
]
=
True
else
:
ret
[
'editable_user'
]
=
True
ret
[
'editable_comp'
]
=
True
ret
[
'editable_dept'
]
=
True
ret
[
'editable_deleg'
]
=
True
else
:
ret
[
'editable_user'
]
=
False
ret
[
'editable_comp'
]
=
False
ret
[
'editable_dept'
]
=
False
ret
[
'editable_deleg'
]
=
False
return
ret
...
...
@@ -61,13 +73,13 @@ class ChangeRequestFormApproversSerializer(
if
instance
.
form_code
.
status
==
'Draft'
:
if
instance
.
tmp_approver
:
if
instance
.
tmp_approver
.
user
or
instance
.
tmp_approver
.
delegation
.
lower
()
==
'requestor'
:
if
instance
.
tmp_approver
.
user
or
instance
.
tmp_approver
.
delegation
.
name
.
lower
()
==
'requestor'
:
ret
[
'editable_user'
]
=
False
else
:
ret
[
'user'
]
=
None
ret
[
'editable_user'
]
=
True
if
instance
.
tmp_approver
.
company
or
instance
.
tmp_approver
.
delegation
.
lower
()
==
'requestor'
:
if
instance
.
tmp_approver
.
company
or
instance
.
tmp_approver
.
delegation
.
name
.
lower
()
==
'requestor'
:
ret
[
'company'
]
=
{
"id"
:
instance
.
tmp_approver
.
company
.
id
,
"code"
:
instance
.
tmp_approver
.
company
.
code
,
...
...
@@ -79,7 +91,7 @@ class ChangeRequestFormApproversSerializer(
ret
[
'company'
]
=
None
ret
[
'editable_comp'
]
=
True
if
instance
.
tmp_approver
.
department
or
instance
.
tmp_approver
.
delegation
.
lower
()
==
'requestor'
:
if
instance
.
tmp_approver
.
department
or
instance
.
tmp_approver
.
delegation
.
name
.
lower
()
==
'requestor'
:
ret
[
'department'
]
=
{
"id"
:
instance
.
tmp_approver
.
department
.
id
,
"code"
:
instance
.
tmp_approver
.
department
.
code
,
...
...
@@ -90,6 +102,17 @@ class ChangeRequestFormApproversSerializer(
ret
[
'department'
]
=
None
ret
[
'editable_dept'
]
=
True
if
instance
.
tmp_approver
.
delegation
or
instance
.
tmp_approver
.
delegation
.
name
.
lower
()
==
'requestor'
:
ret
[
'delegation'
]
=
{
"id"
:
instance
.
tmp_approver
.
delegation
.
id
,
"code"
:
instance
.
tmp_approver
.
delegation
.
code
,
"name"
:
instance
.
tmp_approver
.
delegation
.
name
}
ret
[
'editable_deleg'
]
=
False
else
:
ret
[
'delegation'
]
=
None
ret
[
'editable_deleg'
]
=
True
else
:
ret
[
'editable_user'
]
=
True
ret
[
'editable_comp'
]
=
True
...
...
app/applicationlayer/cms/form/header/views.py
View file @
2e875deb
...
...
@@ -30,7 +30,9 @@ from app.applicationlayer.cms.utils_cr import (number_generator,
generate_template_id
,
crhistory_create_save
,
entity_log_bulk
,
reminder_trigger_save
)
reminder_trigger_save
,
overdue_trigger_save
,
reset_autoemail_tables
)
from
app.entities
import
enums
from
app.applicationlayer.utils
import
model_to_dict
...
...
@@ -494,100 +496,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
return
Response
(
e
,
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
@
transaction
.
atomic
()
@
action
(
methods
=
[
'PATCH'
],
detail
=
True
,
url_path
=
're_route'
,
url_name
=
're_route'
)
def
re_route
(
self
,
request
,
*
args
,
**
kwargs
):
# generate batchno history
batchno
=
get_max_batchno
(
"batch"
)
# partial update
partial
=
kwargs
.
pop
(
'partial'
,
True
)
instance
=
self
.
get_object
()
form_code
=
kwargs
[
'form_code'
]
status_update
=
{
"status"
:
'Pending'
}
serializer
=
self
.
get_serializer
(
instance
,
data
=
status_update
,
partial
=
partial
)
serializer
.
is_valid
(
raise_exception
=
True
)
old_instance
=
model_to_dict
(
instance
)
self
.
perform_update
(
serializer
)
form_header
=
get_object_or_404
(
models
.
ChangeRequestFormHeader
,
pk
=
instance
.
id
)
new_instance
=
model_to_dict
(
form_header
)
# save history in form header
crhistory_save
(
batchno
,
enums
.
CREnum
.
REROUTE
.
value
,
enums
.
CREnum
.
UPDATE
.
value
,
enums
.
CREntitiesEnum
.
CR_FRM_HEADER
.
value
,
form_code
,
old_instance
,
new_instance
)
approver_data
=
[]
# get all approvers of form
approvers
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
)
for
approver
in
approvers
:
approver_add
=
{
'id'
:
approver
.
id
,
'action'
:
None
,
'remarks'
:
None
,
'date_sent'
:
None
,
'action_date'
:
None
,
'is_action'
:
False
}
approver_data
.
append
(
approver_add
)
change_request
.
form_add_edit_delete
(
approver_data
,
models
.
ChangeRequestFormApprovers
,
enums
.
CREntitiesEnum
.
CR_FRM_APPROVER
.
value
,
ChangeRequestFormApproversSerializer
,
partial
,
self
,
form_code
,
batchno
,
enums
.
CREnum
.
REROUTE
.
value
)
min_level
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
)
.
aggregate
(
Min
(
'level'
))
min_level
=
min_level
.
get
(
'level__min'
)
next_approver_email
(
form_code
,
min_level
)
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
min_level
))
)
.
update
(
date_sent
=
datetime
.
now
()
)
message
=
status_message_response
(
200
,
'success'
,
'Change request form successfully re routed'
,
serializer
.
data
)
return
Response
(
message
,
status
=
status
.
HTTP_200_OK
)
@
transaction
.
atomic
()
@
action
(
methods
=
[
'PATCH'
],
detail
=
True
,
...
...
@@ -688,15 +596,13 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
def
actions
(
self
,
request
,
*
args
,
**
kwargs
):
current_user
=
self
.
request
.
user
.
code
action_body
=
request
.
data
id
=
action_body
.
get
(
'id'
,
False
)
form_code
=
action_body
.
get
(
'form_code'
,
False
)
delegation
=
action_body
.
get
(
'delegation'
,
False
)
#
delegation = action_body.get('delegation', False)
action
=
action_body
.
get
(
'action'
,
False
)
level
=
action_body
.
get
(
'level'
,
False
)
next_level
=
int
(
level
)
+
1
#
level = action_body.get('level', False)
#
next_level = int(level) + 1
remarks
=
action_body
.
get
(
'remarks'
,
False
)
# generate batchno history
...
...
@@ -724,8 +630,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
self
.
perform_update
(
serializer
)
new_instance
=
serializer
.
data
print
(
new_instance
[
'action'
])
crhistory_save
(
batchno
,
enums
.
CREnum
.
ACTION
.
value
,
...
...
@@ -736,248 +640,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
new_instance
)
if
action
.
lower
()
==
'approved'
:
the_next_vendor
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
,
level
=
int
(
next_level
),
delegation
=
'Vendor/Implementor'
)
.
first
()
if
the_next_vendor
:
the_last_vendor
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
,
delegation
=
'Vendor/Implementor'
)
.
order_by
(
'level'
)
.
last
()
if
the_next_vendor
==
the_last_vendor
:
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
'Approved'
)
# NOTIF MSG FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_MESSAGE
.
split
(
';'
)[
0
]
# NOTIF MSG FOR NEXT APPROVER
notification_msg
=
APPROVER_MESSAGE
.
split
(
';'
)[
0
]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
next_approver_email
(
form_code
,
next_level
)
date_now
=
datetime
.
now
()
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
next_level
))
)
.
update
(
date_sent
=
date_now
,
is_action
=
True
)
# update current approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
)
.
update
(
is_action
=
False
)
reminder_trigger_save
(
form_code
,
date_now
,
approver_instance
.
date_sent
)
elif
action
.
lower
()
==
'rejected'
:
# send email to vendor
if
delegation
.
lower
()
==
'requestor'
:
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
notification_msg
,
action
,
remarks
,
level
)
prev_level
=
int
(
level
)
-
1
# reset last vendor details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
prev_level
))
)
.
update
(
is_action
=
True
,
action
=
'Acknowledged'
,
action_date
=
datetime
.
now
(),
date_sent
=
datetime
.
now
()
)
else
:
prev_vendor
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
action
=
'Completed'
)
&
Q
(
delegation
=
'Vendor/Implementor'
)
&
Q
(
level__lte
=
int
(
level
))
)
if
not
prev_vendor
.
count
()
>
0
:
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
'Rejected'
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
else
:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
send_mail_vendor
(
current_user
,
form_code
,
'others'
,
notification_msg
,
action
,
remarks
,
level
)
last_action_vendor
=
prev_vendor
.
last
()
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
code
=
last_action_vendor
)
.
update
(
is_action
=
True
,
action
=
'Acknowledged'
,
action_date
=
datetime
.
now
(),
date_sent
=
datetime
.
now
()
)
level
=
last_action_vendor
.
level
+
1
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level__gte
=
int
(
level
))
)
.
update
(
is_action
=
False
,
action
=
None
,
remarks
=
None
,
action_date
=
None
,
date_sent
=
None
)
elif
action
.
lower
()
==
'completed'
:
the_last_vendor
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
,
delegation
=
'Vendor/Implementor'
)
.
order_by
(
'level'
)
.
last
()
if
(
current_user
==
the_last_vendor
.
user
.
code
and
level
==
the_last_vendor
.
level
):
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
'Approved'
)
else
:
the_next_vendor
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
,
level
=
int
(
next_level
),
delegation
=
'Vendor/Implementor'
)
.
first
()
if
the_next_vendor
:
if
the_next_vendor
.
user
.
code
==
the_last_vendor
.
user
.
code
:
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
'Approved'
)
else
:
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
'Pending'
)
next_approver_email
(
form_code
,
next_level
)
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
level
=
int
(
next_level
))
)
.
update
(
date_sent
=
datetime
.
now
(),
is_action
=
True
)
# update current approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
)
.
update
(
is_action
=
False
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_COMPLETION_MESSAGE
.
split
(
';'
)[
0
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
elif
action
.
lower
()
==
'acknowledged'
:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
0
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
elif
action
.
lower
()
==
'accepted'
:
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
'Completed & Accepted'
)
# EMAIL CODE FOR VENDOR
requestor_notification_msg
=
VENDOR_ACCEPTANCE_MESSAGE
.
split
(
';'
)[
0
]
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
# update is_action for current level
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
)
.
update
(
is_action
=
False
)
elif
action
.
lower
()
==
'cancelled'
:
# changed form status to cancelled
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
'Cancelled'
)
# update is_action for current level
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
)
.
update
(
is_action
=
False
)
change_request
.
cr_routing_actions
(
new_instance
,
current_user
)
# ---------------- removed code
message
=
status_message_response
(
200
,
'success'
,
'Action performed'
,
...
...
@@ -1155,7 +819,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
new_instance
=
model_to_dict
(
form_header
)
print
(
serializer
.
errors
)
#
print(serializer.errors)
# save history in form header
crhistory_create_save
(
...
...
@@ -1225,6 +889,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
next_approver_email
(
form_code
,
min_level
)
date_now
=
datetime
.
now
()
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
min_level
))
...
...
@@ -1233,6 +899,13 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
is_action
=
True
)
# save details for overdue and auto cancellation
overdue_trigger_save
(
form_code
)
# save details for reminder for first approver
reminder_trigger_save
(
form_code
,
date_now
,
date_now
)
serializer
=
self
.
get_serializer
(
instance
)
message
=
status_message_response
(
...
...
@@ -1544,14 +1217,23 @@ class ChangeRequestFormPost(APIView):
next_approver_email
(
frm_id
,
min_level
)
date_now
=
datetime
.
now
()
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
frm_id
)
&
Q
(
level
=
int
(
min_level
))
)
.
update
(
date_sent
=
date
time
.
now
()
,
date_sent
=
date
_now
,
is_action
=
True
)
# save details for overdue and auto cancellation
overdue_trigger_save
(
frm_id
)
# save details for reminder for first approver
reminder_trigger_save
(
frm_id
,
date_now
,
date_now
)
message
=
{
'code'
:
201
,
'status'
:
'success'
,
...
...
app/applicationlayer/cms/master/form/department/serializer.py
View file @
2e875deb
app/applicationlayer/cms/master/form/department/views.py
View file @
2e875deb
...
...
@@ -3,7 +3,7 @@ from rest_framework.response import Response
from
app.applicationlayer.utils
import
model_to_dict
from
rest_framework.filters
import
SearchFilter
,
OrderingFilter
from
django_filters
import
rest_framework
as
filters
from
app.entities.models
import
Department
,
AllowedCompany
from
app.entities.models
import
Department
,
AllowedCompany
,
Delegation
from
app.applicationlayer.utils
import
(
CustomPagination
,
status_message_response
)
...
...
@@ -53,3 +53,8 @@ class ChangeRequestDepartmentFormViewSet(viewsets.ModelViewSet):
serializer
=
self
.
get_serializer
(
queryset
,
many
=
True
)
return
Response
(
serializer
.
data
)
app/applicationlayer/cms/template/approver/serializers.py
View file @
2e875deb
...
...
@@ -48,11 +48,23 @@ class ChangeRequestTemplateApproversSerializer(
else
:
ret
[
'editable_user'
]
=
True
if
instance
.
delegation
.
lower
()
==
'requestor'
:
if
instance
.
delegation
:
ret
[
'delegation'
]
=
{
"id"
:
instance
.
delegation
.
id
,
"code"
:
instance
.
delegation
.
code
,
"name"
:
instance
.
delegation
.
name
}
ret
[
'editable_deleg'
]
=
False
else
:
ret
[
'editable_deleg'
]
=
True
if
instance
.
delegation
.
name
.
lower
()
==
'requestor'
:
ret
[
'editable_user'
]
=
False
ret
[
'editable_comp'
]
=
False
ret
[
'editable_dept'
]
=
False
ret
[
'editable_deleg'
]
=
False
return
ret
except
Exception
as
e
:
...
...
@@ -60,6 +72,7 @@ class ChangeRequestTemplateApproversSerializer(
ret
[
'editable_user'
]
=
True
ret
[
'editable_comp'
]
=
True
ret
[
'editable_dept'
]
=
True
ret
[
'editable_deleg'
]
=
True
return
ret
...
...
app/applicationlayer/cms/template/header/views.py
View file @
2e875deb
...
...
@@ -362,6 +362,12 @@ class ChangeRequestTemplatePost(APIView):
sp1
=
transaction
.
savepoint
()
# nothing will save to db
# cr_prefix = request.data['requested_to_template_id'])
# models.ChangeRequestTemplateHeader.objects.filter(
# requested_to_template_id=cr_prefix
# )
serializer
=
ChangeRequestTemplatesSerializer
(
data
=
template_header_data
)
...
...
app/applicationlayer/cms/urls_cms.py
View file @
2e875deb
...
...
@@ -86,7 +86,8 @@ urlpatterns = [
path
(
'template-user-list/'
,
UserListTemplate
.
as_view
(),
name
=
"User List"
),
# filter endpoints under Allowed Companies table
path
(
'reminder/'
,
reminder
.
ReminderTriggerAPIView
.
as_view
()),
# path('cancelled/', cancel.CancelTriggerAPIView.as_view()),
path
(
'cancelled/'
,
cancel
.
CancelTriggerAPIView
.
as_view
()),
path
(
'overdue/'
,
overdue
.
OverdueTriggerAPIView
.
as_view
()),
]
# urlpatterns += format_suffix_patterns(urlpatterns)
...
...
app/applicationlayer/cms/utils_cr.py
View file @
2e875deb
...
...
@@ -219,7 +219,7 @@ def send_mail_vendor(requestor,
# create notification
notification_create
(
form_code
,
message
,
vendor_code
,
sender_code
)
sender_code
,
'cms'
)
def
send_mail_requestor
(
current_user
,
...
...
@@ -287,7 +287,7 @@ def send_mail_requestor(current_user,
# create notification
notification_create
(
form_code
,
message
,
requestor_code
,
current_user
)
current_user
,
'cms'
)
def
next_approver_email
(
form_code
,
next_level
):
...
...
@@ -361,7 +361,7 @@ def next_approver_email(form_code, next_level):
# create notification
notification_create
(
form_code
,
message
,
receiver_code
,
sender_code
)
sender_code
,
'cms'
)
def
cancel_overdue
(
request
):
...
...
@@ -551,7 +551,8 @@ def reminder_trigger_save(form_code,
date_to_send
=
date_from
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
auto_cancel_date
=
auto_cancel_date
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
date_submitted_last_approver
=
date_submitted_last_approver
,
is_sent
=
False
is_sent
=
False
,
form_code
=
form_instance
)
if
counter
==
0
:
...
...
@@ -560,8 +561,55 @@ def reminder_trigger_save(form_code,
auto_cancel_date
=
auto_cancel_date
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
date_submitted_last_approver
=
date_submitted_last_approver
,
is_sent
=
False
,
frm_approver
=
approver
frm_approver
=
approver
,
cancel_type
=
'from_approval'
)
counter
=
counter
+
1
return
True
def
overdue_trigger_save
(
form_code
):
form_instance
=
models
.
ChangeRequestFormHeader
.
objects
.
get
(
form_code
=
form_code
)
requested_to_target_date
=
form_instance
.
requested_to_target_date
overdue_date
=
requested_to_target_date
+
timedelta
(
days
=
1
)
auto_cancel_date
=
overdue_date
+
timedelta
(
days
=
30
)
models
.
OverdueTrigger
.
objects
.
create
(
form_code
=
form_instance
,
overdue_date
=
overdue_date
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
is_sent
=
False
)
models
.
CancelTrigger
.
objects
.
create
(
form_code
=
form_instance
,
auto_cancel_date
=
auto_cancel_date
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
date_submitted_last_approver
=
None
,
is_sent
=
False
,
frm_approver
=
None
,
cancel_type
=
'from_target_date'
)
return
True
def
reset_autoemail_tables
(
form_code
):
models
.
ReminderTrigger
.
objects
.
filter
(
form_code
=
form_code
)
.
delete
()
models
.
CancelTrigger
.
objects
.
filter
(
form_code
=
form_code
)
.
delete
()
models
.
OverdueTrigger
.
objects
.
filter
(
form_code
=
form_code
)
.
delete
()
return
True
\ No newline at end of file
app/applicationlayer/management/application/views.py
View file @
2e875deb
app/applicationlayer/management/delegation/serializer.py
0 → 100644
View file @
2e875deb
from
rest_framework
import
serializers
from
app.entities.models
import
Delegation
class
DelegationSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
Delegation
fields
=
'__all__'
read_only_fields
=
(
'created'
,
'createdby'
,
'modified'
,
'modifiedby'
,
'code'
,
)
app/applicationlayer/management/delegation/table_filters.py
0 → 100644
View file @
2e875deb
from
django_filters
import
rest_framework
as
filters
from
app.entities.models
import
Delegation
class
DelegationFilterSet
(
filters
.
FilterSet
):
class
Meta
:
model
=
Delegation
fields
=
'__all__'
app/applicationlayer/management/delegation/views.py
0 → 100644
View file @
2e875deb
from
app.entities
import
enums
from
django.db
import
transaction
from
rest_framework
import
viewsets
,
status
from
rest_framework.response
import
Response
from
app.applicationlayer.utils
import
model_to_dict
from
rest_framework.filters
import
SearchFilter
,
OrderingFilter
from
django_filters
import
rest_framework
as
filters
from
app.entities.models
import
Delegation
from
app.applicationlayer.utils
import
(
CustomPagination
,
status_message_response
,
log_save
)
from
django_filters.rest_framework
import
DjangoFilterBackend
from
app.applicationlayer.management.delegation
import
serializer
from
app.applicationlayer.management.delegation.table_filters
import
DelegationFilterSet
from
app.helper
import
decorators
class
DelegationViewSet
(
viewsets
.
ModelViewSet
):
queryset
=
Delegation
.
objects
.
all
()
.
order_by
(
'-created'
)
serializer_class
=
serializer
.
DelegationSerializer
pagination_class
=
CustomPagination
lookup_field
=
'code'
filter_backends
=
(
DjangoFilterBackend
,
SearchFilter
,
OrderingFilter
)
filterset_class
=
DelegationFilterSet
ordering_fields
=
'__all__'
search_fields
=
(
'name'
)
@
transaction
.
atomic
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
self
.
perform_create
(
serializer
)
message
=
status_message_response
(
201
,
'success'
,
'New Delegation created'
,
serializer
.
data
)
return
Response
(
message
)
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
queryset
=
self
.
filter_queryset
(
self
.
get_queryset
())
page
=
self
.
paginate_queryset
(
queryset
)
if
page
is
not
None
:
serializer
=
self
.
get_serializer
(
page
,
many
=
True
)
message
=
status_message_response
(
200
,
'success'
,
'list of Delegation found'
,
serializer
.
data
)
return
self
.
get_paginated_response
(
message
)
serializer
=
self
.
get_serializer
(
queryset
,
many
=
True
)
return
Response
(
serializer
.
data
)
@
decorators
.
error_safe
@
transaction
.
atomic
def
destroy
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
get_object
()
new_instance
=
model_to_dict
(
instance
)
# restrictions
if
(
new_instance
[
'name'
]
.
lower
()
==
'head of department'
or
new_instance
[
'name'
]
.
lower
()
==
'sd/od'
or
new_instance
[
'name'
]
.
lower
()
==
'change control board'
or
new_instance
[
'name'
]
.
lower
()
==
'approver'
or
new_instance
[
'name'
]
.
lower
()
==
'vendor/implementor'
or
new_instance
[
'name'
]
.
lower
()
==
'requestor'
):
print
(
"hello"
)
self
.
perform_destroy
(
instance
)
log_save
(
enums
.
LogEnum
.
DELETED
.
value
,
enums
.
LogEntitiesEnum
.
DELEGATION
.
value
,
new_instance
[
'id'
],
new_instance
,
''
)
return
Response
(
status
=
status
.
HTTP_204_NO_CONTENT
)
@
transaction
.
atomic
def
update
(
self
,
request
,
*
args
,
**
kwargs
):
partial
=
kwargs
.
pop
(
'partial'
,
False
)
instance
=
self
.
get_object
()
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
log_save
(
enums
.
LogEnum
.
DELETED
.
value
,
enums
.
LogEntitiesEnum
.
DELEGATION
.
value
,
old_instance
[
'id'
],
old_instance
,
new_instance
)
return
Response
(
serializer
.
data
)
app/applicationlayer/management/module/serializer.py
View file @
2e875deb
app/applicationlayer/management/user/views.py
View file @
2e875deb
app/applicationlayer/master/department/serializer.py
View file @
2e875deb
from
rest_framework
import
serializers
from
app.entities.models
import
Department
from
app.entities.models
import
Department
,
Delegation
from
app.applicationlayer.utils
import
model_to_dict
...
...
@@ -16,3 +16,12 @@ class AdminDepartmentSerializer(serializers.ModelSerializer):
read_only_fields
=
(
'created'
,
'createdby'
,
'modified'
,
'modifiedby'
,
'code'
,
)
class
DelegationSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
Delegation
fields
=
'__all__'
read_only_fields
=
(
'created'
,
'createdby'
,
'modified'
,
'modifiedby'
,
'code'
,
)
\ No newline at end of file
app/applicationlayer/master/department/views.py
View file @
2e875deb
...
...
@@ -3,20 +3,23 @@ from rest_framework.response import Response
from
app.applicationlayer.utils
import
model_to_dict
from
rest_framework.filters
import
SearchFilter
,
OrderingFilter
from
django_filters
import
rest_framework
as
filters
from
app.entities.models
import
Department
from
app.entities.models
import
Department
,
Delegation
from
app.applicationlayer.utils
import
(
CustomPagination
,
status_message_response
)
from
django_filters.rest_framework
import
DjangoFilterBackend
from
app.applicationlayer.master.department
import
serializer
from
app.applicationlayer.master.department.serializer
import
(
AdminDepartmentSerializer
,
DelegationSerializer
)
from
app.applicationlayer.management.department.table_filters
import
DepartmentFilterSet
from
app.helper.decorators
import
rms
from
rest_framework.decorators
import
action
class
AdminDepartmentViewSet
(
viewsets
.
ModelViewSet
):
queryset
=
Department
.
objects
.
all
()
.
order_by
(
'-created'
)
serializer_class
=
serializer
.
AdminDepartmentSerializer
serializer_class
=
AdminDepartmentSerializer
pagination_class
=
CustomPagination
lookup_field
=
'code'
filter_backends
=
(
DjangoFilterBackend
,
SearchFilter
,
OrderingFilter
)
...
...
@@ -44,7 +47,6 @@ class AdminDepartmentViewSet(viewsets.ModelViewSet):
)
return
self
.
get_paginated_response
(
message
)
except
Exception
as
e
:
# serializer = self.get_serializer(queryset, many=True)
message
=
status_message_response
(
400
,
'failed'
,
...
...
@@ -52,3 +54,34 @@ class AdminDepartmentViewSet(viewsets.ModelViewSet):
''
)
return
Response
(
message
)
@
action
(
detail
=
True
,
methods
=
[
'get'
],
url_path
=
'delegations'
,
name
=
"Delegation Filtered List"
)
def
delegations
(
self
,
request
,
*
args
,
**
kwargs
):
try
:
dept_code
=
kwargs
[
'code'
]
queryset
=
Delegation
.
objects
.
filter
(
department__code
=
dept_code
)
page
=
self
.
paginate_queryset
(
queryset
)
if
page
is
not
None
:
self
.
serializer_class
=
DelegationSerializer
serializer
=
self
.
get_serializer
(
page
,
many
=
True
)
message
=
status_message_response
(
200
,
'success'
,
'list of filtered delegations found'
,
serializer
.
data
)
return
self
.
get_paginated_response
(
message
)
except
Exception
as
e
:
message
=
status_message_response
(
400
,
'failed'
,
str
(
e
),
''
)
return
Response
(
message
)
\ No newline at end of file
app/applicationlayer/urls.py
View file @
2e875deb
...
...
@@ -9,6 +9,7 @@ from app.applicationlayer.management.module.views import ModuleViewSet
from
app.applicationlayer.management.account.views
import
UserViewSet
from
app.businesslayer.company.views
import
AdminCompanyViewSet
from
app.applicationlayer.management.notification.views
import
NotificationsViewset
from
app.applicationlayer.management.delegation.views
import
DelegationViewSet
from
app.applicationlayer.download.accounts.views
import
UserDownloadRequest
from
app.applicationlayer.download.department.views
import
DepartmentDownloadRequest
...
...
@@ -26,6 +27,7 @@ router.register(r'notifications', NotificationsViewset)
router
.
register
(
r'user-download'
,
UserDownloadRequest
)
router
.
register
(
r'department-download'
,
DepartmentDownloadRequest
)
router
.
register
(
r'company-download'
,
CompanyDownloadRequest
)
router
.
register
(
r'delegations'
,
DelegationViewSet
)
urlpatterns
=
(
path
(
''
,
include
(
router
.
urls
)),
...
...
app/applicationlayer/utils.py
View file @
2e875deb
...
...
@@ -161,7 +161,8 @@ def send_broadcast_message(room_name, sender, message):
ws
.
close
()
def
notification_create
(
form_code
,
message
,
account_no
,
sender_account_no
):
def
notification_create
(
form_code
,
message
,
account_no
,
sender_account_no
,
app
):
try
:
...
...
@@ -170,7 +171,7 @@ def notification_create(form_code, message, account_no, sender_account_no):
notif_type
=
'TASK'
,
message
=
message
,
is_read
=
False
,
app
=
'APP-20190909-0000002'
,
app
=
app
,
account_no
=
account_no
,
sender_account_no
=
sender_account_no
)
...
...
@@ -184,12 +185,6 @@ def notification_create(form_code, message, account_no, sender_account_no):
'NEW NOTIFICATIONS'
)
# message = {
# 'code': 200,
# 'status': 'success',
# 'message': 'Notification successfully created!',
# }
# return Response(message, status=status.HTTP_200_OK)
return
True
except
Exception
as
e
:
...
...
app/businesslayer/changerequest/change_request.py
View file @
2e875deb
...
...
@@ -13,14 +13,33 @@ from django.http import Http404
from
django.db.models
import
Q
from
app.applicationlayer.cms.utils_cr
import
(
number_generator
,
crhistory_save
,
entity_log_bulk
,
crhistory_log_bulk_delete
number_generator
,
crhistory_save
,
entity_log_bulk
,
crhistory_log_bulk_delete
,
send_mail_requestor
,
next_approver_email
,
send_mail_vendor
,
crhistory_create_save
,
reminder_trigger_save
,
overdue_trigger_save
,
reset_autoemail_tables
)
from
app.applicationlayer.utils
import
model_to_dict
from
app.entities
import
enums
,
models
from
app.applicationlayer.utils
import
log_save
,
CustomPagination
from
app.applicationlayer.cms.template
import
serializers
from
django.db.models
import
Min
from
django.conf
import
settings
APPROVER_MESSAGE
=
settings
.
APPROVER_MESSAGE
REQUESTOR_MESSAGE
=
settings
.
REQUESTOR_MESSAGE
REQUESTOR_REJECT_MESSAGE
=
settings
.
REQUESTOR_REJECT_MESSAGE
VENDOR_ACKNOWLEDGE_MESSAGE
=
settings
.
VENDOR_ACKNOWLEDGE_MESSAGE
REQUESTOR_ACKNOWLEDGE_MESSAGE
=
settings
.
REQUESTOR_ACKNOWLEDGE_MESSAGE
REQUESTOR_COMPLETION_MESSAGE
=
settings
.
REQUESTOR_COMPLETION_MESSAGE
VENDOR_ACCEPTANCE_MESSAGE
=
settings
.
VENDOR_ACCEPTANCE_MESSAGE
VENDOR_REJECT_MESSAGE
=
settings
.
VENDOR_REJECT_MESSAGE
def
list_by_user
(
user_id_number
):
...
...
@@ -443,7 +462,9 @@ def check_vendor_level(position, routing_level, form_code):
form_code
=
form_code
,
level
=
int
(
routing_level
),
delegation
=
'Vendor/Implementor'
)
)
.
first
()
return
query
elif
position
==
'last'
:
...
...
@@ -452,15 +473,275 @@ def check_vendor_level(position, routing_level, form_code):
delegation
=
'Vendor/Implementor'
)
.
order_by
(
'level'
)
.
last
()
return
query
elif
position
==
'prev'
:
query
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
action
=
'Completed'
)
&
Q
(
delegation
=
'Vendor/Implementor'
)
&
Q
(
level__lte
=
int
(
level
))
Q
(
level__lte
=
int
(
routing_level
))
)
return
query
def
update_form_approver
(
form_code
,
level
,
apprv_type
,
date_now
):
if
apprv_type
==
'next'
:
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
)
.
update
(
date_sent
=
date_now
,
is_action
=
True
)
elif
apprv_type
==
'current'
:
# update current approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
)
.
update
(
is_action
=
False
)
def
update_form_header_status
(
form_code
,
status
):
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
status
)
return
True
def
cr_routing_actions
(
approver_instance
,
current_user
):
form_code
=
approver_instance
[
'form_code'
]
delegation
=
approver_instance
[
'delegation'
]
action
=
approver_instance
[
'action'
]
.
lower
()
level
=
approver_instance
[
'level'
]
next_level
=
int
(
approver_instance
[
'level'
])
+
1
remarks
=
approver_instance
[
'remarks'
]
if
approver_instance
[
'action'
]
.
lower
()
==
'approved'
:
the_next_vendor
=
check_vendor_level
(
'next'
,
next_level
,
form_code
)
if
the_next_vendor
:
the_last_vendor
=
check_vendor_level
(
'last'
,
level
,
form_code
)
# changed form status to Approved
if
the_next_vendor
==
the_last_vendor
:
update_form_header_status
(
form_code
,
'Approved'
)
# NOTIF MSG FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_MESSAGE
.
split
(
';'
)[
0
]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
# def cr_routing_actions(approver_instance):
next_approver_email
(
form_code
,
next_level
)
date_now
=
datetime
.
now
()
# update next approver details
update_form_approver
(
form_code
,
next_level
,
'next'
,
date_now
)
# update current approver details
update_form_approver
(
form_code
,
level
,
'current'
,
date_now
)
#save details for reminder trigger
reminder_trigger_save
(
form_code
,
date_now
,
date_now
)
elif
approver_instance
[
'action'
]
.
lower
()
==
'rejected'
:
# send email to vendor
if
delegation
.
lower
()
==
'requestor'
:
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
# send reject email to vendor
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
notification_msg
,
action
,
remarks
,
level
)
prev_level
=
int
(
level
)
-
1
# reset last vendor details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
prev_level
))
)
.
update
(
is_action
=
True
,
action
=
'Acknowledged'
,
action_date
=
datetime
.
now
(),
date_sent
=
datetime
.
now
()
)
else
:
prev_vendor
=
check_vendor_level
(
'prev'
,
level
,
form_code
)
if
not
prev_vendor
.
count
()
>
0
:
update_form_header_status
(
form_code
,
'Rejected'
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
else
:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
send_mail_vendor
(
current_user
,
form_code
,
'others'
,
notification_msg
,
action
,
remarks
,
level
)
last_action_vendor
=
prev_vendor
.
last
()
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
code
=
last_action_vendor
)
.
update
(
is_action
=
True
,
action
=
'Acknowledged'
,
action_date
=
datetime
.
now
(),
date_sent
=
datetime
.
now
()
)
level
=
last_action_vendor
.
level
+
1
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level__gte
=
int
(
level
))
)
.
update
(
is_action
=
False
,
action
=
None
,
remarks
=
None
,
action_date
=
None
,
date_sent
=
None
)
elif
approver_instance
[
'action'
]
.
lower
()
==
'completed'
:
the_last_vendor
=
check_vendor_level
(
'last'
,
level
,
form_code
)
if
(
current_user
==
the_last_vendor
.
user
.
code
and
level
==
the_last_vendor
.
level
):
update_form_header_status
(
form_code
,
'Approved'
)
else
:
the_next_vendor
=
check_vendor_level
(
'next'
,
next_level
,
form_code
)
if
the_next_vendor
:
if
the_next_vendor
.
user
.
code
==
the_last_vendor
.
user
.
code
:
update_form_header_status
(
form_code
,
'Approved'
)
else
:
update_form_header_status
(
form_code
,
'Pending'
)
next_approver_email
(
form_code
,
next_level
)
date_now
=
datetime
.
now
()
# update next approver details
update_form_approver
(
form_code
,
next_level
,
'next'
,
date_now
)
# update current approver details
update_form_approver
(
form_code
,
level
,
'current'
,
date_now
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_COMPLETION_MESSAGE
.
split
(
';'
)[
0
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
elif
action
.
lower
()
==
'acknowledged'
:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
0
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
elif
action
.
lower
()
==
'accepted'
:
update_form_header_status
(
form_code
,
'Completed & Accepted'
)
# EMAIL CODE FOR VENDOR
requestor_notification_msg
=
VENDOR_ACCEPTANCE_MESSAGE
.
split
(
';'
)[
0
]
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
date_now
=
datetime
.
now
()
# update current approver details
update_form_approver
(
form_code
,
level
,
'current'
,
date_now
)
elif
action
.
lower
()
==
'cancelled'
:
# changed form status to cancelled
update_form_header_status
(
form_code
,
'Cancelled'
)
date_now
=
datetime
.
now
()
# update is_action for current level
update_form_approver
(
form_code
,
level
,
'current'
,
date_now
)
reset_autoemail_tables
(
form_code
)
return
True
app/businesslayer/department/serializer.py
View file @
2e875deb
app/businesslayer/department/views.py
View file @
2e875deb
app/entities/enums.py
View file @
2e875deb
...
...
@@ -29,6 +29,7 @@ class GenerateCode(Enum):
COMPANY
=
'COMPANY'
DEPARTMENT
=
'DEPARTMENT'
USER
=
'USER'
DELEGATION
=
'DELEGATION'
NOTIFICATION
=
'NOTIF'
TEMPLATE
=
'TMP'
TMP_APPROVER
=
'TMPAPR'
...
...
@@ -62,6 +63,7 @@ class LogEntitiesEnum(Enum):
COMPANY
=
"COMPANY"
DEPARTMENT
=
"DEPARTMENT"
MODULE
=
"MODULE"
DELEGATION
=
"DELEGATION"
ChangeRequestTemplateHeader
=
"ChangeRequestTemplateHeader"
ChangeRequestTemplateApprovers
=
"ChangeRequestTemplateApprovers"
ChangeRequestTemplateStakeHolders
=
"ChangeRequestTemplateStakeHolders"
...
...
app/entities/migrations/0028_auto_20191029_1513.py
0 → 100644
View file @
2e875deb
# Generated by Django 2.2 on 2019-10-29 15:13
from
django.db
import
migrations
,
models
import
django.db.models.deletion
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'entities'
,
'0027_assetgroup'
),
]
operations
=
[
migrations
.
AddField
(
model_name
=
'canceltrigger'
,
name
=
'cancel_type'
,
field
=
models
.
CharField
(
blank
=
True
,
max_length
=
255
,
null
=
True
),
),
migrations
.
AddField
(
model_name
=
'remindertrigger'
,
name
=
'form_code'
,
field
=
models
.
ForeignKey
(
blank
=
True
,
null
=
True
,
on_delete
=
django
.
db
.
models
.
deletion
.
PROTECT
,
to
=
'entities.ChangeRequestFormHeader'
,
to_field
=
'form_code'
),
),
migrations
.
AlterField
(
model_name
=
'canceltrigger'
,
name
=
'frm_approver'
,
field
=
models
.
ForeignKey
(
blank
=
True
,
null
=
True
,
on_delete
=
django
.
db
.
models
.
deletion
.
PROTECT
,
to
=
'entities.ChangeRequestFormApprovers'
,
to_field
=
'code'
),
),
]
app/entities/migrations/0029_auto_20191104_1228.py
0 → 100644
View file @
2e875deb
# Generated by Django 2.2 on 2019-11-04 12:28
from
django.db
import
migrations
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'entities'
,
'0028_auto_20191029_1513'
),
]
operations
=
[
migrations
.
AlterModelTable
(
name
=
'canceltrigger'
,
table
=
'trigger_cancel'
,
),
migrations
.
AlterModelTable
(
name
=
'overduetrigger'
,
table
=
'trigger_overdue'
,
),
migrations
.
AlterModelTable
(
name
=
'remindertrigger'
,
table
=
'trigger_reminder'
,
),
]
app/entities/migrations/0030_auto_20191104_1507.py
0 → 100644
View file @
2e875deb
# Generated by Django 2.2 on 2019-11-04 15:07
from
django.db
import
migrations
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'entities'
,
'0029_auto_20191104_1228'
),
]
operations
=
[
migrations
.
AlterModelOptions
(
name
=
'assetgroup'
,
options
=
{
'ordering'
:
[
'-created'
]},
),
]
app/entities/migrations/0031_auto_20191107_1239.py
0 → 100644
View file @
2e875deb
# Generated by Django 2.2 on 2019-11-07 12:39
from
django.db
import
migrations
,
models
import
django.db.models.deletion
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'entities'
,
'0030_auto_20191104_1507'
),
]
operations
=
[
migrations
.
CreateModel
(
name
=
'Delegation'
,
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
)),
(
'code'
,
models
.
CharField
(
max_length
=
255
,
unique
=
True
)),
(
'name'
,
models
.
CharField
(
max_length
=
255
,
unique
=
True
)),
],
options
=
{
'db_table'
:
'delegations'
,
},
),
migrations
.
AlterField
(
model_name
=
'changerequestformapprovers'
,
name
=
'delegation'
,
field
=
models
.
ForeignKey
(
blank
=
True
,
null
=
True
,
on_delete
=
django
.
db
.
models
.
deletion
.
PROTECT
,
to
=
'entities.Delegation'
,
to_field
=
'code'
),
),
migrations
.
AlterField
(
model_name
=
'changerequesttemplateapprovers'
,
name
=
'delegation'
,
field
=
models
.
ForeignKey
(
blank
=
True
,
null
=
True
,
on_delete
=
django
.
db
.
models
.
deletion
.
PROTECT
,
to
=
'entities.Delegation'
,
to_field
=
'code'
),
),
migrations
.
AddField
(
model_name
=
'department'
,
name
=
'delegation'
,
field
=
models
.
ManyToManyField
(
to
=
'entities.Delegation'
),
),
]
app/entities/migrations/0032_auto_20191108_1109.py
0 → 100644
View file @
2e875deb
# Generated by Django 2.2 on 2019-11-08 11:09
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'entities'
,
'0031_auto_20191107_1239'
),
]
operations
=
[
migrations
.
AddField
(
model_name
=
'allowedcompany'
,
name
=
'approve_cr'
,
field
=
models
.
BooleanField
(
default
=
True
),
),
migrations
.
AlterField
(
model_name
=
'entitylog'
,
name
=
'entity'
,
field
=
models
.
CharField
(
choices
=
[(
'USER'
,
'USER'
),
(
'APPLICATION'
,
'APPLICATION'
),
(
'COMPANY'
,
'COMPANY'
),
(
'DEPARTMENT'
,
'DEPARTMENT'
),
(
'MODULE'
,
'MODULE'
),
(
'DELEGATION'
,
'DELEGATION'
),
(
'ChangeRequestTemplateHeader'
,
'ChangeRequestTemplateHeader'
),
(
'ChangeRequestTemplateApprovers'
,
'ChangeRequestTemplateApprovers'
),
(
'ChangeRequestTemplateStakeHolders'
,
'ChangeRequestTemplateStakeHolders'
),
(
'ChangeRequestTemplateAttachments'
,
'ChangeRequestTemplateAttachments'
),
(
'ChangeRequestTemplateDetails'
,
'ChangeRequestTemplateDetails'
),
(
'ChangeRequestFormHeader'
,
'ChangeRequestFormHeader'
),
(
'ChangeRequestFormApprovers'
,
'ChangeRequestFormApprovers'
),
(
'ChangeRequestFormStakeHolders'
,
'ChangeRequestFormStakeHolders'
),
(
'ChangeRequestFormAttachments'
,
'ChangeRequestFormAttachments'
),
(
'ChangeRequestFormDetails'
,
'ChangeRequestFormDetails'
)],
default
=
'Add'
,
max_length
=
50
),
),
]
app/entities/models.py
View file @
2e875deb
...
...
@@ -9,7 +9,6 @@ from . import enums
from
django.utils.text
import
slugify
from
datetime
import
timedelta
# ********************* AUTH TABLES *********************
...
...
@@ -86,6 +85,26 @@ class Module(AuditClass):
Module
.
objects
.
filter
(
id
=
self
.
id
)
.
update
(
code
=
code
)
class
Delegation
(
AuditClass
):
code
=
models
.
CharField
(
unique
=
True
,
max_length
=
255
)
name
=
models
.
CharField
(
unique
=
True
,
max_length
=
255
)
class
Meta
:
db_table
=
'delegations'
def
__str__
(
self
):
return
f
'{self.name}'
def
save
(
self
,
*
args
,
**
kwargs
):
super
(
Delegation
,
self
)
.
save
(
*
args
,
**
kwargs
)
code
=
enums
.
GenerateCode
.
DELEGATION
.
value
code
=
number_generator
(
enums
.
GenerateCode
.
DELEGATION
.
value
,
self
.
id
)
Delegation
.
objects
.
filter
(
id
=
self
.
id
)
.
update
(
code
=
code
)
class
Company
(
AuditClass
):
code
=
models
.
CharField
(
unique
=
True
,
...
...
@@ -129,6 +148,9 @@ class Department(AuditClass):
default
=
'dept'
)
name
=
models
.
CharField
(
max_length
=
255
)
delegation
=
models
.
ManyToManyField
(
Delegation
)
class
Meta
:
db_table
=
'departments'
...
...
@@ -427,7 +449,13 @@ class BaseApprover(models.Model):
on_delete
=
models
.
PROTECT
,
to_field
=
'code'
)
delegation
=
models
.
CharField
(
max_length
=
50
,
blank
=
True
,
null
=
True
)
# delegation = models.CharField(max_length=50, blank=True, null=True)
delegation
=
models
.
ForeignKey
(
Delegation
,
blank
=
True
,
null
=
True
,
on_delete
=
models
.
PROTECT
,
to_field
=
'code'
)
created
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
...
...
@@ -1034,6 +1062,7 @@ class AllowedCompany(models.Model):
create_change_request
=
models
.
BooleanField
(
default
=
True
)
create_change_request_template
=
models
.
BooleanField
(
default
=
True
)
view_all_change_request
=
models
.
BooleanField
(
default
=
True
)
approve_cr
=
models
.
BooleanField
(
default
=
True
)
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
)
deleted_at
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
...
...
@@ -1064,9 +1093,15 @@ class ReminderTrigger(models.Model):
blank
=
True
)
is_sent
=
models
.
BooleanField
(
default
=
False
)
form_code
=
models
.
ForeignKey
(
ChangeRequestFormHeader
,
on_delete
=
models
.
PROTECT
,
to_field
=
'form_code'
,
null
=
True
,
blank
=
True
)
class
Meta
:
db_table
=
'
reminder_trigg
er'
db_table
=
'
trigger_remind
er'
class
CancelTrigger
(
models
.
Model
):
...
...
@@ -1077,7 +1112,9 @@ class CancelTrigger(models.Model):
frm_approver
=
models
.
ForeignKey
(
ChangeRequestFormApprovers
,
on_delete
=
models
.
PROTECT
,
to_field
=
'code'
)
to_field
=
'code'
,
blank
=
True
,
null
=
True
)
auto_cancel_date
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
...
...
@@ -1086,9 +1123,13 @@ class CancelTrigger(models.Model):
date_submitted_last_approver
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
cancel_type
=
models
.
CharField
(
null
=
True
,
blank
=
True
,
max_length
=
255
)
class
Meta
:
db_table
=
'
cancel_trigger
'
db_table
=
'
trigger_cancel
'
class
OverdueTrigger
(
models
.
Model
):
...
...
@@ -1103,7 +1144,7 @@ class OverdueTrigger(models.Model):
default
=
False
)
class
Meta
:
db_table
=
'
overdue_trigger
'
db_table
=
'
trigger_overdue
'
"""
...
...
@@ -1128,6 +1169,7 @@ class AssetGroup(models.Model):
class
Meta
:
db_table
=
'asset_groups'
ordering
=
[
'-created'
]
def
__str__
(
self
):
return
f
'{self.code}'
...
...
app/helper/email_service/sender.py
View file @
2e875deb
...
...
@@ -5,7 +5,6 @@ from app.entities import models
from
django.conf
import
settings
# def account_created(args, username, password, receiver) :
def
account_created
(
args
):
name
=
args
[
0
]
username
=
args
[
1
]
...
...
@@ -51,20 +50,7 @@ def account_created(args):
def
cronjob
(
args
):
# name = args[0]
# username = args[1]
# password = args[2]
# recipient = args[3]
# admin = args[4]
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'RMS-NEWUSER.html'), 'r')
# FC = F.read()
# FC = FC.replace('{name}', name)
# FC = FC.replace('{username}', username)
# FC = FC.replace('{password}', password)
# FC = FC.replace('{url}', settings.FRONT_END_URL + '/cms/profile') #changed
try
:
send_mail
(
subject
=
'Resource Management System: Welcome!'
,
...
...
@@ -145,24 +131,6 @@ def forgot_password(args):
)
# def password_changed(username, date, receiver) :
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'password-changed.html'), 'r')
# FC = F.read()
# FC = FC.replace('[Username]', username)
# FC = FC.replace('[Datetime]', date)
# FC = FC.replace('[URL]', settings.FRONT_END_URL)
# send_mail(
# subject='OB RMS: Password Changed!',
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=[receiver,],
# html_message=FC
# )
def
admin_changepassword
(
args
):
name
=
args
[
0
]
username
=
args
[
1
]
...
...
@@ -188,342 +156,6 @@ def admin_changepassword(args):
)
# def account_created(username, password, receiver) :
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'account-created.html'), 'r')
# FC = F.read()
# FC = FC.replace('[Username]', username)
# FC = FC.replace('[Password]', password)
# FC = FC.replace('[URL]', settings.FRONT_END_URL)
# send_mail(
# subject='OB IMS: Welcome!',
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=[receiver,],
# html_message=FC
# )
# def stock_requisition_new(sr_id,
# sr_no,
# requestor,
# requested_on,
# project,
# remarks,
# receiver,
# requested_items=[],
# purchase_items=[],
# required_date=None):
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'stock-requisition.html'), 'r')
# FC = F.read()
# FC = FC.replace('[SR No]', sr_no)
# FC = FC.replace('[Requestor]', requestor)
# FC = FC.replace('[Requested On]', requested_on)
# FC = FC.replace('[Project]', project)
# FC = FC.replace('[Remarks]', remarks)
# # PRINT SR ITEMS
# if requested_items and len(requested_items) > 0:
# appendedList = ''
# for item in requested_items :
# prodNo = str(item.product.product_no)
# prodName = str(item.product.name)
# brand = str(item.product.brand.name)
# qty = str(item.quantity)
# unit = str(item.product.unit_material.name)
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="sr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# # PRINT PR ITEMS
# if purchase_items and len(purchase_items) > 0 :
# FC = FC.replace('[Required Date]', required_date)
# appendedList = ''
# for item in purchase_items :
# prodNo = str(item.product.product_no)
# prodName = str(item.product.name)
# brand = str(item.product.brand.name)
# qty = str(item.quantity)
# unit = str(item.product.unit_material.name)
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="pr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# urlApprove = f"{settings.FRONT_END_URL}/{'transaction/requisition/approve'}/{sr_id}/basic"
# urlReject = f"{settings.FRONT_END_URL}/{'transaction/requisition/reject'}/{sr_id}/basic"
# FC = FC.replace('ApproveToken', urlApprove)
# FC = FC.replace('RejectToken', urlReject)
# send_mail(
# subject='OB IMS: '+ sr_no +' by ' + requestor,
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=[receiver,],
# html_message=FC
# )
# def stock_requisition_approve(sr_no,
# requestor,
# requestor_email,
# requested_on,
# requestor_contact,
# project,
# remarks,
# approved_by,
# approved_date,
# requested_items=[],
# purchase_items=[],
# required_date=None):
# # requested_items
# # LIST OF "RequisitionApproveItem"
# # purchase_items
# # LIST OF "PurchaseRequestApproveItem"
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'stock-requisition-approved.html'), 'r')
# FC = F.read()
# FC = FC.replace('[SR No]', sr_no)
# FC = FC.replace('[Requestor]', requestor)
# FC = FC.replace('[Requested On]', requested_on)
# FC = FC.replace('[Project]', project)
# FC = FC.replace('[Remarks]', remarks)
# FC = FC.replace('[Approved By]', approved_by)
# FC = FC.replace('[Approved On]', approved_date)
# # PRINT SR ITEMS
# if len(requested_items) > 0 :
# appendedList = ''
# for item in requested_items :
# prodNo = item.requisition_product.product.product_no
# prodName = item.requisition_product.product.name
# brand = item.requisition_product.product.brand.name
# qty = str(item.quantity)
# unit = item.requisition_product.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="sr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# # PRINT PR ITEMS
# if len(purchase_items) > 0 :
# FC = FC.replace('[Required Date]', required_date)
# appendedList = ''
# for item in purchase_items :
# prodNo = item.purchase_request_item.product.product_no
# prodName = item.purchase_request_item.product.name
# brand = item.purchase_request_item.product.brand.name
# qty = str(item.quantity)
# unit = item.purchase_request_item.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="pr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# approver_emails = []
# # roles_receives = ['Receive Stock Requisition Authorization Email',
# # 'Allow Purchase Requests Authorisation',
# # 'Receive Stock Request Email',
# # 'Receive Purchase Request Email']
# # qry = models.User.objects.filter(user_roles__role__code__in=roles_receives).values('email').distinct()
# # for item in qry:
# # approver_emails.append(item['email'])
# approver_emails.append(requestor_email)
# if len(approver_emails) > 0:
# send_mail(
# subject='OB IMS Stock Request: '+ sr_no,
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=approver_emails,
# html_message=FC
# )
# def stock_requisition_reject(sr_no,
# requestor,
# requestor_email,
# requested_on,
# project,
# remarks,
# rejected_reason,
# rejected_by,
# rejected_date,
# requested_items=[],
# purchase_items=[],
# required_date=None):
# # requested_items
# # LIST OF "RequisitionRejectItem"
# # purchase_items
# # LIST OF "PurchaseRequestRejectItem"
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'stock-requisition-rejected.html'), 'r')
# FC = F.read()
# FC = FC.replace('[SR No]', sr_no)
# FC = FC.replace('[Requestor]', requestor)
# FC = FC.replace('[Requested On]', requested_on)
# FC = FC.replace('[Project]', project)
# FC = FC.replace('[Remarks]', remarks)
# FC = FC.replace('[Rejected By]', rejected_by)
# FC = FC.replace('[Rejected On]', rejected_date)
# FC = FC.replace('[Rejected Reason]', rejected_reason)
# # PRINT SR ITEMS
# if len(requested_items) > 0 :
# appendedList = ''
# for item in requested_items :
# prodNo = item.requisition_product.product.product_no
# prodName = item.requisition_product.product.name
# brand = item.requisition_product.product.brand.name
# qty = str(item.quantity)
# unit = item.requisition_product.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="sr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# # PRINT PR ITEMS
# if len(purchase_items) > 0 :
# FC = FC.replace('[Required Date]', required_date)
# appendedList = ''
# for item in purchase_items :
# prodNo = item.purchase_request_item.product.product_no
# prodName = item.purchase_request_item.product.name
# brand = item.purchase_request_item.product.brand.name
# qty = str(item.quantity)
# unit = item.purchase_request_item.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="pr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# approver_emails = []
# # roles_receives = ['Receive Stock Requisition Authorization Email', 'Allow Purchase Requests Authorisation', 'Receive Stock Request Email', 'Receive Purchase Request Email']
# # qry = models.User.objects.filter(user_roles__role__code__in=roles_receives).values('email').distinct()
# # for item in qry :
# # approver_emails.append(item['email'])
# approver_emails.append(requestor_email)
# if len(approver_emails) > 0:
# send_mail(
# subject='OB IMS: '+ sr_no +' by ' + requestor,
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=approver_emails,
# html_message=FC
# )
# # def account_password_reset(username, password, receiver, date_reset) :
# # F = open(os.path.join(EMAIL_TEMPLATES_ROOT, 'reset-password.html'), 'r')
# # FC = F.read()
# # FC = FC.replace('[Username]', username)
# # FC = FC.replace('[Password]', password)
# # FC = FC.replace('[Reset Datetime]', date_reset)
# # send_mail(
# # subject='OB IMS: Password Reset!',
# # message='',
# # from_email=EMAIL_DEFAULT_SENDER,
# # recipient_list=[receiver,],
# # html_message=FC
# # )
# RMS-CRAPPROVED ; RMS-CRACKNOWLEDGE ; RMS-CRCOMPLETED ; RMS-CRACCEPTED ;
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
...
...
requirements/RMSv2.postman_collection.json
View file @
2e875deb
...
...
@@ -497,7 +497,7 @@
],
"body"
:
{
"mode"
:
"raw"
,
"raw"
:
"{
\n
\"
name
\"
:
\"
Business Develsopment
\"
,
\n
\"
company
\"
:
\"
COMPANY-20190923-0000001
\"
\n
}"
"raw"
:
"{
\n
\"
name
\"
:
\"
Product Dept
\"
,
\n
\"
company
\"
:
\"
COMPANY-20190923-0000001
\"
,
\n
\"
delegation
\"
:[2, 3]
\n
}"
},
"url"
:
{
"raw"
:
"{{baseurl}}/management/departments/"
,
...
...
@@ -1111,6 +1111,143 @@
],
"protocolProfileBehavior"
:
{},
"_postman_isSubFolder"
:
true
},
{
"name"
:
"Delegation Management"
,
"item"
:
[
{
"name"
:
"List of Delegations"
,
"request"
:
{
"method"
:
"GET"
,
"header"
:
[],
"url"
:
{
"raw"
:
"{{baseurl}}/management/delegations/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"management"
,
"delegations"
,
""
]
}
},
"response"
:
[]
},
{
"name"
:
"View Delegation"
,
"request"
:
{
"method"
:
"GET"
,
"header"
:
[],
"url"
:
{
"raw"
:
"{{baseurl}}/management/delegations/DELEGATION-20191107-0000002/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"management"
,
"delegations"
,
"DELEGATION-20191107-0000002"
,
""
]
}
},
"response"
:
[]
},
{
"name"
:
"Create Delegation"
,
"request"
:
{
"method"
:
"POST"
,
"header"
:
[
{
"key"
:
"Content-Type"
,
"name"
:
"Content-Type"
,
"value"
:
"application/json"
,
"type"
:
"text"
}
],
"body"
:
{
"mode"
:
"raw"
,
"raw"
:
"{
\n\t\"
name
\"
:
\"
Head of Department
\"\n
}"
,
"options"
:
{
"raw"
:
{
"language"
:
"json"
}
}
},
"url"
:
{
"raw"
:
"{{baseurl}}/management/delegations/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"management"
,
"delegations"
,
""
]
}
},
"response"
:
[]
},
{
"name"
:
"Edit Delegation"
,
"request"
:
{
"method"
:
"PUT"
,
"header"
:
[
{
"key"
:
"Content-Type"
,
"name"
:
"Content-Type"
,
"value"
:
"application/json"
,
"type"
:
"text"
}
],
"body"
:
{
"mode"
:
"raw"
,
"raw"
:
"{
\n\t\"
name
\"
:
\"
SOD/ODs
\"\n
}"
,
"options"
:
{
"raw"
:
{
"language"
:
"json"
}
}
},
"url"
:
{
"raw"
:
"{{baseurl}}/management/delegations/DELEGATION-20191107-0000002/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"management"
,
"delegations"
,
"DELEGATION-20191107-0000002"
,
""
]
}
},
"response"
:
[]
},
{
"name"
:
"Delete Delegation"
,
"request"
:
{
"method"
:
"DELETE"
,
"header"
:
[],
"url"
:
{
"raw"
:
"{{baseurl}}/management/delegations/DELEGATION-20191107-0000001/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"management"
,
"delegations"
,
"DELEGATION-20191107-0000001"
,
""
]
}
},
"response"
:
[]
}
],
"protocolProfileBehavior"
:
{},
"_postman_isSubFolder"
:
true
}
],
"protocolProfileBehavior"
:
{},
...
...
@@ -1158,7 +1295,7 @@
"formdata"
:
[
{
"key"
:
"username"
,
"value"
:
"
ryu
"
,
"value"
:
"
ob-rita
"
,
"type"
:
"text"
},
{
...
...
@@ -1323,7 +1460,7 @@
"response"
:
[]
},
{
"name"
:
"Form Dashboard
Copy
"
,
"name"
:
"Form Dashboard
w/ Filter
"
,
"protocolProfileBehavior"
:
{
"disableBodyPruning"
:
true
},
...
...
@@ -1499,66 +1636,6 @@
}
},
"response"
:
[]
},
{
"name"
:
"Form History"
,
"protocolProfileBehavior"
:
{
"disableBodyPruning"
:
true
},
"request"
:
{
"auth"
:
{
"type"
:
"oauth2"
,
"oauth2"
:
[
{
"key"
:
"accessToken"
,
"value"
:
"cJeBxXT2KVtu7yPUQ5HlESDqTmss8G6m"
,
"type"
:
"string"
},
{
"key"
:
"tokenType"
,
"type"
:
"any"
},
{
"key"
:
"addTokenTo"
,
"value"
:
"header"
,
"type"
:
"string"
}
]
},
"method"
:
"GET"
,
"header"
:
[
{
"key"
:
"Content-Type"
,
"name"
:
"Content-Type"
,
"type"
:
"text"
,
"value"
:
"application/json"
}
],
"body"
:
{
"mode"
:
"raw"
,
"raw"
:
""
},
"url"
:
{
"raw"
:
"{{baseurl}}/change-request-service/form/FRM-20190823-0000002/history/?page=2"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"change-request-service"
,
"form"
,
"FRM-20190823-0000002"
,
"history"
,
""
],
"query"
:
[
{
"key"
:
"page"
,
"value"
:
"2"
}
]
}
},
"response"
:
[]
}
],
"protocolProfileBehavior"
:
{},
...
...
@@ -1581,7 +1658,7 @@
],
"body"
:
{
"mode"
:
"raw"
,
"raw"
:
"{
\r\n
\"
requested_to_template_name
\"
:
\"
XXXXXXX
\"
,
\r\n
\"
requested_to_objective
\"
:
\"
tesa
\"
,
\r\n
\"
requested_to_target_date
\"
:
\"
2020-05-24T04:37:36.611000
\"
,
\r\n
\"
requested_to_priority
\"
:
\"
Normal
\"
,
\r\n
\"
description
\"
:
\"
test
\"
,
\r\n
\"
status
\"
:
\"
Pending
\"
,
\r\n
\"
company_desc
\"
: null,
\r\n
\"
department_desc
\"
: null,
\r\n
\"
requested_desc
\"
: null,
\r\n
\"
requested_to_template_id
\"
:
\"
test555
\"
,
\r\n
\"
requested_to_company
\"
:
\"
COMPANY-2019
0923-0000001
\"
,
\r\n
\"
requested_to_department
\"
:
\"
DEPARTMENT-20191004-0000026
\"
,
\r\n
\"
requested_to_user
\"
:
\"
USER-20191004-0000087
\"
,
\r\n
\"
requested_by_user
\"
:
\"
USER-20191004-0000087
\"
,
\r\n
\"
requested_by_department
\"
:
\"
DEPARTMENT-20191004-0000026
\"
,
\r\n
\"
template_no
\"
:
\"
TMP-20191004-0000044
\"
,
\r\n
\"
frm_approvers
\"
: [
\r\n
\t
{
\r\n
\"
level
\"
: 1,
\r\n
\"
delegation
\"
:
\"
Head of Department
\"
,
\r\n
\"
user
\"
:
\"
USER-20191004-0000082
\"\r\n
\t
}
\r\n
],
\r\n
\"
frm_stakes
\"
: [],
\r\n
\"
frm_attachments
\"
: [],
\r\n
\"
frm_details
\"
: []
\r\n
}"
"raw"
:
"{
\r\n
\"
requested_to_template_name
\"
:
\"
XXXXXXX
\"
,
\r\n
\"
requested_to_objective
\"
:
\"
tesa
\"
,
\r\n
\"
requested_to_target_date
\"
:
\"
2020-05-24T04:37:36.611000
\"
,
\r\n
\"
requested_to_priority
\"
:
\"
Normal
\"
,
\r\n
\"
description
\"
:
\"
test
\"
,
\r\n
\"
status
\"
:
\"
Pending
\"
,
\r\n
\"
company_desc
\"
: null,
\r\n
\"
department_desc
\"
: null,
\r\n
\"
requested_desc
\"
: null,
\r\n
\"
requested_to_template_id
\"
:
\"
test555
\"
,
\r\n
\"
requested_to_company
\"
:
\"
COMPANY-2019
1025-0000017
\"
,
\r\n
\"
requested_to_department
\"
:
\"
DEPARTMENT-20191025-0000050
\"
,
\r\n
\"
requested_to_user
\"
:
\"
USER-20191025-0000150
\"
,
\r\n
\"
requested_by_user
\"
:
\"
USER-20191025-0000151
\"
,
\r\n
\"
requested_by_department
\"
:
\"
DEPARTMENT-20191025-0000050
\"
,
\r\n
\"
template_no
\"
:
\"
TMP-20191025-0000032
\"
,
\r\n
\"
frm_approvers
\"
: [
\r\n
\t
{
\r\n
\"
level
\"
: 1,
\r\n
\"
delegation
\"
:
\"
Head of Department
\"
,
\r\n
\"
user
\"
:
\"
USER-20191025-0000149
\"\r\n
\t
}
\r\n
],
\r\n
\"
frm_stakes
\"
: [],
\r\n
\"
frm_attachments
\"
: [],
\r\n
\"
frm_details
\"
: []
\r\n
}"
},
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/form-post/"
,
...
...
@@ -1603,26 +1680,7 @@
"method"
:
"GET"
,
"header"
:
[],
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/form/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"change-request"
,
"form"
,
""
]
}
},
"response"
:
[]
},
{
"name"
:
"List of Forms Copy"
,
"request"
:
{
"method"
:
"GET"
,
"header"
:
[],
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/form/?date_modified_from=2019-10-11&date_modified_to=2019-10-11"
,
"raw"
:
"{{baseurl}}/change-request/form/?company_requested_to=COMPANY-20191004-0000011&department_requested_to=DEPARTMENT-20191004-0000029&form_type=closed&date_modified_from=2019-10-11&date_modified_to=2019-10-11"
,
"host"
:
[
"{{baseurl}}"
],
...
...
@@ -1634,18 +1692,15 @@
"query"
:
[
{
"key"
:
"company_requested_to"
,
"value"
:
"COMPANY-20191004-0000011"
,
"disabled"
:
true
"value"
:
"COMPANY-20191004-0000011"
},
{
"key"
:
"department_requested_to"
,
"value"
:
"DEPARTMENT-20191004-0000029"
,
"disabled"
:
true
"value"
:
"DEPARTMENT-20191004-0000029"
},
{
"key"
:
"form_type"
,
"value"
:
"closed"
,
"disabled"
:
true
"value"
:
"closed"
},
{
"key"
:
"date_modified_from"
,
...
...
@@ -1680,27 +1735,6 @@
},
"response"
:
[]
},
{
"name"
:
"Re Route for Approval"
,
"request"
:
{
"method"
:
"PATCH"
,
"header"
:
[],
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/form/FRM-20190930-0000035/re_route/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"change-request"
,
"form"
,
"FRM-20190930-0000035"
,
"re_route"
,
""
]
}
},
"response"
:
[]
},
{
"name"
:
"Resubmit"
,
"request"
:
{
...
...
@@ -1736,7 +1770,7 @@
],
"body"
:
{
"mode"
:
"raw"
,
"raw"
:
"{
\r\n
\"
id
\"
:
530,
\r\n
\"
form_code
\"
:
\"
FRM-20191017-0000135
\"
,
\r\n
\"
delegation
\"
:
\"
Head of Department
\"
,
\r\n
\"
action
\"
:
\"
Rejected
\"
,
\r\n
\"
level
\"
:
\"
1
\"
,
\r\n
\"
remarks
\"
:
\"
This is rejected by approver before vendor
\"\r\n
}"
,
"raw"
:
"{
\r\n
\"
id
\"
:
369,
\r\n
\"
form_code
\"
:
\"
FRM-20191025-0000041
\"
,
\r\n
\"
delegation
\"
:
\"
Vendor/Implementor
\"
,
\r\n
\"
action
\"
:
\"
Completed
\"
,
\r\n
\"
level
\"
:
\"
2
\"
,
\r\n
\"
remarks
\"
:
\"
\"\r\n
}"
,
"options"
:
{
"raw"
:
{
"language"
:
"json"
...
...
@@ -1947,14 +1981,14 @@
"raw"
:
""
},
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/form/FRM-201910
07-0000078
/history/"
,
"raw"
:
"{{baseurl}}/change-request/form/FRM-201910
25-0000040
/history/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"change-request"
,
"form"
,
"FRM-201910
07-0000078
"
,
"FRM-201910
25-0000040
"
,
"history"
,
""
]
...
...
@@ -1976,7 +2010,7 @@
],
"body"
:
{
"mode"
:
"raw"
,
"raw"
:
"{
\r\n\t\"
attachments
\"
: [
\r\n\t\t
{
\r\n\t\t\t\"
id
\"
: 2,
\r\n\t\t\t\"
attachment_type
\"
:
\"
Before
\"
,
\r\n\t\t\t\"
attachment_name
\"
:
\"
we
\"
,
\r\n\t\t\t\"
file_name
\"
:
\"
logo_oneberry.png
\"
,
\r\n\t\t\t\"
description
\"
:
\"
we
\"
,
\r\n\t\t\t\"
file_upload
\"
: 140,
\r\n\t\t\t\"
uploaded_by
\"
:
\"
USER-20191004-0000098
\"\r\n\t\t
},
\r\n\t\t
{
\r\n\t\t\t\"
attachment_type
\"
:
\"
hello
\"
,
\r\n\t\t\t\"
attachment_name
\"
:
\"
hello name
\"
,
\r\n\t\t\t\"
file_name
\"
:
\"
logo_oneberry.png
\"
,
\r\n\t\t\t\"
description
\"
:
\"
hello desc
\"
,
\r\n\t\t\t\"
file_upload
\"
: 139
,
\r\n\t\t\t\"
attachment_no
\"
:
\"\"
,
\r\n\t\t\t\"
date_uploaded
\"
:
\"\"
,
\r\n\t\t\t\"
file
\"
:
\"\"
,
\r\n\t\t\t\"
template_no
\"
:
\"\"
,
\r\n\t\t\t\"
upload_no
\"
:
\"\"\r\n\t\t
}
\r\n\t
]
\r\n
}
\r\n
"
,
"raw"
:
"{
\r\n\t\"
attachments
\"
: [
\r\n\t\t
{
\r\n\t\t\t\"
attachment_type
\"
:
\"
Before
\"
,
\r\n\t\t\t\"
attachment_name
\"
:
\"
we
\"
,
\r\n\t\t\t\"
file_name
\"
:
\"
logo_oneberry.png
\"
,
\r\n\t\t\t\"
description
\"
:
\"
we
\"
,
\r\n\t\t\t\"
file_upload
\"
: 302,
\r\n\t\t\t\"
uploaded_by
\"
:
\"
USER-20191004-0000098
\"\r\n\t\t
},
\r\n\t\t
{
\r\n\t\t\t\"
attachment_type
\"
:
\"
hello
\"
,
\r\n\t\t\t\"
attachment_name
\"
:
\"
hello name
\"
,
\r\n\t\t\t\"
file_name
\"
:
\"
logo_oneberry.png
\"
,
\r\n\t\t\t\"
description
\"
:
\"
hello desc
\"
,
\r\n\t\t\t\"
file_upload
\"
: 63
,
\r\n\t\t\t\"
attachment_no
\"
:
\"\"
,
\r\n\t\t\t\"
date_uploaded
\"
:
\"\"
,
\r\n\t\t\t\"
file
\"
:
\"\"
,
\r\n\t\t\t\"
template_no
\"
:
\"\"
,
\r\n\t\t\t\"
upload_no
\"
:
\"\"\r\n\t\t
}
\r\n\t
]
\r\n
}
\r\n
"
,
"options"
:
{
"raw"
:
{
"language"
:
"json"
...
...
@@ -1984,14 +2018,14 @@
}
},
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/form/FRM-201910
04-0000072
/file_upload/"
,
"raw"
:
"{{baseurl}}/change-request/form/FRM-201910
29-0000171
/file_upload/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"change-request"
,
"form"
,
"FRM-201910
04-0000072
"
,
"FRM-201910
29-0000171
"
,
"file_upload"
,
""
]
...
...
@@ -2272,14 +2306,14 @@
"method"
:
"GET"
,
"header"
:
[],
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/template/TMP-2019102
2-000009
2/"
,
"raw"
:
"{{baseurl}}/change-request/template/TMP-2019102
5-000003
2/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"change-request"
,
"template"
,
"TMP-2019102
2-000009
2"
,
"TMP-2019102
5-000003
2"
,
""
]
}
...
...
@@ -2805,7 +2839,7 @@
"raw"
:
""
},
"url"
:
{
"raw"
:
"{{baseurl}}/management/notifications/?account_no=USER-2019
0927-0000011
"
,
"raw"
:
"{{baseurl}}/management/notifications/?account_no=USER-2019
1025-0000155&app=ams
"
,
"host"
:
[
"{{baseurl}}"
],
...
...
@@ -2817,7 +2851,11 @@
"query"
:
[
{
"key"
:
"account_no"
,
"value"
:
"USER-20190927-0000011"
"value"
:
"USER-20191025-0000155"
},
{
"key"
:
"app"
,
"value"
:
"ams"
}
]
}
...
...
@@ -3070,6 +3108,25 @@
}
},
"response"
:
[]
},
{
"name"
:
"List Asset Group"
,
"request"
:
{
"method"
:
"GET"
,
"header"
:
[],
"url"
:
{
"raw"
:
"{{baseurl}}/asset-management/asset-group/"
,
"host"
:
[
"{{baseurl}}"
],
"path"
:
[
"asset-management"
,
"asset-group"
,
""
]
}
},
"response"
:
[]
}
],
"protocolProfileBehavior"
:
{},
...
...
@@ -3084,7 +3141,7 @@
"bearer"
:
[
{
"key"
:
"token"
,
"value"
:
"
1e3ef7cc7a343b5fa0b54bd2d1699cfee6ca6afe
"
,
"value"
:
"
76b9d1a5c987488501f106346dee80e1dc4afeb1
"
,
"type"
:
"string"
}
]
...
...
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