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
Hide 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
...
@@ -47,7 +47,7 @@ class AllowedCompanyViewSet(viewsets.ModelViewSet):
...
@@ -47,7 +47,7 @@ class AllowedCompanyViewSet(viewsets.ModelViewSet):
'list of Users found'
,
'list of Users found'
,
serializer
.
data
serializer
.
data
)
)
return
self
.
get_paginated_response
(
message
)
return
self
.
get_paginated_response
(
message
)
serializer
=
self
.
get_serializer
(
queryset
,
many
=
True
)
serializer
=
self
.
get_serializer
(
queryset
,
many
=
True
)
...
...
app/applicationlayer/cms/auto_email/cancel.py
View file @
2e875deb
...
@@ -10,11 +10,14 @@ from django.conf import settings
...
@@ -10,11 +10,14 @@ from django.conf import settings
from
datetime
import
timedelta
from
datetime
import
timedelta
from
app.helper.email_service
import
sender
from
app.helper.email_service
import
sender
from
app.applicationlayer.utils
import
main_threading
from
app.applicationlayer.utils
import
main_threading
from
rest_framework.permissions
import
AllowAny
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
class
CancelTriggerAPIView
(
views
.
APIView
):
class
CancelTriggerAPIView
(
views
.
APIView
):
permission_classes
=
(
AllowAny
,)
def
get
(
self
,
request
):
def
get
(
self
,
request
):
date_now
=
datetime
.
now
()
date_now
=
datetime
.
now
()
today_mail
=
models
.
CancelTrigger
.
objects
.
filter
(
today_mail
=
models
.
CancelTrigger
.
objects
.
filter
(
...
@@ -53,7 +56,7 @@ class CancelTriggerAPIView(views.APIView):
...
@@ -53,7 +56,7 @@ class CancelTriggerAPIView(views.APIView):
cancel
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
cancel
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
data
.
form_code
form_code
=
data
.
form_code
)
.
update
(
status
=
'Cancelled'
)
)
.
update
(
status
=
'Cancelled'
)
list_of_emails
.
append
(
data
.
form_code
.
form_code
)
list_of_emails
.
append
(
data
.
form_code
.
form_code
)
today_mail
.
update
(
is_sent
=
True
)
today_mail
.
update
(
is_sent
=
True
)
...
...
app/applicationlayer/cms/auto_email/overdue.py
View file @
2e875deb
...
@@ -10,28 +10,32 @@ from django.conf import settings
...
@@ -10,28 +10,32 @@ from django.conf import settings
from
datetime
import
timedelta
from
datetime
import
timedelta
from
app.helper.email_service
import
sender
from
app.helper.email_service
import
sender
from
app.applicationlayer.utils
import
main_threading
from
app.applicationlayer.utils
import
main_threading
from
rest_framework.permissions
import
AllowAny
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
class
OverdueTriggerAPIView
(
views
.
APIView
):
class
OverdueTriggerAPIView
(
views
.
APIView
):
permission_classes
=
(
AllowAny
,)
def
get
(
self
,
request
):
def
get
(
self
,
request
):
date_now
=
datetime
.
now
()
date_now
=
datetime
.
now
()
today_mail
=
models
.
CancelTrigger
.
objects
.
filter
(
today_mail
=
models
.
OverdueTrigger
.
objects
.
filter
(
Q
(
auto_cancel_date
=
date_now
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
))
Q
(
overdue_date
=
date_now
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
))
&
Q
(
is_sent
=
False
)
)
)
list_of_emails
=
[]
list_of_emails
=
[]
for
data
in
today_mail
:
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}'
cr_link
=
f
'{CR_FRONT_LINK}/{data.form_code}'
requestor_name
=
data
.
form_code
.
requested_by_user
.
name
requestor_name
=
data
.
form_code
.
requested_by_user
.
name
auto_cancel_date
=
data
.
auto_cancel_date
.
strftime
(
'
%
B
%
d,
%
Y'
)
target_date
=
data
.
form_code
.
requested_to_target_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
cr_number
=
data
.
form_code
.
requested_to_template_id
cr_number
=
data
.
form_code
.
requested_to_template_id
cr_name
=
data
.
form_code
.
requested_to_template_name
cr_name
=
data
.
form_code
.
requested_to_template_name
company_requestedto
=
data
.
form_code
.
requested_to_company
.
name
company_requestedto
=
data
.
form_code
.
requested_to_company
.
name
...
@@ -42,17 +46,12 @@ class OverdueTriggerAPIView(views.APIView):
...
@@ -42,17 +46,12 @@ class OverdueTriggerAPIView(views.APIView):
requestor_recipient
=
data
.
form_code
.
requested_by_user
.
email
requestor_recipient
=
data
.
form_code
.
requested_by_user
.
email
admin
=
'Test'
admin
=
'Test'
args_requestor
=
[
requestor_name
,
auto_cancel_date
,
args_requestor
=
[
requestor_name
,
target_date
,
date_submitted_last_approver
,
approver_pending_action
,
cr_number
,
cr_name
,
company_requestedto
,
cr_number
,
cr_name
,
company_requestedto
,
department_requestedto
,
priority_level
,
form_status
,
url
,
department_requestedto
,
priority_level
,
form_status
,
url
,
requestor_recipient
,
admin
]
requestor_recipient
,
admin
]
main_threading
(
args_requestor
,
sender
.
routing_table_cancelled
)
main_threading
(
args_requestor
,
sender
.
routing_table_overdue
)
cancel
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
data
.
form_code
)
.
update
(
status
=
'Cancelled'
)
list_of_emails
.
append
(
data
.
form_code
.
form_code
)
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
...
@@ -10,11 +10,14 @@ from django.conf import settings
from
datetime
import
timedelta
from
datetime
import
timedelta
from
app.helper.email_service
import
sender
from
app.helper.email_service
import
sender
from
app.applicationlayer.utils
import
main_threading
from
app.applicationlayer.utils
import
main_threading
from
rest_framework.permissions
import
AllowAny
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
class
ReminderTriggerAPIView
(
views
.
APIView
):
class
ReminderTriggerAPIView
(
views
.
APIView
):
permission_classes
=
(
AllowAny
,)
def
get
(
self
,
request
):
def
get
(
self
,
request
):
date_now
=
datetime
.
now
()
date_now
=
datetime
.
now
()
next_day
=
date_now
+
timedelta
(
days
=
1
)
next_day
=
date_now
+
timedelta
(
days
=
1
)
...
@@ -26,7 +29,7 @@ class ReminderTriggerAPIView(views.APIView):
...
@@ -26,7 +29,7 @@ class ReminderTriggerAPIView(views.APIView):
# print(today_mail)
# print(today_mail)
list_of_emails
=
[]
list_of_emails
=
[]
for
data
in
today_mail
:
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
# common details
cr_link
=
f
'{CR_FRONT_LINK}/{data.frm_approver.form_code}'
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(
...
@@ -28,32 +28,44 @@ class ChangeRequestFormApproversSerializer(
"contact_no"
:
instance
.
user
.
contact_no
"contact_no"
:
instance
.
user
.
contact_no
}
}
ret
[
'user'
]
=
user_object
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
.
form_code
.
status
==
'Draft'
:
if
instance
.
tmp_approver
:
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
ret
[
'editable_user'
]
=
False
else
:
else
:
ret
[
'editable_user'
]
=
True
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
ret
[
'editable_comp'
]
=
False
else
:
else
:
ret
[
'editable_comp'
]
=
True
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
ret
[
'editable_dept'
]
=
False
else
:
else
:
ret
[
'editable_dept'
]
=
True
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
:
else
:
ret
[
'editable_user'
]
=
True
ret
[
'editable_user'
]
=
True
ret
[
'editable_comp'
]
=
True
ret
[
'editable_comp'
]
=
True
ret
[
'editable_dept'
]
=
True
ret
[
'editable_dept'
]
=
True
ret
[
'editable_deleg'
]
=
True
else
:
else
:
ret
[
'editable_user'
]
=
False
ret
[
'editable_user'
]
=
False
ret
[
'editable_comp'
]
=
False
ret
[
'editable_comp'
]
=
False
ret
[
'editable_dept'
]
=
False
ret
[
'editable_dept'
]
=
False
ret
[
'editable_deleg'
]
=
False
return
ret
return
ret
...
@@ -61,13 +73,13 @@ class ChangeRequestFormApproversSerializer(
...
@@ -61,13 +73,13 @@ class ChangeRequestFormApproversSerializer(
if
instance
.
form_code
.
status
==
'Draft'
:
if
instance
.
form_code
.
status
==
'Draft'
:
if
instance
.
tmp_approver
:
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
ret
[
'editable_user'
]
=
False
else
:
else
:
ret
[
'user'
]
=
None
ret
[
'user'
]
=
None
ret
[
'editable_user'
]
=
True
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'
]
=
{
ret
[
'company'
]
=
{
"id"
:
instance
.
tmp_approver
.
company
.
id
,
"id"
:
instance
.
tmp_approver
.
company
.
id
,
"code"
:
instance
.
tmp_approver
.
company
.
code
,
"code"
:
instance
.
tmp_approver
.
company
.
code
,
...
@@ -79,7 +91,7 @@ class ChangeRequestFormApproversSerializer(
...
@@ -79,7 +91,7 @@ class ChangeRequestFormApproversSerializer(
ret
[
'company'
]
=
None
ret
[
'company'
]
=
None
ret
[
'editable_comp'
]
=
True
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'
]
=
{
ret
[
'department'
]
=
{
"id"
:
instance
.
tmp_approver
.
department
.
id
,
"id"
:
instance
.
tmp_approver
.
department
.
id
,
"code"
:
instance
.
tmp_approver
.
department
.
code
,
"code"
:
instance
.
tmp_approver
.
department
.
code
,
...
@@ -90,6 +102,17 @@ class ChangeRequestFormApproversSerializer(
...
@@ -90,6 +102,17 @@ class ChangeRequestFormApproversSerializer(
ret
[
'department'
]
=
None
ret
[
'department'
]
=
None
ret
[
'editable_dept'
]
=
True
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
:
else
:
ret
[
'editable_user'
]
=
True
ret
[
'editable_user'
]
=
True
ret
[
'editable_comp'
]
=
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,
...
@@ -30,7 +30,9 @@ from app.applicationlayer.cms.utils_cr import (number_generator,
generate_template_id
,
generate_template_id
,
crhistory_create_save
,
crhistory_create_save
,
entity_log_bulk
,
entity_log_bulk
,
reminder_trigger_save
)
reminder_trigger_save
,
overdue_trigger_save
,
reset_autoemail_tables
)
from
app.entities
import
enums
from
app.entities
import
enums
from
app.applicationlayer.utils
import
model_to_dict
from
app.applicationlayer.utils
import
model_to_dict
...
@@ -227,7 +229,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -227,7 +229,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
id_number
=
self
.
request
.
user
.
code
id_number
=
self
.
request
.
user
.
code
self
.
queryset
=
change_request
.
list_by_user
(
id_number
)
self
.
queryset
=
change_request
.
list_by_user
(
id_number
)
self
.
queryset
=
change_request
.
filter_status
(
self
.
queryset
=
change_request
.
filter_status
(
self
.
queryset
,
self
.
queryset
,
request
.
query_params
.
get
(
'status'
)
request
.
query_params
.
get
(
'status'
)
...
@@ -493,100 +495,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -493,100 +495,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
except
Exception
as
e
:
except
Exception
as
e
:
return
Response
(
e
,
return
Response
(
e
,
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
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
()
@
transaction
.
atomic
()
@
action
(
@
action
(
...
@@ -688,15 +596,13 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -688,15 +596,13 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
def
actions
(
self
,
request
,
*
args
,
**
kwargs
):
def
actions
(
self
,
request
,
*
args
,
**
kwargs
):
current_user
=
self
.
request
.
user
.
code
current_user
=
self
.
request
.
user
.
code
action_body
=
request
.
data
action_body
=
request
.
data
id
=
action_body
.
get
(
'id'
,
False
)
id
=
action_body
.
get
(
'id'
,
False
)
form_code
=
action_body
.
get
(
'form_code'
,
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
)
action
=
action_body
.
get
(
'action'
,
False
)
level
=
action_body
.
get
(
'level'
,
False
)
#
level = action_body.get('level', False)
next_level
=
int
(
level
)
+
1
#
next_level = int(level) + 1
remarks
=
action_body
.
get
(
'remarks'
,
False
)
remarks
=
action_body
.
get
(
'remarks'
,
False
)
# generate batchno history
# generate batchno history
...
@@ -724,8 +630,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -724,8 +630,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
self
.
perform_update
(
serializer
)
self
.
perform_update
(
serializer
)
new_instance
=
serializer
.
data
new_instance
=
serializer
.
data
print
(
new_instance
[
'action'
])
crhistory_save
(
crhistory_save
(
batchno
,
batchno
,
enums
.
CREnum
.
ACTION
.
value
,
enums
.
CREnum
.
ACTION
.
value
,
...
@@ -736,248 +640,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -736,248 +640,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
new_instance
new_instance
)
)
if
action
.
lower
()
==
'approved'
:
change_request
.
cr_routing_actions
(
new_instance
,
current_user
)
# ---------------- removed code
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
)
message
=
status_message_response
(
message
=
status_message_response
(
200
,
'success'
,
200
,
'success'
,
'Action performed'
,
'Action performed'
,
...
@@ -1155,7 +819,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -1155,7 +819,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
new_instance
=
model_to_dict
(
form_header
)
new_instance
=
model_to_dict
(
form_header
)
print
(
serializer
.
errors
)
#
print(serializer.errors)
# save history in form header
# save history in form header
crhistory_create_save
(
crhistory_create_save
(
...
@@ -1225,6 +889,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -1225,6 +889,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
next_approver_email
(
form_code
,
min_level
)
next_approver_email
(
form_code
,
min_level
)
date_now
=
datetime
.
now
()
# update next approver details
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
min_level
))
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
min_level
))
...
@@ -1232,7 +898,14 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -1232,7 +898,14 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
date_sent
=
datetime
.
now
(),
date_sent
=
datetime
.
now
(),
is_action
=
True
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
)
serializer
=
self
.
get_serializer
(
instance
)
message
=
status_message_response
(
message
=
status_message_response
(
...
@@ -1544,13 +1217,22 @@ class ChangeRequestFormPost(APIView):
...
@@ -1544,13 +1217,22 @@ class ChangeRequestFormPost(APIView):
next_approver_email
(
frm_id
,
min_level
)
next_approver_email
(
frm_id
,
min_level
)
date_now
=
datetime
.
now
()
# update next approver details
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
frm_id
)
&
Q
(
level
=
int
(
min_level
))
Q
(
form_code
=
frm_id
)
&
Q
(
level
=
int
(
min_level
))
)
.
update
(
)
.
update
(
date_sent
=
date
time
.
now
()
,
date_sent
=
date
_now
,
is_action
=
True
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
=
{
message
=
{
'code'
:
201
,
'code'
:
201
,
...
...
app/applicationlayer/cms/master/form/department/serializer.py
View file @
2e875deb
...
@@ -15,4 +15,4 @@ class AdminDepartmentSerializer(serializers.ModelSerializer):
...
@@ -15,4 +15,4 @@ class AdminDepartmentSerializer(serializers.ModelSerializer):
fields
=
'__all__'
fields
=
'__all__'
read_only_fields
=
(
read_only_fields
=
(
'created'
,
'createdby'
,
'modified'
,
'modifiedby'
,
'code'
,
'created'
,
'createdby'
,
'modified'
,
'modifiedby'
,
'code'
,
)
)
\ No newline at end of file
app/applicationlayer/cms/master/form/department/views.py
View file @
2e875deb
...
@@ -3,7 +3,7 @@ from rest_framework.response import Response
...
@@ -3,7 +3,7 @@ from rest_framework.response import Response
from
app.applicationlayer.utils
import
model_to_dict
from
app.applicationlayer.utils
import
model_to_dict
from
rest_framework.filters
import
SearchFilter
,
OrderingFilter
from
rest_framework.filters
import
SearchFilter
,
OrderingFilter
from
django_filters
import
rest_framework
as
filters
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
(
from
app.applicationlayer.utils
import
(
CustomPagination
,
status_message_response
CustomPagination
,
status_message_response
)
)
...
@@ -39,7 +39,7 @@ class ChangeRequestDepartmentFormViewSet(viewsets.ModelViewSet):
...
@@ -39,7 +39,7 @@ class ChangeRequestDepartmentFormViewSet(viewsets.ModelViewSet):
)
.
values
(
'group_pivots'
)
)
.
values
(
'group_pivots'
)
queryset
=
queryset
.
filter
(
code__in
=
allowed
)
queryset
=
queryset
.
filter
(
code__in
=
allowed
)
page
=
self
.
paginate_queryset
(
queryset
)
page
=
self
.
paginate_queryset
(
queryset
)
if
page
is
not
None
:
if
page
is
not
None
:
serializer
=
self
.
get_serializer
(
page
,
many
=
True
)
serializer
=
self
.
get_serializer
(
page
,
many
=
True
)
...
@@ -53,3 +53,8 @@ class ChangeRequestDepartmentFormViewSet(viewsets.ModelViewSet):
...
@@ -53,3 +53,8 @@ class ChangeRequestDepartmentFormViewSet(viewsets.ModelViewSet):
serializer
=
self
.
get_serializer
(
queryset
,
many
=
True
)
serializer
=
self
.
get_serializer
(
queryset
,
many
=
True
)
return
Response
(
serializer
.
data
)
return
Response
(
serializer
.
data
)
app/applicationlayer/cms/template/approver/serializers.py
View file @
2e875deb
...
@@ -48,18 +48,31 @@ class ChangeRequestTemplateApproversSerializer(
...
@@ -48,18 +48,31 @@ class ChangeRequestTemplateApproversSerializer(
else
:
else
:
ret
[
'editable_user'
]
=
True
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_user'
]
=
False
ret
[
'editable_comp'
]
=
False
ret
[
'editable_comp'
]
=
False
ret
[
'editable_dept'
]
=
False
ret
[
'editable_dept'
]
=
False
ret
[
'editable_deleg'
]
=
False
return
ret
return
ret
except
Exception
as
e
:
except
Exception
as
e
:
ret
[
'editable_user'
]
=
True
ret
[
'editable_user'
]
=
True
ret
[
'editable_comp'
]
=
True
ret
[
'editable_comp'
]
=
True
ret
[
'editable_dept'
]
=
True
ret
[
'editable_dept'
]
=
True
ret
[
'editable_deleg'
]
=
True
return
ret
return
ret
...
...
app/applicationlayer/cms/template/header/views.py
View file @
2e875deb
...
@@ -361,6 +361,12 @@ class ChangeRequestTemplatePost(APIView):
...
@@ -361,6 +361,12 @@ class ChangeRequestTemplatePost(APIView):
}
}
sp1
=
transaction
.
savepoint
()
# nothing will save to db
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
(
serializer
=
ChangeRequestTemplatesSerializer
(
data
=
template_header_data
)
data
=
template_header_data
)
...
...
app/applicationlayer/cms/urls_cms.py
View file @
2e875deb
...
@@ -86,7 +86,8 @@ urlpatterns = [
...
@@ -86,7 +86,8 @@ urlpatterns = [
path
(
'template-user-list/'
,
UserListTemplate
.
as_view
(),
name
=
"User List"
),
path
(
'template-user-list/'
,
UserListTemplate
.
as_view
(),
name
=
"User List"
),
# filter endpoints under Allowed Companies table
# filter endpoints under Allowed Companies table
path
(
'reminder/'
,
reminder
.
ReminderTriggerAPIView
.
as_view
()),
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)
# urlpatterns += format_suffix_patterns(urlpatterns)
...
...
app/applicationlayer/cms/utils_cr.py
View file @
2e875deb
...
@@ -219,7 +219,7 @@ def send_mail_vendor(requestor,
...
@@ -219,7 +219,7 @@ def send_mail_vendor(requestor,
# create notification
# create notification
notification_create
(
form_code
,
message
,
vendor_code
,
notification_create
(
form_code
,
message
,
vendor_code
,
sender_code
)
sender_code
,
'cms'
)
def
send_mail_requestor
(
current_user
,
def
send_mail_requestor
(
current_user
,
...
@@ -287,7 +287,7 @@ def send_mail_requestor(current_user,
...
@@ -287,7 +287,7 @@ def send_mail_requestor(current_user,
# create notification
# create notification
notification_create
(
form_code
,
message
,
requestor_code
,
notification_create
(
form_code
,
message
,
requestor_code
,
current_user
)
current_user
,
'cms'
)
def
next_approver_email
(
form_code
,
next_level
):
def
next_approver_email
(
form_code
,
next_level
):
...
@@ -361,7 +361,7 @@ def next_approver_email(form_code, next_level):
...
@@ -361,7 +361,7 @@ def next_approver_email(form_code, next_level):
# create notification
# create notification
notification_create
(
form_code
,
message
,
receiver_code
,
notification_create
(
form_code
,
message
,
receiver_code
,
sender_code
)
sender_code
,
'cms'
)
def
cancel_overdue
(
request
):
def
cancel_overdue
(
request
):
...
@@ -551,7 +551,8 @@ def reminder_trigger_save(form_code,
...
@@ -551,7 +551,8 @@ def reminder_trigger_save(form_code,
date_to_send
=
date_from
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
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'
),
auto_cancel_date
=
auto_cancel_date
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
date_submitted_last_approver
=
date_submitted_last_approver
,
date_submitted_last_approver
=
date_submitted_last_approver
,
is_sent
=
False
is_sent
=
False
,
form_code
=
form_instance
)
)
if
counter
==
0
:
if
counter
==
0
:
...
@@ -560,8 +561,55 @@ def reminder_trigger_save(form_code,
...
@@ -560,8 +561,55 @@ def reminder_trigger_save(form_code,
auto_cancel_date
=
auto_cancel_date
.
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
,
date_submitted_last_approver
=
date_submitted_last_approver
,
is_sent
=
False
,
is_sent
=
False
,
frm_approver
=
approver
frm_approver
=
approver
,
cancel_type
=
'from_approval'
)
)
counter
=
counter
+
1
counter
=
counter
+
1
return
True
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
...
@@ -29,7 +29,7 @@ class ApplicationViewSet(viewsets.ModelViewSet):
...
@@ -29,7 +29,7 @@ class ApplicationViewSet(viewsets.ModelViewSet):
@
decorators
.
rms
.
application_crate
@
decorators
.
rms
.
application_crate
@
transaction
.
atomic
@
transaction
.
atomic
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
serializer
.
is_valid
(
raise_exception
=
True
)
self
.
perform_create
(
serializer
)
self
.
perform_create
(
serializer
)
...
...
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
...
@@ -16,7 +16,7 @@ class SubModuleField(serializers.Field):
...
@@ -16,7 +16,7 @@ class SubModuleField(serializers.Field):
class
ModuleSerializer
(
serializers
.
ModelSerializer
):
class
ModuleSerializer
(
serializers
.
ModelSerializer
):
sub_module
=
SubModuleField
(
source
=
'*'
,
read_only
=
True
)
sub_module
=
SubModuleField
(
source
=
'*'
,
read_only
=
True
)
def
to_representation
(
self
,
instance
):
def
to_representation
(
self
,
instance
):
application_name
=
Application
.
objects
.
filter
(
application_name
=
Application
.
objects
.
filter
(
id
=
instance
.
application
.
id
id
=
instance
.
application
.
id
...
...
app/applicationlayer/management/user/views.py
View file @
2e875deb
...
@@ -93,7 +93,7 @@ class UsersManagementViewSet(viewsets.ModelViewSet):
...
@@ -93,7 +93,7 @@ class UsersManagementViewSet(viewsets.ModelViewSet):
createdUser
=
models
.
User
.
objects
.
filter
(
id
=
pk
)
.
first
()
createdUser
=
models
.
User
.
objects
.
filter
(
id
=
pk
)
.
first
()
createdUser
.
set_password
(
settings
.
USER_DEFAULT_PASSWORD
)
createdUser
.
set_password
(
settings
.
USER_DEFAULT_PASSWORD
)
createdUser
.
save
()
createdUser
.
save
()
# LOG ADD
# LOG ADD
log_save
.
log_save
(
log_save
.
log_save
(
enums
.
LogEnum
.
ADD
.
value
,
enums
.
LogEnum
.
ADD
.
value
,
...
...
app/applicationlayer/master/department/serializer.py
View file @
2e875deb
from
rest_framework
import
serializers
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
from
app.applicationlayer.utils
import
model_to_dict
...
@@ -16,3 +16,12 @@ class AdminDepartmentSerializer(serializers.ModelSerializer):
...
@@ -16,3 +16,12 @@ class AdminDepartmentSerializer(serializers.ModelSerializer):
read_only_fields
=
(
read_only_fields
=
(
'created'
,
'createdby'
,
'modified'
,
'modifiedby'
,
'code'
,
'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
...
@@ -3,20 +3,23 @@ from rest_framework.response import Response
from
app.applicationlayer.utils
import
model_to_dict
from
app.applicationlayer.utils
import
model_to_dict
from
rest_framework.filters
import
SearchFilter
,
OrderingFilter
from
rest_framework.filters
import
SearchFilter
,
OrderingFilter
from
django_filters
import
rest_framework
as
filters
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
(
from
app.applicationlayer.utils
import
(
CustomPagination
,
status_message_response
CustomPagination
,
status_message_response
)
)
from
django_filters.rest_framework
import
DjangoFilterBackend
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.applicationlayer.management.department.table_filters
import
DepartmentFilterSet
from
app.helper.decorators
import
rms
from
app.helper.decorators
import
rms
from
rest_framework.decorators
import
action
class
AdminDepartmentViewSet
(
viewsets
.
ModelViewSet
):
class
AdminDepartmentViewSet
(
viewsets
.
ModelViewSet
):
queryset
=
Department
.
objects
.
all
()
.
order_by
(
'-created'
)
queryset
=
Department
.
objects
.
all
()
.
order_by
(
'-created'
)
serializer_class
=
serializer
.
AdminDepartmentSerializer
serializer_class
=
AdminDepartmentSerializer
pagination_class
=
CustomPagination
pagination_class
=
CustomPagination
lookup_field
=
'code'
lookup_field
=
'code'
filter_backends
=
(
DjangoFilterBackend
,
SearchFilter
,
OrderingFilter
)
filter_backends
=
(
DjangoFilterBackend
,
SearchFilter
,
OrderingFilter
)
...
@@ -44,7 +47,6 @@ class AdminDepartmentViewSet(viewsets.ModelViewSet):
...
@@ -44,7 +47,6 @@ class AdminDepartmentViewSet(viewsets.ModelViewSet):
)
)
return
self
.
get_paginated_response
(
message
)
return
self
.
get_paginated_response
(
message
)
except
Exception
as
e
:
except
Exception
as
e
:
# serializer = self.get_serializer(queryset, many=True)
message
=
status_message_response
(
message
=
status_message_response
(
400
,
400
,
'failed'
,
'failed'
,
...
@@ -52,3 +54,34 @@ class AdminDepartmentViewSet(viewsets.ModelViewSet):
...
@@ -52,3 +54,34 @@ class AdminDepartmentViewSet(viewsets.ModelViewSet):
''
''
)
)
return
Response
(
message
)
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
...
@@ -9,6 +9,7 @@ from app.applicationlayer.management.module.views import ModuleViewSet
from
app.applicationlayer.management.account.views
import
UserViewSet
from
app.applicationlayer.management.account.views
import
UserViewSet
from
app.businesslayer.company.views
import
AdminCompanyViewSet
from
app.businesslayer.company.views
import
AdminCompanyViewSet
from
app.applicationlayer.management.notification.views
import
NotificationsViewset
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.accounts.views
import
UserDownloadRequest
from
app.applicationlayer.download.department.views
import
DepartmentDownloadRequest
from
app.applicationlayer.download.department.views
import
DepartmentDownloadRequest
...
@@ -26,6 +27,7 @@ router.register(r'notifications', NotificationsViewset)
...
@@ -26,6 +27,7 @@ router.register(r'notifications', NotificationsViewset)
router
.
register
(
r'user-download'
,
UserDownloadRequest
)
router
.
register
(
r'user-download'
,
UserDownloadRequest
)
router
.
register
(
r'department-download'
,
DepartmentDownloadRequest
)
router
.
register
(
r'department-download'
,
DepartmentDownloadRequest
)
router
.
register
(
r'company-download'
,
CompanyDownloadRequest
)
router
.
register
(
r'company-download'
,
CompanyDownloadRequest
)
router
.
register
(
r'delegations'
,
DelegationViewSet
)
urlpatterns
=
(
urlpatterns
=
(
path
(
''
,
include
(
router
.
urls
)),
path
(
''
,
include
(
router
.
urls
)),
...
...
app/applicationlayer/utils.py
View file @
2e875deb
...
@@ -20,7 +20,7 @@ REALTIMESERVER_IP = settings.REALTIMESERVER_IP
...
@@ -20,7 +20,7 @@ REALTIMESERVER_IP = settings.REALTIMESERVER_IP
def
model_to_dict
(
instance
):
def
model_to_dict
(
instance
):
try
:
try
:
mySerializer
=
copy
.
deepcopy
(
DynamicSerializer
)
mySerializer
=
copy
.
deepcopy
(
DynamicSerializer
)
mySerializer
.
Meta
.
model
=
instance
.
__class__
mySerializer
.
Meta
.
model
=
instance
.
__class__
return
mySerializer
(
instance
)
.
data
return
mySerializer
(
instance
)
.
data
...
@@ -161,7 +161,8 @@ def send_broadcast_message(room_name, sender, message):
...
@@ -161,7 +161,8 @@ def send_broadcast_message(room_name, sender, message):
ws
.
close
()
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
:
try
:
...
@@ -170,7 +171,7 @@ def notification_create(form_code, message, account_no, sender_account_no):
...
@@ -170,7 +171,7 @@ def notification_create(form_code, message, account_no, sender_account_no):
notif_type
=
'TASK'
,
notif_type
=
'TASK'
,
message
=
message
,
message
=
message
,
is_read
=
False
,
is_read
=
False
,
app
=
'APP-20190909-0000002'
,
app
=
app
,
account_no
=
account_no
,
account_no
=
account_no
,
sender_account_no
=
sender_account_no
sender_account_no
=
sender_account_no
)
)
...
@@ -184,12 +185,6 @@ def notification_create(form_code, message, account_no, sender_account_no):
...
@@ -184,12 +185,6 @@ def notification_create(form_code, message, account_no, sender_account_no):
'NEW NOTIFICATIONS'
'NEW NOTIFICATIONS'
)
)
# message = {
# 'code': 200,
# 'status': 'success',
# 'message': 'Notification successfully created!',
# }
# return Response(message, status=status.HTTP_200_OK)
return
True
return
True
except
Exception
as
e
:
except
Exception
as
e
:
...
...
app/businesslayer/changerequest/change_request.py
View file @
2e875deb
...
@@ -13,14 +13,33 @@ from django.http import Http404
...
@@ -13,14 +13,33 @@ from django.http import Http404
from
django.db.models
import
Q
from
django.db.models
import
Q
from
app.applicationlayer.cms.utils_cr
import
(
from
app.applicationlayer.cms.utils_cr
import
(
number_generator
,
crhistory_save
,
entity_log_bulk
,
number_generator
,
crhistory_log_bulk_delete
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.applicationlayer.utils
import
model_to_dict
from
app.entities
import
enums
,
models
from
app.entities
import
enums
,
models
from
app.applicationlayer.utils
import
log_save
,
CustomPagination
from
app.applicationlayer.utils
import
log_save
,
CustomPagination
from
app.applicationlayer.cms.template
import
serializers
from
app.applicationlayer.cms.template
import
serializers
from
django.db.models
import
Min
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
):
def
list_by_user
(
user_id_number
):
...
@@ -443,7 +462,9 @@ def check_vendor_level(position, routing_level, form_code):
...
@@ -443,7 +462,9 @@ def check_vendor_level(position, routing_level, form_code):
form_code
=
form_code
,
form_code
=
form_code
,
level
=
int
(
routing_level
),
level
=
int
(
routing_level
),
delegation
=
'Vendor/Implementor'
delegation
=
'Vendor/Implementor'
)
)
.
first
()
return
query
elif
position
==
'last'
:
elif
position
==
'last'
:
...
@@ -451,6 +472,8 @@ def check_vendor_level(position, routing_level, form_code):
...
@@ -451,6 +472,8 @@ def check_vendor_level(position, routing_level, form_code):
form_code
=
form_code
,
form_code
=
form_code
,
delegation
=
'Vendor/Implementor'
delegation
=
'Vendor/Implementor'
)
.
order_by
(
'level'
)
.
last
()
)
.
order_by
(
'level'
)
.
last
()
return
query
elif
position
==
'prev'
:
elif
position
==
'prev'
:
...
@@ -458,9 +481,267 @@ def check_vendor_level(position, routing_level, form_code):
...
@@ -458,9 +481,267 @@ def check_vendor_level(position, routing_level, form_code):
Q
(
form_code
=
form_code
)
&
Q
(
form_code
=
form_code
)
&
Q
(
action
=
'Completed'
)
&
Q
(
action
=
'Completed'
)
&
Q
(
delegation
=
'Vendor/Implementor'
)
&
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
)
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
)
)
# def cr_routing_actions(approver_instance):
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
...
@@ -8,4 +8,4 @@ class AdminDepartmentSerializer(serializers.ModelSerializer):
...
@@ -8,4 +8,4 @@ class AdminDepartmentSerializer(serializers.ModelSerializer):
fields
=
'__all__'
fields
=
'__all__'
read_only_fields
=
(
read_only_fields
=
(
'created'
,
'createdby'
,
'modified'
,
'modifiedby'
,
'code'
,
'created'
,
'createdby'
,
'modified'
,
'modifiedby'
,
'code'
,
)
)
\ No newline at end of file
app/businesslayer/department/views.py
View file @
2e875deb
...
@@ -41,4 +41,4 @@ class AdminDepartmentViewSet(viewsets.ModelViewSet):
...
@@ -41,4 +41,4 @@ class AdminDepartmentViewSet(viewsets.ModelViewSet):
return
self
.
get_paginated_response
(
message
)
return
self
.
get_paginated_response
(
message
)
serializer
=
self
.
get_serializer
(
queryset
,
many
=
True
)
serializer
=
self
.
get_serializer
(
queryset
,
many
=
True
)
return
Response
(
serializer
.
data
)
return
Response
(
serializer
.
data
)
\ No newline at end of file
app/entities/enums.py
View file @
2e875deb
...
@@ -29,6 +29,7 @@ class GenerateCode(Enum):
...
@@ -29,6 +29,7 @@ class GenerateCode(Enum):
COMPANY
=
'COMPANY'
COMPANY
=
'COMPANY'
DEPARTMENT
=
'DEPARTMENT'
DEPARTMENT
=
'DEPARTMENT'
USER
=
'USER'
USER
=
'USER'
DELEGATION
=
'DELEGATION'
NOTIFICATION
=
'NOTIF'
NOTIFICATION
=
'NOTIF'
TEMPLATE
=
'TMP'
TEMPLATE
=
'TMP'
TMP_APPROVER
=
'TMPAPR'
TMP_APPROVER
=
'TMPAPR'
...
@@ -62,6 +63,7 @@ class LogEntitiesEnum(Enum):
...
@@ -62,6 +63,7 @@ class LogEntitiesEnum(Enum):
COMPANY
=
"COMPANY"
COMPANY
=
"COMPANY"
DEPARTMENT
=
"DEPARTMENT"
DEPARTMENT
=
"DEPARTMENT"
MODULE
=
"MODULE"
MODULE
=
"MODULE"
DELEGATION
=
"DELEGATION"
ChangeRequestTemplateHeader
=
"ChangeRequestTemplateHeader"
ChangeRequestTemplateHeader
=
"ChangeRequestTemplateHeader"
ChangeRequestTemplateApprovers
=
"ChangeRequestTemplateApprovers"
ChangeRequestTemplateApprovers
=
"ChangeRequestTemplateApprovers"
ChangeRequestTemplateStakeHolders
=
"ChangeRequestTemplateStakeHolders"
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
...
@@ -9,7 +9,6 @@ from . import enums
from
django.utils.text
import
slugify
from
django.utils.text
import
slugify
from
datetime
import
timedelta
from
datetime
import
timedelta
# ********************* AUTH TABLES *********************
# ********************* AUTH TABLES *********************
...
@@ -86,6 +85,26 @@ class Module(AuditClass):
...
@@ -86,6 +85,26 @@ class Module(AuditClass):
Module
.
objects
.
filter
(
id
=
self
.
id
)
.
update
(
code
=
code
)
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
):
class
Company
(
AuditClass
):
code
=
models
.
CharField
(
code
=
models
.
CharField
(
unique
=
True
,
unique
=
True
,
...
@@ -129,6 +148,9 @@ class Department(AuditClass):
...
@@ -129,6 +148,9 @@ class Department(AuditClass):
default
=
'dept'
default
=
'dept'
)
)
name
=
models
.
CharField
(
max_length
=
255
)
name
=
models
.
CharField
(
max_length
=
255
)
delegation
=
models
.
ManyToManyField
(
Delegation
)
class
Meta
:
class
Meta
:
db_table
=
'departments'
db_table
=
'departments'
...
@@ -427,7 +449,13 @@ class BaseApprover(models.Model):
...
@@ -427,7 +449,13 @@ class BaseApprover(models.Model):
on_delete
=
models
.
PROTECT
,
on_delete
=
models
.
PROTECT
,
to_field
=
'code'
)
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
(
created
=
models
.
DateTimeField
(
blank
=
True
,
blank
=
True
,
null
=
True
)
null
=
True
)
...
@@ -535,7 +563,7 @@ class ChangeRequestTemplateHeader(BaseHeader):
...
@@ -535,7 +563,7 @@ class ChangeRequestTemplateHeader(BaseHeader):
on_delete
=
models
.
PROTECT
,
on_delete
=
models
.
PROTECT
,
to_field
=
'code'
,
to_field
=
'code'
,
related_name
=
'created_by_user'
)
related_name
=
'created_by_user'
)
created_by_department
=
models
.
ForeignKey
(
created_by_department
=
models
.
ForeignKey
(
Department
,
Department
,
on_delete
=
models
.
PROTECT
,
on_delete
=
models
.
PROTECT
,
...
@@ -1034,9 +1062,10 @@ class AllowedCompany(models.Model):
...
@@ -1034,9 +1062,10 @@ class AllowedCompany(models.Model):
create_change_request
=
models
.
BooleanField
(
default
=
True
)
create_change_request
=
models
.
BooleanField
(
default
=
True
)
create_change_request_template
=
models
.
BooleanField
(
default
=
True
)
create_change_request_template
=
models
.
BooleanField
(
default
=
True
)
view_all_change_request
=
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
)
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
)
deleted_at
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
deleted_at
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
class
Meta
:
class
Meta
:
db_table
=
'allowed_company'
db_table
=
'allowed_company'
unique_together
=
[
'company_pivot'
,
'group_pivots'
,
'id_number'
]
unique_together
=
[
'company_pivot'
,
'group_pivots'
,
'id_number'
]
...
@@ -1064,9 +1093,15 @@ class ReminderTrigger(models.Model):
...
@@ -1064,9 +1093,15 @@ class ReminderTrigger(models.Model):
blank
=
True
)
blank
=
True
)
is_sent
=
models
.
BooleanField
(
is_sent
=
models
.
BooleanField
(
default
=
False
)
default
=
False
)
form_code
=
models
.
ForeignKey
(
ChangeRequestFormHeader
,
on_delete
=
models
.
PROTECT
,
to_field
=
'form_code'
,
null
=
True
,
blank
=
True
)
class
Meta
:
class
Meta
:
db_table
=
'
reminder_trigg
er'
db_table
=
'
trigger_remind
er'
class
CancelTrigger
(
models
.
Model
):
class
CancelTrigger
(
models
.
Model
):
...
@@ -1077,7 +1112,9 @@ class CancelTrigger(models.Model):
...
@@ -1077,7 +1112,9 @@ class CancelTrigger(models.Model):
frm_approver
=
models
.
ForeignKey
(
frm_approver
=
models
.
ForeignKey
(
ChangeRequestFormApprovers
,
ChangeRequestFormApprovers
,
on_delete
=
models
.
PROTECT
,
on_delete
=
models
.
PROTECT
,
to_field
=
'code'
)
to_field
=
'code'
,
blank
=
True
,
null
=
True
)
auto_cancel_date
=
models
.
DateTimeField
(
auto_cancel_date
=
models
.
DateTimeField
(
null
=
True
,
null
=
True
,
blank
=
True
)
blank
=
True
)
...
@@ -1086,9 +1123,13 @@ class CancelTrigger(models.Model):
...
@@ -1086,9 +1123,13 @@ class CancelTrigger(models.Model):
date_submitted_last_approver
=
models
.
DateTimeField
(
date_submitted_last_approver
=
models
.
DateTimeField
(
null
=
True
,
null
=
True
,
blank
=
True
)
blank
=
True
)
cancel_type
=
models
.
CharField
(
null
=
True
,
blank
=
True
,
max_length
=
255
)
class
Meta
:
class
Meta
:
db_table
=
'
cancel_trigger
'
db_table
=
'
trigger_cancel
'
class
OverdueTrigger
(
models
.
Model
):
class
OverdueTrigger
(
models
.
Model
):
...
@@ -1103,7 +1144,7 @@ class OverdueTrigger(models.Model):
...
@@ -1103,7 +1144,7 @@ class OverdueTrigger(models.Model):
default
=
False
)
default
=
False
)
class
Meta
:
class
Meta
:
db_table
=
'
overdue_trigger
'
db_table
=
'
trigger_overdue
'
"""
"""
...
@@ -1128,6 +1169,7 @@ class AssetGroup(models.Model):
...
@@ -1128,6 +1169,7 @@ class AssetGroup(models.Model):
class
Meta
:
class
Meta
:
db_table
=
'asset_groups'
db_table
=
'asset_groups'
ordering
=
[
'-created'
]
def
__str__
(
self
):
def
__str__
(
self
):
return
f
'{self.code}'
return
f
'{self.code}'
...
...
app/helper/email_service/sender.py
View file @
2e875deb
...
@@ -5,7 +5,6 @@ from app.entities import models
...
@@ -5,7 +5,6 @@ from app.entities import models
from
django.conf
import
settings
from
django.conf
import
settings
# def account_created(args, username, password, receiver) :
def
account_created
(
args
):
def
account_created
(
args
):
name
=
args
[
0
]
name
=
args
[
0
]
username
=
args
[
1
]
username
=
args
[
1
]
...
@@ -51,20 +50,7 @@ def account_created(args):
...
@@ -51,20 +50,7 @@ def account_created(args):
def
cronjob
(
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
:
try
:
send_mail
(
send_mail
(
subject
=
'Resource Management System: Welcome!'
,
subject
=
'Resource Management System: Welcome!'
,
...
@@ -145,24 +131,6 @@ def forgot_password(args):
...
@@ -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
):
def
admin_changepassword
(
args
):
name
=
args
[
0
]
name
=
args
[
0
]
username
=
args
[
1
]
username
=
args
[
1
]
...
@@ -188,342 +156,6 @@ def admin_changepassword(args):
...
@@ -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-CRAPPROVED ; RMS-CRACKNOWLEDGE ; RMS-CRCOMPLETED ; RMS-CRACCEPTED ;
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
...
...
requirements/RMSv2.postman_collection.json
View file @
2e875deb
...
@@ -497,7 +497,7 @@
...
@@ -497,7 +497,7 @@
],
],
"body"
:
{
"body"
:
{
"mode"
:
"raw"
,
"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"
:
{
"url"
:
{
"raw"
:
"{{baseurl}}/management/departments/"
,
"raw"
:
"{{baseurl}}/management/departments/"
,
...
@@ -1111,6 +1111,143 @@
...
@@ -1111,6 +1111,143 @@
],
],
"protocolProfileBehavior"
:
{},
"protocolProfileBehavior"
:
{},
"_postman_isSubFolder"
:
true
"_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"
:
{},
"protocolProfileBehavior"
:
{},
...
@@ -1158,7 +1295,7 @@
...
@@ -1158,7 +1295,7 @@
"formdata"
:
[
"formdata"
:
[
{
{
"key"
:
"username"
,
"key"
:
"username"
,
"value"
:
"
ryu
"
,
"value"
:
"
ob-rita
"
,
"type"
:
"text"
"type"
:
"text"
},
},
{
{
...
@@ -1323,7 +1460,7 @@
...
@@ -1323,7 +1460,7 @@
"response"
:
[]
"response"
:
[]
},
},
{
{
"name"
:
"Form Dashboard
Copy
"
,
"name"
:
"Form Dashboard
w/ Filter
"
,
"protocolProfileBehavior"
:
{
"protocolProfileBehavior"
:
{
"disableBodyPruning"
:
true
"disableBodyPruning"
:
true
},
},
...
@@ -1499,66 +1636,6 @@
...
@@ -1499,66 +1636,6 @@
}
}
},
},
"response"
:
[]
"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"
:
{},
"protocolProfileBehavior"
:
{},
...
@@ -1581,7 +1658,7 @@
...
@@ -1581,7 +1658,7 @@
],
],
"body"
:
{
"body"
:
{
"mode"
:
"raw"
,
"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"
:
{
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/form-post/"
,
"raw"
:
"{{baseurl}}/change-request/form-post/"
,
...
@@ -1603,26 +1680,7 @@
...
@@ -1603,26 +1680,7 @@
"method"
:
"GET"
,
"method"
:
"GET"
,
"header"
:
[],
"header"
:
[],
"url"
:
{
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/form/"
,
"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}}"
],
"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"
,
"host"
:
[
"host"
:
[
"{{baseurl}}"
"{{baseurl}}"
],
],
...
@@ -1634,18 +1692,15 @@
...
@@ -1634,18 +1692,15 @@
"query"
:
[
"query"
:
[
{
{
"key"
:
"company_requested_to"
,
"key"
:
"company_requested_to"
,
"value"
:
"COMPANY-20191004-0000011"
,
"value"
:
"COMPANY-20191004-0000011"
"disabled"
:
true
},
},
{
{
"key"
:
"department_requested_to"
,
"key"
:
"department_requested_to"
,
"value"
:
"DEPARTMENT-20191004-0000029"
,
"value"
:
"DEPARTMENT-20191004-0000029"
"disabled"
:
true
},
},
{
{
"key"
:
"form_type"
,
"key"
:
"form_type"
,
"value"
:
"closed"
,
"value"
:
"closed"
"disabled"
:
true
},
},
{
{
"key"
:
"date_modified_from"
,
"key"
:
"date_modified_from"
,
...
@@ -1680,27 +1735,6 @@
...
@@ -1680,27 +1735,6 @@
},
},
"response"
:
[]
"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"
,
"name"
:
"Resubmit"
,
"request"
:
{
"request"
:
{
...
@@ -1736,7 +1770,7 @@
...
@@ -1736,7 +1770,7 @@
],
],
"body"
:
{
"body"
:
{
"mode"
:
"raw"
,
"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"
:
{
"options"
:
{
"raw"
:
{
"raw"
:
{
"language"
:
"json"
"language"
:
"json"
...
@@ -1947,14 +1981,14 @@
...
@@ -1947,14 +1981,14 @@
"raw"
:
""
"raw"
:
""
},
},
"url"
:
{
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/form/FRM-201910
07-0000078
/history/"
,
"raw"
:
"{{baseurl}}/change-request/form/FRM-201910
25-0000040
/history/"
,
"host"
:
[
"host"
:
[
"{{baseurl}}"
"{{baseurl}}"
],
],
"path"
:
[
"path"
:
[
"change-request"
,
"change-request"
,
"form"
,
"form"
,
"FRM-201910
07-0000078
"
,
"FRM-201910
25-0000040
"
,
"history"
,
"history"
,
""
""
]
]
...
@@ -1976,7 +2010,7 @@
...
@@ -1976,7 +2010,7 @@
],
],
"body"
:
{
"body"
:
{
"mode"
:
"raw"
,
"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"
:
{
"options"
:
{
"raw"
:
{
"raw"
:
{
"language"
:
"json"
"language"
:
"json"
...
@@ -1984,14 +2018,14 @@
...
@@ -1984,14 +2018,14 @@
}
}
},
},
"url"
:
{
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/form/FRM-201910
04-0000072
/file_upload/"
,
"raw"
:
"{{baseurl}}/change-request/form/FRM-201910
29-0000171
/file_upload/"
,
"host"
:
[
"host"
:
[
"{{baseurl}}"
"{{baseurl}}"
],
],
"path"
:
[
"path"
:
[
"change-request"
,
"change-request"
,
"form"
,
"form"
,
"FRM-201910
04-0000072
"
,
"FRM-201910
29-0000171
"
,
"file_upload"
,
"file_upload"
,
""
""
]
]
...
@@ -2272,14 +2306,14 @@
...
@@ -2272,14 +2306,14 @@
"method"
:
"GET"
,
"method"
:
"GET"
,
"header"
:
[],
"header"
:
[],
"url"
:
{
"url"
:
{
"raw"
:
"{{baseurl}}/change-request/template/TMP-2019102
2-000009
2/"
,
"raw"
:
"{{baseurl}}/change-request/template/TMP-2019102
5-000003
2/"
,
"host"
:
[
"host"
:
[
"{{baseurl}}"
"{{baseurl}}"
],
],
"path"
:
[
"path"
:
[
"change-request"
,
"change-request"
,
"template"
,
"template"
,
"TMP-2019102
2-000009
2"
,
"TMP-2019102
5-000003
2"
,
""
""
]
]
}
}
...
@@ -2805,7 +2839,7 @@
...
@@ -2805,7 +2839,7 @@
"raw"
:
""
"raw"
:
""
},
},
"url"
:
{
"url"
:
{
"raw"
:
"{{baseurl}}/management/notifications/?account_no=USER-2019
0927-0000011
"
,
"raw"
:
"{{baseurl}}/management/notifications/?account_no=USER-2019
1025-0000155&app=ams
"
,
"host"
:
[
"host"
:
[
"{{baseurl}}"
"{{baseurl}}"
],
],
...
@@ -2817,7 +2851,11 @@
...
@@ -2817,7 +2851,11 @@
"query"
:
[
"query"
:
[
{
{
"key"
:
"account_no"
,
"key"
:
"account_no"
,
"value"
:
"USER-20190927-0000011"
"value"
:
"USER-20191025-0000155"
},
{
"key"
:
"app"
,
"value"
:
"ams"
}
}
]
]
}
}
...
@@ -3070,6 +3108,25 @@
...
@@ -3070,6 +3108,25 @@
}
}
},
},
"response"
:
[]
"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"
:
{},
"protocolProfileBehavior"
:
{},
...
@@ -3084,7 +3141,7 @@
...
@@ -3084,7 +3141,7 @@
"bearer"
:
[
"bearer"
:
[
{
{
"key"
:
"token"
,
"key"
:
"token"
,
"value"
:
"
1e3ef7cc7a343b5fa0b54bd2d1699cfee6ca6afe
"
,
"value"
:
"
76b9d1a5c987488501f106346dee80e1dc4afeb1
"
,
"type"
:
"string"
"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