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
4695d626
Commit
4695d626
authored
Sep 13, 2019
by
John Red Medrano
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pulled cms
parent
4e294247
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
4687 additions
and
1731 deletions
+4687
-1731
app/applicationlayer/cms/form/serializers.py
app/applicationlayer/cms/form/serializers.py
+121
-144
app/applicationlayer/cms/form/views.py
app/applicationlayer/cms/form/views.py
+949
-1086
app/applicationlayer/cms/template/serializers.py
app/applicationlayer/cms/template/serializers.py
+66
-0
app/applicationlayer/cms/template/views.py
app/applicationlayer/cms/template/views.py
+340
-0
app/applicationlayer/cms/user_privilege/serializers.py
app/applicationlayer/cms/user_privilege/serializers.py
+0
-0
app/applicationlayer/cms/user_privilege/views.py
app/applicationlayer/cms/user_privilege/views.py
+0
-0
app/applicationlayer/cms/utils_cr.py
app/applicationlayer/cms/utils_cr.py
+449
-438
app/applicationlayer/urls_cms.py
app/applicationlayer/urls_cms.py
+14
-13
app/businesslayer/changerequest/change_request.py
app/businesslayer/changerequest/change_request.py
+20
-30
app/entities/migrations/0007_auto_20190911_1102.py
app/entities/migrations/0007_auto_20190911_1102.py
+18
-0
app/entities/migrations/0008_auto_20190911_1715.py
app/entities/migrations/0008_auto_20190911_1715.py
+18
-0
app/entities/migrations/0009_auto_20190911_1845.py
app/entities/migrations/0009_auto_20190911_1845.py
+63
-0
app/entities/migrations/0010_auto_20190913_1143.py
app/entities/migrations/0010_auto_20190913_1143.py
+33
-0
app/entities/models.py
app/entities/models.py
+44
-20
requirements/RMSv2.postman_collection_091319
requirements/RMSv2.postman_collection_091319
+2551
-0
requirements/local.txt
requirements/local.txt
+1
-0
No files found.
app/applicationlayer/
management/changerequest
/serializers.py
→
app/applicationlayer/
cms/form
/serializers.py
View file @
4695d626
from
app.entities
import
models
from
rest_framework
import
serializers
from
django.db.models
import
Q
from
app.applicationlayer.management.changerequest.utils_cr
import
logged_user
class
ChangeRequestTemplatesSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestTemplateHeader
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'deleted_at'
,
'template_no'
]
class
ChangeRequestTemplateApproversSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestTemplateApprovers
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'deleted_at'
,
'code'
]
class
ChangeRequestTemplateStakeHoldersSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestTemplateStakeHolders
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'deleted_at'
,
'code'
]
class
ChangeRequestTemplateAttachmentsSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestTemplateAttachments
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'deleted_at'
,
'code'
]
class
ChangeRequestTemplateDetailsSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestTemplateDetails
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'deleted_at'
,
'code'
]
class
ChangeRequestFormHeaderSerializer
(
serializers
.
ModelSerializer
):
def
to_representation
(
self
,
instance
):
ret
=
super
()
.
to_representation
(
instance
)
try
:
# id_number = self.context.get('request').META.get('user')
id_number
=
"USER-20190909-0000005"
current_level
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
ret
[
'form_code'
])
&
Q
(
deleted_at
=
None
)
&
(
Q
(
action
=
''
)
|
Q
(
action
=
None
))
)
.
order_by
(
'level'
)
if
current_level
.
first
()[
'user'
]
==
id_number
:
if
instance
.
status
.
lower
()
==
'rejected'
:
approver
=
'No'
elif
instance
.
status
.
lower
()
==
'cancelled'
:
approver
=
'No'
elif
instance
.
status
.
lower
()
==
'closed'
:
approver
=
'No'
else
:
approver
=
'Yes'
else
:
approver
=
'No'
ret
[
'action'
]
=
approver
return
ret
except
Exception
as
e
:
ret
[
'action'
]
=
"No"
return
ret
class
Meta
:
model
=
models
.
ChangeRequestFormHeader
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'deleted_at'
,
'form_code'
]
class
ChangeRequestFormApproversSerializer
(
serializers
.
ModelSerializer
):
# def to_representation(self, instance):
# ret = super().to_representation(instance)
# try:
# user = instance.user
# user_details = get_account_details(user)
# name = user_details['name']
# group = user_details['groups'][0]['name']
# company = user_details['groups'][0]['company__name']
# ret['name'] = name
# ret['department'] = group
# ret['company'] = company
# return ret
# except Exception as e:
# ret['name'] = "none"
# ret['department'] = "none"
# ret['company'] = "none"
# return ret
class
Meta
:
model
=
models
.
ChangeRequestFormApprovers
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'deleted_at'
,
'code'
]
class
ChangeRequestFormStakeHoldersSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestFormStakeHolders
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'deleted_at'
,
'code'
]
class
ChangeRequestFormAttachmentsSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestFormAttachments
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'deleted_at'
,
'code'
]
class
ChangeRequestFormDetailsSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestFormDetails
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'deleted_at'
,
'code'
]
from
app.entities
import
models
from
rest_framework
import
serializers
from
django.db.models
import
Q
from
app.applicationlayer.cms.utils_cr
import
logged_user
from
drf_writable_nested
import
WritableNestedModelSerializer
class
ChangeRequestFormApproversSerializer
(
serializers
.
ModelSerializer
):
# def to_representation(self, instance):
# ret = super().to_representation(instance)
# try:
# user = instance.user
# user_details = get_account_details(user)
# name = user_details['name']
# group = user_details['groups'][0]['name']
# company = user_details['groups'][0]['company__name']
# ret['name'] = name
# ret['department'] = group
# ret['company'] = company
# return ret
# except Exception as e:
# ret['name'] = "none"
# ret['department'] = "none"
# ret['company'] = "none"
# return ret
class
Meta
:
model
=
models
.
ChangeRequestFormApprovers
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'archived_at'
,
'code'
]
class
ChangeRequestFormStakeHoldersSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestFormStakeHolders
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'archived_at'
,
'code'
]
class
ChangeRequestFormAttachmentsSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestFormAttachments
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'archived_at'
,
'code'
]
class
ChangeRequestFormDetailsSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestFormDetails
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'archived_at'
,
'code'
]
class
ChangeRequestFormHeaderSerializer
(
WritableNestedModelSerializer
):
frm_approvers
=
ChangeRequestFormApproversSerializer
(
many
=
True
,
required
=
False
)
frm_stakes
=
ChangeRequestFormStakeHoldersSerializer
(
many
=
True
,
required
=
False
)
frm_attachments
=
ChangeRequestFormAttachmentsSerializer
(
many
=
True
,
required
=
False
)
frm_details
=
ChangeRequestFormDetailsSerializer
(
many
=
True
,
required
=
False
)
def
to_representation
(
self
,
instance
):
ret
=
super
()
.
to_representation
(
instance
)
try
:
# id_number = self.context.get('request').META.get('user')
user
=
self
.
context
[
'request'
]
.
user
print
(
user
)
# id_number = "USER-20190909-0000005"
current_level
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
ret
[
'form_code'
])
&
Q
(
archived_at
=
None
)
&
(
Q
(
action
=
''
)
|
Q
(
action
=
None
))
)
.
order_by
(
'level'
)
if
current_level
.
first
()[
'user'
]
==
id_number
:
if
instance
.
status
.
lower
()
==
'rejected'
:
approver
=
'No'
elif
instance
.
status
.
lower
()
==
'cancelled'
:
approver
=
'No'
elif
instance
.
status
.
lower
()
==
'closed'
:
approver
=
'No'
else
:
approver
=
'Yes'
else
:
approver
=
'No'
ret
[
'action'
]
=
approver
return
ret
except
Exception
as
e
:
ret
[
'action'
]
=
"No"
return
ret
class
Meta
:
model
=
models
.
ChangeRequestFormHeader
# fields = '__all__'
fields
=
(
'form_code'
,
'requested_to_template_name'
,
'requested_to_objective'
,
'requested_to_target_date'
,
'requested_to_priority'
,
'description'
,
'created'
,
'cancel_date'
,
'status'
,
'company_desc'
,
'department_desc'
,
'requested_desc'
,
'requested_to_template_id'
,
'requested_to_company'
,
'requested_to_department'
,
'requested_to_user'
,
'requested_by_user'
,
'requested_by_department'
,
'template_no'
,
'frm_approvers'
,
'frm_stakes'
,
'frm_attachments'
,
'frm_details'
)
read_only_fields
=
[
'created'
,
'archived_at'
,
'form_code'
]
app/applicationlayer/
management/changerequest
/views.py
→
app/applicationlayer/
cms/form
/views.py
View file @
4695d626
from
django.shortcuts
import
render
from
rest_framework
import
viewsets
as
meviewsets
from
rest_framework.views
import
APIView
from
app.applicationlayer.management.changerequest
import
serializers
from
app.entities
import
models
from
app.applicationlayer
import
paginators
from
datetime
import
datetime
from
datetime
import
timedelta
from
rest_framework.response
import
Response
from
rest_framework
import
status
,
views
from
rest_framework.decorators
import
action
from
django.http
import
Http404
from
django.db.models
import
Q
import
requests
from
django.conf
import
settings
from
rest_framework.exceptions
import
ValidationError
from
django.db
import
transaction
,
IntegrityError
,
connection
from
app.applicationlayer.utils
import
QuerySetHelper
from
app.businesslayer.changerequest
import
change_request
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
class
ChangeRequestTemplatesViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateHeader
.
objects
.
all
()
lookup_field
=
'template_no'
serializer_class
=
serializers
.
ChangeRequestTemplatesSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
self
.
queryset
=
self
.
queryset
.
order_by
(
'-created'
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestTemplatesViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
deleted_at
=
None
,
template_no
=
str
(
self
.
kwargs
.
get
(
'template_no'
))
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
def
destroy
(
self
,
request
,
*
args
,
**
kwargs
):
try
:
template_no
=
self
.
kwargs
[
'template_no'
]
instance
=
models
.
ChangeRequestTemplateHeader
.
objects
.
filter
(
Q
(
template_no
=
template_no
)
&
Q
(
deleted_at
=
None
)
)
.
update
(
deleted_at
=
datetime
.
now
())
return
Response
({
"message"
:
"Deleted"
},
status
=
status
.
HTTP_200_OK
)
except
Exception
as
e
:
return
Response
(
e
,
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
def
partial_update
(
self
,
request
,
*
args
,
**
kwargs
):
try
:
kwargs
[
'partial'
]
=
True
template_no
=
self
.
kwargs
[
'template_no'
]
instance
=
models
.
ChangeRequestTemplateHeader
.
objects
.
filter
(
template_no
=
template_no
)
.
order_by
(
'-deleted_at'
)
instance
.
update
(
deleted_at
=
None
)
message
=
"Archived Change Request restored"
return
Response
(
message
,
status
=
status
.
HTTP_200_OK
)
except
Exception
as
e
:
message
=
{
500
,
'failed'
,
'Request was not able to process'
+
str
(
e
),
[]
}
return
Response
(
message
,
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
class
ChangeRequestTemplateApproversViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateApprovers
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestTemplateApproversSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
lookup_field
=
"code"
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestTemplateApproversViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestTemplateAttachmentsViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateAttachments
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestTemplateAttachmentsSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
lookup_field
=
"code"
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestTemplateAttachmentsViewset
,
self
)
.
list
(
request
)
class
ChangeRequestTemplateStakeHoldersViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateStakeHolders
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestTemplateStakeHoldersSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
lookup_field
=
"code"
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestTemplateStakeHoldersViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestTemplateDetailsViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateDetails
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestTemplateDetailsSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
lookup_field
=
"code"
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestTemplateDetailsViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestTemplatePost
(
APIView
):
@
transaction
.
atomic
()
def
post
(
self
,
request
):
template_header
=
request
.
data
try
:
data_list_approver
=
[]
data_list_stake
=
[]
data_list_attach
=
[]
data_list_detail
=
[]
template_header_data
=
{
'requested_to_template_name'
:
template_header
[
'requested_to_template_name'
],
'requested_to_template_id'
:
template_header
[
'requested_to_template_id'
],
'requested_to_objective'
:
template_header
[
'requested_to_objective'
],
'requested_to_target_date'
:
template_header
[
'requested_to_target_date'
],
'requested_to_priority'
:
template_header
[
'requested_to_priority'
],
'description'
:
template_header
[
'description'
],
'created_by_department'
:
template_header
[
'created_by_department'
],
'created_by_user'
:
template_header
[
'created_by_user'
],
'requested_to_company'
:
template_header
[
'requested_to_company'
],
'requested_to_department'
:
template_header
[
'requested_to_department'
],
'requested_to_user'
:
template_header
[
'requested_to_user'
]
}
tmp_approvers
=
template_header
[
'tmp_approvers'
]
tmp_stakes
=
template_header
[
'tmp_stakes'
]
tmp_attachments
=
template_header
[
'tmp_attachments'
]
tmp_details
=
template_header
[
'tmp_details'
]
sp1
=
transaction
.
savepoint
()
# nothing will save to db
serializer
=
serializers
.
ChangeRequestTemplatesSerializer
(
data
=
template_header_data
)
if
serializer
.
is_valid
(
raise_exception
=
True
):
serializer
.
save
()
tmp_id
=
serializer
.
data
[
'template_no'
]
# create template approvers
for
tmp_approver
in
tmp_approvers
:
tmp_approver
[
'template_no'
]
=
tmp_id
data_list_approver
.
append
(
tmp_approver
)
serializerApprover
=
serializers
.
ChangeRequestTemplateApproversSerializer
(
data
=
data_list_approver
,
many
=
True
)
if
serializerApprover
.
is_valid
(
raise_exception
=
True
):
serializerApprover
.
save
()
# create template stakes
for
tmp_stake
in
tmp_stakes
:
tmp_stake
[
'template_no'
]
=
tmp_id
data_list_stake
.
append
(
tmp_stake
)
serializerStake
=
serializers
.
ChangeRequestTemplateStakeHoldersSerializer
(
data
=
data_list_stake
,
many
=
True
)
if
serializerStake
.
is_valid
(
raise_exception
=
True
):
serializerStake
.
save
()
# create template attachments
for
tmp_attachment
in
tmp_attachments
:
tmp_attachment
[
'template_no'
]
=
tmp_id
data_list_attach
.
append
(
tmp_attachment
)
serializerAttach
=
serializers
.
ChangeRequestTemplateAttachmentsSerializer
(
data
=
data_list_attach
,
many
=
True
)
if
serializerAttach
.
is_valid
(
raise_exception
=
True
):
serializerAttach
.
save
()
# create template details
for
tmp_detail
in
tmp_details
:
tmp_detail
[
'template_no'
]
=
tmp_id
data_list_detail
.
append
(
tmp_detail
)
serializerDetail
=
serializers
.
ChangeRequestTemplateDetailsSerializer
(
data
=
data_list_detail
,
many
=
True
)
if
serializerDetail
.
is_valid
(
raise_exception
=
True
):
serializerDetail
.
save
()
message
=
{
'code'
:
201
,
'status'
:
'success'
,
'message'
:
'Template Details successfully saved!'
,
'results'
:
serializer
.
data
}
return
Response
(
message
,
status
=
status
.
HTTP_201_CREATED
)
except
ValidationError
as
e
:
transaction
.
savepoint_rollback
(
sp1
)
message
=
{
'code'
:
400
,
'status'
:
'failed'
,
'message'
:
str
(
e
),
}
return
Response
(
message
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
except
Exception
as
e
:
transaction
.
savepoint_rollback
(
sp1
)
message
=
{
'code'
:
500
,
'status'
:
'failed'
,
'message'
:
'Request was not able to process'
+
str
(
e
),
}
return
Response
(
message
,
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
# Change Request Form Views
class
ChangeRequestFormsViewset
(
meviewsets
.
ModelViewSet
):
serializer_class
=
serializers
.
ChangeRequestFormHeaderSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
queryset
=
models
.
ChangeRequestFormHeader
.
objects
.
all
()
lookup_field
=
'form_code'
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
id_number
=
self
.
request
.
user
# print(id_number.code)
self
.
queryset
=
change_request
.
list_by_user
(
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_base
(
self
.
queryset
,
request
.
query_params
.
get
(
'company_requested_to'
),
request
.
query_params
.
get
(
'department_requested_to'
),
request
.
query_params
.
get
(
'date_modified_from'
),
request
.
query_params
.
get
(
'date_modified_to'
),
request
.
query_params
.
get
(
'date_required_from'
),
request
.
query_params
.
get
(
'date_required_to'
),
request
.
query_params
.
get
(
'form_type'
),
)
if
self
.
request
.
query_params
.
get
(
'search'
):
search_key
=
self
.
request
.
query_params
.
get
(
'search'
)
self
.
queryset
=
self
.
queryset
.
filter
(
Q
(
requested_to_template_name__icontains
=
search_key
.
lower
())
|
Q
(
requested_to_template_id__icontains
=
search_key
.
lower
())
)
self
.
queryset
=
self
.
queryset
.
order_by
(
'-created'
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestFormsViewset
,
self
)
.
list
(
request
)
@
action
(
detail
=
False
,
methods
=
[
'get'
],
url_path
=
'dashboard'
,
name
=
"Dashboard Summary"
)
def
dashboard_view
(
self
,
request
):
id_number
=
self
.
request
.
user
# id_number = 'Acct-20190813-0000138'
self
.
queryset
=
change_request
.
list_by_user
(
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_base
(
self
.
queryset
,
request
.
query_params
.
get
(
'company_requested_to'
),
request
.
query_params
.
get
(
'department_requested_to'
),
request
.
query_params
.
get
(
'date_modified_from'
),
request
.
query_params
.
get
(
'date_modified_to'
),
request
.
query_params
.
get
(
'date_required_from'
),
request
.
query_params
.
get
(
'date_required_to'
),
request
.
query_params
.
get
(
'form_type'
),
)
pending
=
self
.
queryset
.
filter
(
status__iexact
=
'Pending'
)
.
count
()
approved
=
self
.
queryset
.
filter
(
status__iexact
=
'Approved'
)
.
count
()
rejected
=
self
.
queryset
.
filter
(
status__iexact
=
'Rejected'
)
.
count
()
cancelled
=
self
.
queryset
.
filter
(
status__iexact
=
'Cancelled'
)
.
count
()
completed
=
self
.
queryset
.
filter
(
status__iexact
=
'Closed'
#Completed
)
.
count
()
high
=
self
.
queryset
.
filter
(
requested_to_priority
=
'High'
)
.
count
()
normal
=
self
.
queryset
.
filter
(
requested_to_priority
=
'Normal'
)
.
count
()
awaiting_filtered
=
change_request
.
filter_awaiting
(
self
.
queryset
,
id_number
)
# awaiting = awaiting_filtered.count()
awaiting
=
0
for
awaits
in
awaiting_filtered
:
if
awaits
.
status
.
lower
()
==
'rejected'
:
print
(
"rejected"
)
elif
awaits
.
status
.
lower
()
==
'closed'
:
print
(
"closed"
)
elif
awaits
.
status
.
lower
()
==
'cancelled'
:
print
(
"cancelled"
)
else
:
awaiting
=
awaiting
+
1
overdue_filtered
=
change_request
.
filter_overdue
(
self
.
queryset
)
overdue
=
overdue_filtered
.
count
()
message
=
{
'account_no'
:
id_number
,
'pending'
:
pending
,
'approved'
:
approved
,
'rejected'
:
rejected
,
'cancelled'
:
cancelled
,
'completed'
:
completed
,
'high'
:
high
,
'normal'
:
normal
,
'awaiting'
:
awaiting
,
'overdue'
:
overdue
,
'code'
:
200
,
'status'
:
'success'
,
'message'
:
'Dashboard Summary'
}
return
Response
(
message
,
status
=
status
.
HTTP_200_OK
)
@
action
(
detail
=
False
,
methods
=
[
'get'
],
url_path
=
'status'
,
name
=
"Dashboard Summary Status"
)
def
list_by_status_view
(
self
,
request
):
id_number
=
self
.
request
.
user
# id_number = 'Acct-20190531-0000002'
self
.
queryset
=
change_request
.
list_by_user
(
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_status
(
self
.
queryset
,
request
.
query_params
.
get
(
'status'
)
)
self
.
queryset
=
change_request
.
filter_base
(
self
.
queryset
,
request
.
query_params
.
get
(
'company_requested_to'
),
request
.
query_params
.
get
(
'department_requested_to'
),
request
.
query_params
.
get
(
'date_modified_from'
),
request
.
query_params
.
get
(
'date_modified_to'
),
request
.
query_params
.
get
(
'date_required_from'
),
request
.
query_params
.
get
(
'date_required_to'
),
request
.
query_params
.
get
(
'form_type'
),
)
self
.
queryset
=
self
.
queryset
.
order_by
(
'-created'
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
# self.queryset = QuerySetHelper.Filter(self)
return
super
(
ChangeRequestFormsViewset
,
self
)
.
list
(
request
)
@
action
(
detail
=
False
,
methods
=
[
'get'
],
url_path
=
'overdue'
,
name
=
"Dashboard Summary Overdue"
)
def
list_by_overdue_view
(
self
,
request
):
id_number
=
self
.
request
.
user
# id_number = 'Acct-20190531-0000002'
self
.
queryset
=
change_request
.
list_by_user
(
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_overdue
(
self
.
queryset
)
self
.
queryset
=
change_request
.
filter_base
(
self
.
queryset
,
request
.
query_params
.
get
(
'company_requested_to'
),
request
.
query_params
.
get
(
'department_requested_to'
),
request
.
query_params
.
get
(
'date_modified_from'
),
request
.
query_params
.
get
(
'date_modified_to'
),
request
.
query_params
.
get
(
'date_required_from'
),
request
.
query_params
.
get
(
'date_required_to'
),
request
.
query_params
.
get
(
'form_type'
),
)
self
.
queryset
=
self
.
queryset
.
order_by
(
'-created'
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestFormsViewset
,
self
)
.
list
(
request
)
@
action
(
detail
=
False
,
methods
=
[
'get'
],
url_path
=
'awaiting'
,
name
=
"Dashboard Summary Awaiting"
)
def
list_by_awaiting_view
(
self
,
request
):
id_number
=
self
.
request
.
user
# id_number = 'Acct-20190813-0000137'
self
.
queryset
=
change_request
.
list_by_user
(
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_awaiting
(
self
.
queryset
,
id_number
)
self
.
queryset
=
change_request
.
filter_base
(
self
.
queryset
,
request
.
query_params
.
get
(
'company_requested_to'
),
request
.
query_params
.
get
(
'department_requested_to'
),
request
.
query_params
.
get
(
'date_modified_from'
),
request
.
query_params
.
get
(
'date_modified_to'
),
request
.
query_params
.
get
(
'date_required_from'
),
request
.
query_params
.
get
(
'date_required_to'
),
request
.
query_params
.
get
(
'form_type'
),
)
self
.
queryset
=
self
.
queryset
.
filter
(
status__ne
=
'Rejected'
)
self
.
queryset
=
self
.
queryset
.
filter
(
status__ne
=
'Closed'
)
self
.
queryset
=
self
.
queryset
.
filter
(
status__ne
=
'Cancelled'
)
self
.
queryset
=
self
.
queryset
.
order_by
(
'-created'
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestFormsViewset
,
self
)
.
list
(
request
)
def
destroy
(
self
,
request
,
*
args
,
**
kwargs
):
# instance = self.get_object()
form_code
=
self
.
kwargs
[
'form_code'
]
instance
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
first
()
if
instance
.
status
.
lower
()
==
'draft'
:
models
.
ChangeRequestFormApprovers
.
objects
(
form_code
=
form_code
)
.
delete
()
models
.
ChangeRequestFormDetails
.
objects
(
form_code
=
form_code
)
.
delete
()
models
.
ChangeRequestFormStakeHolders
.
objects
(
form_code
=
form_code
)
.
delete
()
models
.
ChangeRequestFormAttachments
.
objects
(
form_code
=
form_code
)
.
delete
()
models
.
ChangeRequestFormTasks
.
objects
(
form_code
=
form_code
)
.
delete
()
models
.
ChangeRequestFormHeader
.
objects
(
form_code
=
form_code
)
.
delete
()
# self.perform_destroy(instance)
return
Response
({
"message"
:
"Change Request Deleted"
},
status
=
status
.
HTTP_200_OK
)
else
:
message
=
{
"message"
:
"Cant delete this record, it has an ongoing tansaction"
}
return
Response
(
message
,
status
=
status
.
HTTP_204_NO_CONTENT
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
deleted_at
=
None
,
form_code
=
str
(
self
.
kwargs
.
get
(
'form_code'
))
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
@
action
(
detail
=
True
,
methods
=
[
'get'
],
url_path
=
'history'
,
name
=
"CR History"
)
def
list_cr_history
(
self
,
request
,
form_code
=
None
,
**
kwargs
):
form_code
=
self
.
kwargs
[
'form_code'
]
form_code_list
=
[]
form_code_list
.
append
(
form_code
)
for
frmitem
in
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
old_form_code__ne
=
None
)
.
order_by
(
'created'
):
if
frmitem
.
form_code
==
form_code
:
form_code_list
.
append
(
frmitem
.
old_form_code
)
form_code
=
frmitem
.
old_form_code
# remove duplicates
mylist
=
list
(
dict
.
fromkeys
(
form_code_list
))
print
(
mylist
)
queryset
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
(
Q
(
action__ne
=
None
)
&
Q
(
action__ne
=
''
)),
form_code__in
=
mylist
)
.
order_by
(
'created'
)
self
.
serializer_class
=
serializers
.
ChangeRequestFormApproversSerializer
page
=
self
.
paginate_queryset
(
queryset
)
if
page
is
not
None
:
serializer
=
self
.
get_serializer
(
page
,
many
=
True
)
return
self
.
get_paginated_response
(
serializer
.
data
)
class
ChangeRequestFormApproversViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestFormApprovers
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestFormApproversSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
ObjectId
=
request
.
data
.
get
(
'id'
)
sent
=
False
if
'form_status'
in
request
.
data
:
# for email
if
str
(
request
.
data
[
'level'
])
==
'1'
and
request
.
data
[
'form_status'
]
.
lower
()
==
'pending'
:
user
=
request
.
data
[
'user'
]
form_code
=
request
.
data
[
'form_code'
]
delegation
=
request
.
data
[
'delegation'
]
# initial_email(user, form_code, delegation)
# EMAIL CODE FOR APPROVER
notification_msg
=
APPROVER_MESSAGE
.
split
(
';'
)[
0
]
email_code
=
APPROVER_MESSAGE
.
split
(
';'
)[
1
]
next_appover_email
(
user
,
form_code
,
delegation
,
notification_msg
,
'initial'
,
email_code
)
request
.
data
[
'date_sent'
]
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
request
.
data
[
'created'
]
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
#correct
sent
=
True
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
if
ObjectId
:
dbExisting
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
id
=
ObjectId
,
deleted_at
=
None
)
.
first
()
if
dbExisting
:
dbExisting
.
deleted_at
=
datetime
.
now
()
dbExisting
.
save
()
# x = self.perform_create(serializer)
serializer
.
id
=
None
x
=
serializer
.
save
()
if
sent
==
True
:
x
.
date_sent
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
x
.
created
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
#correct
x
.
save
()
headers
=
self
.
get_success_headers
(
serializer
.
data
)
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
,
headers
=
headers
)
@
action
(
methods
=
[
'PATCH'
],
detail
=
False
,
url_path
=
'approved'
,
url_name
=
'approved'
)
def
approved
(
self
,
request
,
*
args
,
**
kwargs
):
objectid
=
request
.
data
[
'id'
]
instance
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
id
=
objectid
)
# .update(
# set__deleted_at=datetime.utcnow()
# )
instance
=
instance
.
first
()
current_remarks
=
instance
.
remarks
print
(
current_remarks
)
instance
.
update
(
set__deleted_at
=
datetime
.
utcnow
()
)
# request.data['date_sent'] = datetime.now().strftime('%Y-%m-%d, %H:%M:%S')
request
.
data
[
'created'
]
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
# correct
# request.data['remarks'] = current_remarks
print
(
"hello"
)
print
(
request
.
data
[
'remarks'
])
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
self
.
perform_create
(
serializer
)
#------------
id
=
serializer
.
data
[
'id'
]
current_user
=
request
.
data
[
'user'
]
form_code
=
request
.
data
[
'form_code'
]
delegation
=
request
.
data
[
'delegation'
]
action
=
request
.
data
[
'action'
]
level
=
request
.
data
[
'level'
]
next_level
=
int
(
request
.
data
[
'level'
])
+
1
remarks
=
request
.
data
[
'remarks'
]
next_approver
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
level
=
str
(
next_level
),
form_code
=
form_code
,
deleted_at
=
None
)
if
action
.
lower
()
==
'approved'
:
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
deleted_at
=
None
)
&
Q
(
level
=
str
(
next_level
))
)
.
update
(
date_sent
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_MESSAGE
.
split
(
';'
)[
1
]
# EMAIL CODE FOR APPROVER
notification_msg
=
APPROVER_MESSAGE
.
split
(
';'
)[
0
]
email_code
=
APPROVER_MESSAGE
.
split
(
';'
)[
1
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
for
n_approver
in
next_approver
:
print
(
n_approver
.
user
)
if
n_approver
.
delegation
.
lower
()
==
'vendor/implementor'
:
notification_msg
=
VENDOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
0
]
email_code
=
VENDOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
1
]
next_appover_email
(
n_approver
.
user
,
form_code
,
delegation
,
notification_msg
,
action
,
email_code
)
elif
action
.
lower
()
==
'rejected'
:
if
delegation
.
lower
()
==
'requestor'
:
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
email_code
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
1
]
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
else
:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
1
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
elif
action
.
lower
()
==
'completed'
:
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
deleted_at
=
None
)
&
Q
(
level
=
str
(
next_level
))
)
.
update
(
date_sent
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_COMPLETION_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_COMPLETION_MESSAGE
.
split
(
';'
)[
1
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
elif
action
.
lower
()
==
'acknowledged'
:
# models.ChangeRequestFormApprovers.objects.filter(
# level=str(next_level)
# ).update(
# date_sent=datetime.now().strftime('%Y-%m-%d, %H:%M:%S')
# )
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
1
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
elif
action
.
lower
()
==
'accepted'
:
# EMAIL CODE FOR VENDOR
requestor_notification_msg
=
VENDOR_ACCEPTANCE_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
VENDOR_ACCEPTANCE_MESSAGE
.
split
(
';'
)[
1
]
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
# elif action.lower() == 'cancelled':
# action_cancelled(self, request, *args, **kwargs)
headers
=
self
.
get_success_headers
(
serializer
.
data
)
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
)
#------------
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
self
.
queryset
=
QuerySetHelper
.
Filter
(
self
)
return
super
(
ChangeRequestFormApproversViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestFormAttachmentsViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestFormAttachments
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestFormAttachmentsSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
self
.
queryset
=
QuerySetHelper
.
Filter
(
self
)
return
super
(
ChangeRequestFormAttachmentsViewset
,
self
)
.
list
(
request
)
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
attachment_no
=
request
.
data
.
get
(
'attachment_no'
)
ObjectId
=
request
.
data
.
get
(
'id'
)
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
if
ObjectId
:
dbExisting
=
models
.
ChangeRequestFormAttachments
.
objects
.
filter
(
id
=
ObjectId
,
deleted_at
=
None
)
.
first
()
if
dbExisting
:
dbExisting
.
deleted_at
=
datetime
.
now
()
dbExisting
.
save
()
self
.
perform_create
(
serializer
)
if
not
attachment_no
:
id
=
serializer
.
data
[
'id'
]
db_counter
=
models
.
ChangeRequestFormAttachments
.
objects
.
all
()
.
count
()
db_counter
=
db_counter
+
1
models
.
ChangeRequestFormAttachments
.
objects
.
filter
(
id
=
id
)
.
update
(
set__attachment_no
=
number_generator
(
"ATCH"
,
db_counter
)
)
headers
=
self
.
get_success_headers
(
serializer
.
data
)
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
,
headers
=
headers
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestFormStakeHoldersViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestFormStakeHolders
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestFormStakeHoldersSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
self
.
queryset
=
QuerySetHelper
.
Filter
(
self
)
return
super
(
ChangeRequestFormStakeHoldersViewset
,
self
)
.
list
(
request
)
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
ObjectId
=
request
.
data
.
get
(
'id'
)
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
if
ObjectId
:
dbExisting
=
models
.
ChangeRequestFormStakeHolders
.
objects
.
filter
(
id
=
ObjectId
,
deleted_at
=
None
)
.
first
()
if
dbExisting
:
dbExisting
.
deleted_at
=
datetime
.
now
()
dbExisting
.
save
()
self
.
perform_create
(
serializer
)
headers
=
self
.
get_success_headers
(
serializer
.
data
)
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
,
headers
=
headers
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestFormDetailsViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestFormDetails
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestFormDetailsSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
self
.
queryset
=
QuerySetHelper
.
Filter
(
self
)
return
super
(
ChangeRequestFormDetailsViewset
,
self
)
.
list
(
request
)
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
ObjectId
=
request
.
data
.
get
(
'id'
)
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
if
ObjectId
:
dbExisting
=
models
.
ChangeRequestFormDetails
.
objects
.
filter
(
id
=
ObjectId
,
deleted_at
=
None
)
.
first
()
if
dbExisting
:
dbExisting
.
deleted_at
=
datetime
.
now
()
dbExisting
.
save
()
self
.
perform_create
(
serializer
)
headers
=
self
.
get_success_headers
(
serializer
.
data
)
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
,
headers
=
headers
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
deleted_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestFormPost
(
APIView
):
# @transaction.atomic()
def
post
(
self
,
request
):
form_header
=
request
.
data
try
:
data_list_approver
=
[]
data_list_stake
=
[]
data_list_attach
=
[]
data_list_detail
=
[]
form_header_data
=
{
'requested_to_template_name'
:
form_header
[
'requested_to_template_name'
],
'requested_to_template_id'
:
form_header
[
'requested_to_template_id'
],
'requested_to_objective'
:
form_header
[
'requested_to_objective'
],
'requested_to_target_date'
:
form_header
[
'requested_to_target_date'
],
'requested_to_priority'
:
form_header
[
'requested_to_priority'
],
'description'
:
form_header
[
'description'
],
'status'
:
form_header
[
'status'
],
'company_desc'
:
form_header
[
'company_desc'
],
'department_desc'
:
form_header
[
'department_desc'
],
'requested_desc'
:
form_header
[
'requested_desc'
],
'old_form_code'
:
form_header
[
'old_form_code'
],
'requested_by_department'
:
form_header
[
'requested_by_department'
],
'requested_by_user'
:
form_header
[
'requested_by_user'
],
'requested_to_company'
:
form_header
[
'requested_to_company'
],
'requested_to_department'
:
form_header
[
'requested_to_department'
],
'requested_to_user'
:
form_header
[
'requested_to_user'
],
'template_no'
:
form_header
[
'template_no'
]
}
frm_approvers
=
form_header
[
'frm_approvers'
]
frm_stakes
=
form_header
[
'frm_stakes'
]
frm_attachments
=
form_header
[
'frm_attachments'
]
frm_details
=
form_header
[
'frm_details'
]
# sp1 = transaction.savepoint() # nothing will save to db
serializer
=
serializers
.
ChangeRequestFormHeaderSerializer
(
data
=
form_header_data
)
if
serializer
.
is_valid
(
raise_exception
=
True
):
serializer
.
save
()
frm_id
=
serializer
.
data
[
'form_code'
]
print
(
frm_id
)
# create template approvers
for
frm_approver
in
frm_approvers
:
frm_approver
[
'form_code'
]
=
frm_id
data_list_approver
.
append
(
frm_approver
)
serializerApprover
=
serializers
.
ChangeRequestFormApproversSerializer
(
data
=
data_list_approver
,
many
=
True
)
if
serializerApprover
.
is_valid
(
raise_exception
=
True
):
serializerApprover
.
save
()
# create template stakes
for
frm_stake
in
frm_stakes
:
frm_stake
[
'form_code'
]
=
frm_id
data_list_stake
.
append
(
frm_stake
)
serializerStake
=
serializers
.
ChangeRequestFormStakeHoldersSerializer
(
data
=
data_list_stake
,
many
=
True
)
if
serializerStake
.
is_valid
(
raise_exception
=
True
):
serializerStake
.
save
()
# create template attachments
for
frm_attachment
in
frm_attachments
:
frm_attachment
[
'form_code'
]
=
frm_id
data_list_attach
.
append
(
frm_attachment
)
serializerAttach
=
serializers
.
ChangeRequestFormAttachmentsSerializer
(
data
=
data_list_attach
,
many
=
True
)
if
serializerAttach
.
is_valid
(
raise_exception
=
True
):
serializerAttach
.
save
()
# create template details
for
frm_detail
in
frm_details
:
frm_detail
[
'form_code'
]
=
frm_id
data_list_detail
.
append
(
frm_detail
)
serializerDetail
=
serializers
.
ChangeRequestFormDetailsSerializer
(
data
=
data_list_detail
,
many
=
True
)
if
serializerDetail
.
is_valid
(
raise_exception
=
True
):
serializerDetail
.
save
()
message
=
{
'code'
:
201
,
'status'
:
'success'
,
'message'
:
'Form Details successfully saved!'
,
'results'
:
serializer
.
data
}
return
Response
(
message
,
status
=
status
.
HTTP_201_CREATED
)
except
ValidationError
as
e
:
# transaction.savepoint_rollback(sp1)
message
=
{
'code'
:
400
,
'status'
:
'failed'
,
'message'
:
str
(
e
),
}
return
Response
(
message
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
except
Exception
as
e
:
# transaction.savepoint_rollback(sp1)
message
=
{
'code'
:
500
,
'status'
:
'failed'
,
'message'
:
'Request was not able to process'
+
str
(
e
),
}
return
Response
(
message
,
from
django.shortcuts
import
render
from
rest_framework
import
viewsets
as
meviewsets
from
rest_framework.views
import
APIView
from
app.applicationlayer.cms.form
import
serializers
from
app.entities
import
models
from
app.applicationlayer
import
paginators
from
datetime
import
datetime
from
datetime
import
timedelta
from
rest_framework.response
import
Response
from
rest_framework
import
status
,
views
from
rest_framework.decorators
import
action
from
django.http
import
Http404
from
django.db.models
import
Q
import
requests
from
django.conf
import
settings
from
rest_framework.exceptions
import
ValidationError
from
django.db
import
transaction
,
IntegrityError
,
connection
from
app.applicationlayer.utils
import
QuerySetHelper
from
app.businesslayer.changerequest
import
change_request
from
app.applicationlayer.cms.utils_cr
import
number_generator
from
app.entities
import
enums
from
django.forms.models
import
model_to_dict
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
# Change Request Form Views
class
ChangeRequestFormsViewset
(
meviewsets
.
ModelViewSet
):
serializer_class
=
serializers
.
ChangeRequestFormHeaderSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
queryset
=
models
.
ChangeRequestFormHeader
.
objects
.
all
()
lookup_field
=
'form_code'
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
id_number
=
self
.
request
.
user
# print(id_number.code)
self
.
queryset
=
change_request
.
list_by_user
(
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_base
(
self
.
queryset
,
request
.
query_params
.
get
(
'company_requested_to'
),
request
.
query_params
.
get
(
'department_requested_to'
),
request
.
query_params
.
get
(
'date_modified_from'
),
request
.
query_params
.
get
(
'date_modified_to'
),
request
.
query_params
.
get
(
'date_required_from'
),
request
.
query_params
.
get
(
'date_required_to'
),
request
.
query_params
.
get
(
'form_type'
),
)
if
self
.
request
.
query_params
.
get
(
'search'
):
search_key
=
self
.
request
.
query_params
.
get
(
'search'
)
self
.
queryset
=
self
.
queryset
.
filter
(
Q
(
requested_to_template_name__icontains
=
search_key
.
lower
())
|
Q
(
requested_to_template_id__icontains
=
search_key
.
lower
())
)
self
.
queryset
=
self
.
queryset
.
order_by
(
'-created'
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestFormsViewset
,
self
)
.
list
(
request
)
@
action
(
detail
=
False
,
methods
=
[
'get'
],
url_path
=
'dashboard'
,
name
=
"Dashboard Summary"
)
def
dashboard_view
(
self
,
request
):
id_number
=
self
.
request
.
user
print
(
id_number
)
self
.
queryset
=
change_request
.
list_by_user
(
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_base
(
self
.
queryset
,
request
.
query_params
.
get
(
'company_requested_to'
),
request
.
query_params
.
get
(
'department_requested_to'
),
request
.
query_params
.
get
(
'date_modified_from'
),
request
.
query_params
.
get
(
'date_modified_to'
),
request
.
query_params
.
get
(
'date_required_from'
),
request
.
query_params
.
get
(
'date_required_to'
),
request
.
query_params
.
get
(
'form_type'
),
)
pending
=
self
.
queryset
.
filter
(
status__iexact
=
'Pending'
)
.
count
()
approved
=
self
.
queryset
.
filter
(
status__iexact
=
'Approved'
)
.
count
()
rejected
=
self
.
queryset
.
filter
(
status__iexact
=
'Rejected'
)
.
count
()
cancelled
=
self
.
queryset
.
filter
(
status__iexact
=
'Cancelled'
)
.
count
()
completed
=
self
.
queryset
.
filter
(
status__iexact
=
'Closed'
#Completed
)
.
count
()
high
=
self
.
queryset
.
filter
(
requested_to_priority
=
'High'
)
.
count
()
normal
=
self
.
queryset
.
filter
(
requested_to_priority
=
'Normal'
)
.
count
()
awaiting_filtered
=
change_request
.
filter_awaiting
(
self
.
queryset
,
id_number
)
# awaiting = awaiting_filtered.count()
awaiting
=
0
for
awaits
in
awaiting_filtered
:
if
awaits
.
status
.
lower
()
==
'rejected'
:
print
(
"rejected"
)
elif
awaits
.
status
.
lower
()
==
'closed'
:
print
(
"closed"
)
elif
awaits
.
status
.
lower
()
==
'cancelled'
:
print
(
"cancelled"
)
else
:
awaiting
=
awaiting
+
1
overdue_filtered
=
change_request
.
filter_overdue
(
self
.
queryset
)
overdue
=
overdue_filtered
.
count
()
message
=
{
'account_no'
:
id_number
.
code
,
'pending'
:
pending
,
'approved'
:
approved
,
'rejected'
:
rejected
,
'cancelled'
:
cancelled
,
'completed'
:
completed
,
'high'
:
high
,
'normal'
:
normal
,
'awaiting'
:
awaiting
,
'overdue'
:
overdue
,
'code'
:
200
,
'status'
:
'success'
,
'message'
:
'Dashboard Summary'
}
return
Response
(
message
,
status
=
status
.
HTTP_200_OK
)
@
action
(
detail
=
False
,
methods
=
[
'get'
],
url_path
=
'status'
,
name
=
"Dashboard Summary Status"
)
def
list_by_status_view
(
self
,
request
):
id_number
=
self
.
request
.
user
self
.
queryset
=
change_request
.
list_by_user
(
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_status
(
self
.
queryset
,
request
.
query_params
.
get
(
'status'
)
)
self
.
queryset
=
change_request
.
filter_base
(
self
.
queryset
,
request
.
query_params
.
get
(
'company_requested_to'
),
request
.
query_params
.
get
(
'department_requested_to'
),
request
.
query_params
.
get
(
'date_modified_from'
),
request
.
query_params
.
get
(
'date_modified_to'
),
request
.
query_params
.
get
(
'date_required_from'
),
request
.
query_params
.
get
(
'date_required_to'
),
request
.
query_params
.
get
(
'form_type'
),
)
self
.
queryset
=
self
.
queryset
.
order_by
(
'-created'
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
# self.queryset = QuerySetHelper.Filter(self)
return
super
(
ChangeRequestFormsViewset
,
self
)
.
list
(
request
)
@
action
(
detail
=
False
,
methods
=
[
'get'
],
url_path
=
'overdue'
,
name
=
"Dashboard Summary Overdue"
)
def
list_by_overdue_view
(
self
,
request
):
id_number
=
self
.
request
.
user
self
.
queryset
=
change_request
.
list_by_user
(
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_overdue
(
self
.
queryset
)
self
.
queryset
=
change_request
.
filter_base
(
self
.
queryset
,
request
.
query_params
.
get
(
'company_requested_to'
),
request
.
query_params
.
get
(
'department_requested_to'
),
request
.
query_params
.
get
(
'date_modified_from'
),
request
.
query_params
.
get
(
'date_modified_to'
),
request
.
query_params
.
get
(
'date_required_from'
),
request
.
query_params
.
get
(
'date_required_to'
),
request
.
query_params
.
get
(
'form_type'
),
)
self
.
queryset
=
self
.
queryset
.
order_by
(
'-created'
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestFormsViewset
,
self
)
.
list
(
request
)
@
action
(
detail
=
False
,
methods
=
[
'get'
],
url_path
=
'awaiting'
,
name
=
"Dashboard Summary Awaiting"
)
def
list_by_awaiting_view
(
self
,
request
):
id_number
=
self
.
request
.
user
self
.
queryset
=
change_request
.
list_by_user
(
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_awaiting
(
self
.
queryset
,
id_number
.
code
)
self
.
queryset
=
change_request
.
filter_base
(
self
.
queryset
,
request
.
query_params
.
get
(
'company_requested_to'
),
request
.
query_params
.
get
(
'department_requested_to'
),
request
.
query_params
.
get
(
'date_modified_from'
),
request
.
query_params
.
get
(
'date_modified_to'
),
request
.
query_params
.
get
(
'date_required_from'
),
request
.
query_params
.
get
(
'date_required_to'
),
request
.
query_params
.
get
(
'form_type'
),
)
self
.
queryset
=
self
.
queryset
.
filter
(
~
Q
(
status
=
'Rejected'
)
|
~
Q
(
status
=
'Closed'
)
|
~
Q
(
status
=
'Cancelled'
))
self
.
queryset
=
self
.
queryset
.
order_by
(
'-created'
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestFormsViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
archived_at
=
None
,
form_code
=
str
(
self
.
kwargs
.
get
(
'form_code'
))
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
@
action
(
methods
=
[
'PATCH'
],
detail
=
True
,
url_path
=
're_route'
,
url_name
=
're_route'
)
def
re_route
(
self
,
request
,
*
args
,
**
kwargs
):
form_code
=
kwargs
[
'form_code'
]
print
(
form_code
)
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
'Pending'
)
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
action
=
None
,
remarks
=
None
,
date_sent
=
None
)
return
Response
(
"Change request form successfully re routed"
,
status
=
status
.
HTTP_200_OK
)
@
action
(
methods
=
[
'PATCH'
],
detail
=
True
,
url_path
=
're_submit'
,
url_name
=
're_submit'
)
def
re_submit
(
self
,
request
,
*
args
,
**
kwargs
):
# get form code to be re created
form_code
=
kwargs
[
'form_code'
]
frm_id
=
models
.
ChangeRequestFormHeader
.
objects
.
get
(
form_code
=
form_code
)
obj
=
models
.
ChangeRequestFormHeader
.
objects
.
get
(
pk
=
frm_id
.
pk
)
obj
.
pk
=
None
obj
.
form_code
=
"Temp-Form-Code"
obj
.
old_form_code
=
form_code
obj
.
status
=
'Draft'
obj
.
save
()
new_frmheader_code
=
number_generator
(
enums
.
GenerateCode
.
FORM
.
value
,
obj
.
id
)
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
pk
=
obj
.
id
)
.
update
(
form_code
=
new_frmheader_code
)
# re create approvers
approvers
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
)
counter
=
0
for
approver
in
approvers
:
to_delete
=
approver
.
pk
counter
=
counter
+
1
approver
.
pk
=
None
approver
.
code
=
counter
approver
.
remarks
=
None
approver
.
action
=
None
approver
.
date_sent
=
None
approver
.
save
()
new_frmapp_code
=
number_generator
(
enums
.
GenerateCode
.
FORM_APPROVER
.
value
,
approver
.
id
)
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
pk
=
approver
.
id
)
.
update
(
code
=
new_frmapp_code
,
form_code
=
new_frmheader_code
)
# delete old data
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
pk
=
to_delete
)
.
delete
()
# re create stakeholders
stakes
=
models
.
ChangeRequestFormStakeHolders
.
objects
.
filter
(
form_code
=
form_code
)
counter
=
0
for
stake
in
stakes
:
to_delete
=
stake
.
pk
counter
=
counter
+
1
stake
.
pk
=
None
stake
.
code
=
counter
stake
.
save
()
new_frmstake_code
=
number_generator
(
enums
.
GenerateCode
.
FORM_STAKE
.
value
,
stake
.
id
)
models
.
ChangeRequestFormStakeHolders
.
objects
.
filter
(
pk
=
stake
.
id
)
.
update
(
code
=
new_frmstake_code
,
form_code
=
new_frmheader_code
)
# delete old data
models
.
ChangeRequestFormStakeHolders
.
objects
.
filter
(
pk
=
to_delete
)
.
delete
()
# re create details
details
=
models
.
ChangeRequestFormDetails
.
objects
.
filter
(
form_code
=
form_code
)
counter
=
0
for
detail
in
details
:
to_delete
=
detail
.
pk
counter
=
counter
+
1
detail
.
pk
=
None
detail
.
code
=
counter
detail
.
save
()
new_frmdetail_code
=
number_generator
(
enums
.
GenerateCode
.
FORM_DETAIL
.
value
,
detail
.
id
)
models
.
ChangeRequestFormDetails
.
objects
.
filter
(
pk
=
detail
.
id
)
.
update
(
code
=
new_frmdetail_code
,
form_code
=
new_frmheader_code
)
# delete old data
models
.
ChangeRequestFormDetails
.
objects
.
filter
(
pk
=
to_delete
)
.
delete
()
# re create attachments
attachments
=
models
.
ChangeRequestFormAttachments
.
objects
.
filter
(
form_code
=
form_code
)
counter
=
0
for
attachment
in
attachments
:
to_delete
=
attachment
.
pk
counter
=
counter
+
1
attachment
.
pk
=
None
attachment
.
code
=
counter
attachment
.
save
()
new_frmattach_code
=
number_generator
(
enums
.
GenerateCode
.
FORM_ATTACH
.
value
,
attachment
.
id
)
models
.
ChangeRequestFormAttachments
.
objects
.
filter
(
pk
=
attachment
.
id
)
.
update
(
code
=
new_frmattach_code
,
form_code
=
new_frmheader_code
)
# delete old data
models
.
ChangeRequestFormAttachments
.
objects
.
filter
(
pk
=
to_delete
)
.
delete
()
# delete old data form header
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
delete
()
return
Response
(
"Change request form successfully resubmitted"
,
status
=
status
.
HTTP_200_OK
)
# actions
@
action
(
methods
=
[
'PATCH'
],
detail
=
True
,
url_path
=
'actions'
,
url_name
=
'actions'
)
def
actions
(
self
,
request
,
*
args
,
**
kwargs
):
form_code
=
kwargs
[
'form_code'
]
print
(
form_code
)
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
'Pending'
)
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
action
=
None
,
remarks
=
None
,
date_sent
=
None
)
return
Response
(
"Change request form successfully re routed"
,
status
=
status
.
HTTP_200_OK
)
class
ChangeRequestFormApproversViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestFormApprovers
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestFormApproversSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
lookup_field
=
'code'
# def create(self, request, *args, **kwargs):
# ObjectId = request.data.get('id')
# sent = False
# if 'form_status' in request.data:
# # for email
# if str(request.data['level']) == '1' and request.data['form_status'].lower() == 'pending':
# user = request.data['user']
# form_code = request.data['form_code']
# delegation = request.data['delegation']
# # initial_email(user, form_code, delegation)
# # EMAIL CODE FOR APPROVER
# notification_msg = APPROVER_MESSAGE.split(';')[0]
# email_code = APPROVER_MESSAGE.split(';')[1]
# next_appover_email(
# user, form_code, delegation,
# notification_msg, 'initial', email_code
# )
# request.data['date_sent'] = datetime.now().strftime('%Y-%m-%d, %H:%M:%S')
# request.data['created'] = datetime.now().strftime('%Y-%m-%d, %H:%M:%S') #correct
# sent = True
# serializer = self.get_serializer(data=request.data)
# serializer.is_valid(raise_exception=True)
# if ObjectId:
# dbExisting = models.ChangeRequestFormApprovers.objects.filter(
# id=ObjectId,
# archived_at=None).first()
# if dbExisting:
# dbExisting.archived_at = datetime.now()
# dbExisting.save()
# # x = self.perform_create(serializer)
# serializer.id = None
# x = serializer.save()
# if sent == True:
# x.date_sent = datetime.now().strftime('%Y-%m-%d, %H:%M:%S')
# x.created = datetime.now().strftime('%Y-%m-%d, %H:%M:%S') #correct
# x.save()
# headers = self.get_success_headers(serializer.data)
# return Response(
# serializer.data,
# status=status.HTTP_201_CREATED,
# headers=headers
# )
@
action
(
methods
=
[
'PATCH'
],
detail
=
False
,
url_path
=
'approved'
,
url_name
=
'approved'
)
def
approved
(
self
,
request
,
*
args
,
**
kwargs
):
objectid
=
request
.
data
[
'id'
]
instance
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
id
=
objectid
)
instance
=
instance
.
first
()
current_remarks
=
instance
.
remarks
instance
.
update
(
set__archived_at
=
datetime
.
utcnow
()
)
request
.
data
[
'created'
]
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
# correct
print
(
"hello"
)
print
(
request
.
data
[
'remarks'
])
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
self
.
perform_create
(
serializer
)
#------------
id
=
serializer
.
data
[
'id'
]
current_user
=
request
.
data
[
'user'
]
form_code
=
request
.
data
[
'form_code'
]
delegation
=
request
.
data
[
'delegation'
]
action
=
request
.
data
[
'action'
]
level
=
request
.
data
[
'level'
]
next_level
=
int
(
request
.
data
[
'level'
])
+
1
remarks
=
request
.
data
[
'remarks'
]
next_approver
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
level
=
str
(
next_level
),
form_code
=
form_code
,
archived_at
=
None
)
if
action
.
lower
()
==
'approved'
:
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
archived_at
=
None
)
&
Q
(
level
=
str
(
next_level
))
)
.
update
(
date_sent
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_MESSAGE
.
split
(
';'
)[
1
]
# EMAIL CODE FOR APPROVER
notification_msg
=
APPROVER_MESSAGE
.
split
(
';'
)[
0
]
email_code
=
APPROVER_MESSAGE
.
split
(
';'
)[
1
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
for
n_approver
in
next_approver
:
print
(
n_approver
.
user
)
if
n_approver
.
delegation
.
lower
()
==
'vendor/implementor'
:
notification_msg
=
VENDOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
0
]
email_code
=
VENDOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
1
]
next_appover_email
(
n_approver
.
user
,
form_code
,
delegation
,
notification_msg
,
action
,
email_code
)
elif
action
.
lower
()
==
'rejected'
:
if
delegation
.
lower
()
==
'requestor'
:
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
email_code
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
1
]
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
else
:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
1
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
elif
action
.
lower
()
==
'completed'
:
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
archived_at
=
None
)
&
Q
(
level
=
str
(
next_level
))
)
.
update
(
date_sent
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d,
%
H:
%
M:
%
S'
)
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_COMPLETION_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_COMPLETION_MESSAGE
.
split
(
';'
)[
1
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
elif
action
.
lower
()
==
'acknowledged'
:
# models.ChangeRequestFormApprovers.objects.filter(
# level=str(next_level)
# ).update(
# date_sent=datetime.now().strftime('%Y-%m-%d, %H:%M:%S')
# )
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
REQUESTOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
1
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
elif
action
.
lower
()
==
'accepted'
:
# EMAIL CODE FOR VENDOR
requestor_notification_msg
=
VENDOR_ACCEPTANCE_MESSAGE
.
split
(
';'
)[
0
]
requestor_email_code
=
VENDOR_ACCEPTANCE_MESSAGE
.
split
(
';'
)[
1
]
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
requestor_email_code
,
remarks
,
level
)
# elif action.lower() == 'cancelled':
# action_cancelled(self, request, *args, **kwargs)
headers
=
self
.
get_success_headers
(
serializer
.
data
)
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
)
#------------
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
archived_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
self
.
queryset
=
QuerySetHelper
.
Filter
(
self
)
return
super
(
ChangeRequestFormApproversViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
archived_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestFormAttachmentsViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestFormAttachments
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestFormAttachmentsSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
archived_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
self
.
queryset
=
QuerySetHelper
.
Filter
(
self
)
return
super
(
ChangeRequestFormAttachmentsViewset
,
self
)
.
list
(
request
)
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
attachment_no
=
request
.
data
.
get
(
'attachment_no'
)
ObjectId
=
request
.
data
.
get
(
'id'
)
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
if
ObjectId
:
dbExisting
=
models
.
ChangeRequestFormAttachments
.
objects
.
filter
(
id
=
ObjectId
,
archived_at
=
None
)
.
first
()
if
dbExisting
:
dbExisting
.
archived_at
=
datetime
.
now
()
dbExisting
.
save
()
self
.
perform_create
(
serializer
)
if
not
attachment_no
:
id
=
serializer
.
data
[
'id'
]
db_counter
=
models
.
ChangeRequestFormAttachments
.
objects
.
all
()
.
count
()
db_counter
=
db_counter
+
1
models
.
ChangeRequestFormAttachments
.
objects
.
filter
(
id
=
id
)
.
update
(
set__attachment_no
=
number_generator
(
"ATCH"
,
db_counter
)
)
headers
=
self
.
get_success_headers
(
serializer
.
data
)
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
,
headers
=
headers
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
archived_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestFormStakeHoldersViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestFormStakeHolders
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestFormStakeHoldersSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
archived_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
self
.
queryset
=
QuerySetHelper
.
Filter
(
self
)
return
super
(
ChangeRequestFormStakeHoldersViewset
,
self
)
.
list
(
request
)
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
ObjectId
=
request
.
data
.
get
(
'id'
)
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
if
ObjectId
:
dbExisting
=
models
.
ChangeRequestFormStakeHolders
.
objects
.
filter
(
id
=
ObjectId
,
archived_at
=
None
)
.
first
()
if
dbExisting
:
dbExisting
.
archived_at
=
datetime
.
now
()
dbExisting
.
save
()
self
.
perform_create
(
serializer
)
headers
=
self
.
get_success_headers
(
serializer
.
data
)
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
,
headers
=
headers
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
archived_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestFormDetailsViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestFormDetails
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestFormDetailsSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
archived_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
self
.
queryset
=
QuerySetHelper
.
Filter
(
self
)
return
super
(
ChangeRequestFormDetailsViewset
,
self
)
.
list
(
request
)
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
ObjectId
=
request
.
data
.
get
(
'id'
)
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
if
ObjectId
:
dbExisting
=
models
.
ChangeRequestFormDetails
.
objects
.
filter
(
id
=
ObjectId
,
archived_at
=
None
)
.
first
()
if
dbExisting
:
dbExisting
.
archived_at
=
datetime
.
now
()
dbExisting
.
save
()
self
.
perform_create
(
serializer
)
headers
=
self
.
get_success_headers
(
serializer
.
data
)
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
,
headers
=
headers
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
archived_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestFormPost
(
APIView
):
# @transaction.atomic()
def
post
(
self
,
request
):
form_header
=
request
.
data
try
:
data_list_approver
=
[]
data_list_stake
=
[]
data_list_attach
=
[]
data_list_detail
=
[]
form_header_data
=
{
'requested_to_template_name'
:
form_header
[
'requested_to_template_name'
],
'requested_to_template_id'
:
form_header
[
'requested_to_template_id'
],
'requested_to_objective'
:
form_header
[
'requested_to_objective'
],
'requested_to_target_date'
:
form_header
[
'requested_to_target_date'
],
'requested_to_priority'
:
form_header
[
'requested_to_priority'
],
'description'
:
form_header
[
'description'
],
'status'
:
form_header
[
'status'
],
'company_desc'
:
form_header
[
'company_desc'
],
'department_desc'
:
form_header
[
'department_desc'
],
'requested_desc'
:
form_header
[
'requested_desc'
],
'old_form_code'
:
form_header
[
'old_form_code'
],
'requested_by_department'
:
form_header
[
'requested_by_department'
],
'requested_by_user'
:
form_header
[
'requested_by_user'
],
'requested_to_company'
:
form_header
[
'requested_to_company'
],
'requested_to_department'
:
form_header
[
'requested_to_department'
],
'requested_to_user'
:
form_header
[
'requested_to_user'
],
'template_no'
:
form_header
[
'template_no'
]
}
frm_approvers
=
form_header
[
'frm_approvers'
]
frm_stakes
=
form_header
[
'frm_stakes'
]
frm_attachments
=
form_header
[
'frm_attachments'
]
frm_details
=
form_header
[
'frm_details'
]
# sp1 = transaction.savepoint() # nothing will save to db
serializer
=
serializers
.
ChangeRequestFormHeaderSerializer
(
data
=
form_header_data
)
if
serializer
.
is_valid
(
raise_exception
=
True
):
serializer
.
save
()
template_no
=
serializer
.
data
[
'template_no'
]
tmp_counter
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
template_no
=
template_no
)
.
count
()
# tmp_counter = tmp_counter + 1
CR_Prefix
=
serializer
.
data
[
'requested_to_template_id'
]
generate_tmp
=
number_generator
(
CR_Prefix
,
tmp_counter
)
frm_id
=
serializer
.
data
[
'form_code'
]
print
(
frm_id
)
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
frm_id
)
.
update
(
requested_to_template_id
=
generate_tmp
)
# create template approvers
for
frm_approver
in
frm_approvers
:
frm_approver
[
'form_code'
]
=
frm_id
data_list_approver
.
append
(
frm_approver
)
serializerApprover
=
serializers
.
ChangeRequestFormApproversSerializer
(
data
=
data_list_approver
,
many
=
True
)
if
serializerApprover
.
is_valid
(
raise_exception
=
True
):
serializerApprover
.
save
()
# create template stakes
for
frm_stake
in
frm_stakes
:
frm_stake
[
'form_code'
]
=
frm_id
data_list_stake
.
append
(
frm_stake
)
serializerStake
=
serializers
.
ChangeRequestFormStakeHoldersSerializer
(
data
=
data_list_stake
,
many
=
True
)
if
serializerStake
.
is_valid
(
raise_exception
=
True
):
serializerStake
.
save
()
# create template attachments
for
frm_attachment
in
frm_attachments
:
frm_attachment
[
'form_code'
]
=
frm_id
data_list_attach
.
append
(
frm_attachment
)
serializerAttach
=
serializers
.
ChangeRequestFormAttachmentsSerializer
(
data
=
data_list_attach
,
many
=
True
)
if
serializerAttach
.
is_valid
(
raise_exception
=
True
):
serializerAttach
.
save
()
# create template details
for
frm_detail
in
frm_details
:
frm_detail
[
'form_code'
]
=
frm_id
data_list_detail
.
append
(
frm_detail
)
serializerDetail
=
serializers
.
ChangeRequestFormDetailsSerializer
(
data
=
data_list_detail
,
many
=
True
)
if
serializerDetail
.
is_valid
(
raise_exception
=
True
):
serializerDetail
.
save
()
message
=
{
'code'
:
201
,
'status'
:
'success'
,
'message'
:
'Form Details successfully saved!'
,
'results'
:
serializer
.
data
}
return
Response
(
message
,
status
=
status
.
HTTP_201_CREATED
)
except
ValidationError
as
e
:
# transaction.savepoint_rollback(sp1)
message
=
{
'code'
:
400
,
'status'
:
'failed'
,
'message'
:
str
(
e
),
}
return
Response
(
message
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
except
Exception
as
e
:
# transaction.savepoint_rollback(sp1)
message
=
{
'code'
:
500
,
'status'
:
'failed'
,
'message'
:
'Request was not able to process'
+
str
(
e
),
}
return
Response
(
message
,
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
\ No newline at end of file
app/applicationlayer/cms/template/serializers.py
0 → 100644
View file @
4695d626
from
app.entities
import
models
from
rest_framework
import
serializers
from
django.db.models
import
Q
from
drf_writable_nested
import
WritableNestedModelSerializer
class
ChangeRequestTemplateApproversSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestTemplateApprovers
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'archived_at'
,
'code'
]
class
ChangeRequestTemplateStakeHoldersSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestTemplateStakeHolders
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'archived_at'
,
'code'
]
class
ChangeRequestTemplateAttachmentsSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestTemplateAttachments
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'archived_at'
,
'code'
]
class
ChangeRequestTemplateDetailsSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
models
.
ChangeRequestTemplateDetails
fields
=
'__all__'
read_only_fields
=
[
'created'
,
'archived_at'
,
'code'
]
# comment
class
ChangeRequestTemplatesSerializer
(
WritableNestedModelSerializer
):
tmp_approvers
=
ChangeRequestTemplateApproversSerializer
(
many
=
True
,
required
=
False
)
tmp_stakes
=
ChangeRequestTemplateStakeHoldersSerializer
(
many
=
True
,
required
=
False
)
tmp_attachments
=
ChangeRequestTemplateAttachmentsSerializer
(
many
=
True
,
required
=
False
)
tmp_details
=
ChangeRequestTemplateDetailsSerializer
(
many
=
True
,
required
=
False
)
class
Meta
:
model
=
models
.
ChangeRequestTemplateHeader
# fields = '__all__'
fields
=
(
'template_no'
,
'requested_to_template_name'
,
'requested_to_objective'
,
'requested_to_target_date'
,
'requested_to_priority'
,
'description'
,
'created'
,
'requested_to_template_id'
,
'requested_to_company'
,
'requested_to_department'
,
'requested_to_user'
,
'created_by_user'
,
'created_by_department'
,
'tmp_approvers'
,
'tmp_stakes'
,
'tmp_attachments'
,
'tmp_details'
)
read_only_fields
=
[
'created'
,
'archived_at'
,
'template_no'
]
\ No newline at end of file
app/applicationlayer/cms/template/views.py
0 → 100644
View file @
4695d626
from
django.shortcuts
import
render
from
rest_framework
import
viewsets
as
meviewsets
from
rest_framework.views
import
APIView
from
app.applicationlayer.cms.template
import
serializers
from
app.entities
import
models
from
app.applicationlayer
import
paginators
from
datetime
import
datetime
from
datetime
import
timedelta
from
rest_framework.response
import
Response
from
rest_framework
import
status
,
views
from
rest_framework.decorators
import
action
from
django.http
import
Http404
from
django.db.models
import
Q
import
requests
from
django.conf
import
settings
from
rest_framework.exceptions
import
ValidationError
from
django.db
import
transaction
,
IntegrityError
,
connection
from
app.applicationlayer.utils
import
QuerySetHelper
from
app.businesslayer.changerequest
import
change_request
from
app.applicationlayer.cms.utils_cr
import
number_generator
,
crhistory_save
from
django.shortcuts
import
get_object_or_404
from
rest_framework.generics
import
GenericAPIView
from
rest_framework.mixins
import
UpdateModelMixin
from
django.forms.models
import
model_to_dict
from
app.entities
import
enums
class
ChangeRequestTemplatesViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateHeader
.
objects
.
all
()
lookup_field
=
'template_no'
serializer_class
=
serializers
.
ChangeRequestTemplatesSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
order_by
(
'-created'
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestTemplatesViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
template_no
=
str
(
self
.
kwargs
.
get
(
'template_no'
))
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
def
destroy
(
self
,
request
,
*
args
,
**
kwargs
):
try
:
template_no
=
self
.
kwargs
[
'template_no'
]
instance
=
models
.
ChangeRequestTemplateHeader
.
objects
.
filter
(
Q
(
template_no
=
template_no
)
&
Q
(
archived_at
=
None
)
)
.
update
(
archived_at
=
datetime
.
now
())
return
Response
({
"message"
:
"Deleted"
},
status
=
status
.
HTTP_200_OK
)
except
Exception
as
e
:
return
Response
(
e
,
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
@
transaction
.
atomic
def
partial_update
(
self
,
request
,
*
args
,
**
kwargs
):
partial
=
kwargs
.
pop
(
'partial'
,
False
)
instance
=
self
.
get_object
()
template_no
=
kwargs
[
'template_no'
]
tmp_no_exists
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
template_no
=
template_no
)
if
not
tmp_no_exists
:
serializer
=
self
.
get_serializer
(
instance
,
data
=
request
.
data
,
partial
=
partial
)
serializer
.
is_valid
(
raise_exception
=
True
)
old_instance
=
model_to_dict
(
instance
)
self
.
perform_update
(
serializer
)
new_instance
=
serializer
.
data
# print(new_instance)
crhistory_save
(
enums
.
LogEnum
.
UPDATE
.
value
,
enums
.
CREntitiesEnum
.
CR_TMP_HEADER
.
value
,
new_instance
[
'template_no'
],
old_instance
,
new_instance
)
return
Response
(
serializer
.
data
)
return
Response
(
"Unable to edit due to existing transaction"
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
@
action
(
methods
=
[
'PATCH'
],
detail
=
True
,
url_path
=
'archived'
,
url_name
=
'archived'
)
def
archived
(
self
,
request
,
*
args
,
**
kwargs
):
template_no
=
kwargs
[
'template_no'
]
tmp_no_exists
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
template_no
=
template_no
)
if
not
tmp_no_exists
:
models
.
ChangeRequestTemplateDetails
.
objects
.
filter
(
template_no
=
template_no
)
.
update
(
archived_at
=
datetime
.
now
())
models
.
ChangeRequestTemplateAttachments
.
objects
.
filter
(
template_no
=
template_no
)
.
update
(
archived_at
=
datetime
.
now
())
models
.
ChangeRequestTemplateHeader
.
objects
.
filter
(
template_no
=
template_no
)
.
update
(
archived_at
=
datetime
.
now
())
models
.
ChangeRequestTemplateApprovers
.
objects
.
filter
(
template_no
=
template_no
)
.
update
(
archived_at
=
datetime
.
now
())
models
.
ChangeRequestTemplateStakeHolders
.
objects
.
filter
(
template_no
=
template_no
)
.
update
(
archived_at
=
datetime
.
now
())
return
Response
(
"Template successfully archived"
,
status
=
status
.
HTTP_200_OK
)
return
Response
(
"Unable to archive due to existing transaction"
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
class
ChangeRequestTemplatePost
(
APIView
):
@
transaction
.
atomic
()
def
post
(
self
,
request
):
template_header
=
request
.
data
try
:
data_list_approver
=
[]
data_list_stake
=
[]
data_list_attach
=
[]
data_list_detail
=
[]
template_header_data
=
{
'requested_to_template_name'
:
template_header
[
'requested_to_template_name'
],
'requested_to_template_id'
:
template_header
[
'requested_to_template_id'
],
'requested_to_objective'
:
template_header
[
'requested_to_objective'
],
'requested_to_target_date'
:
template_header
[
'requested_to_target_date'
],
'requested_to_priority'
:
template_header
[
'requested_to_priority'
],
'description'
:
template_header
[
'description'
],
'created_by_department'
:
template_header
[
'created_by_department'
],
'created_by_user'
:
template_header
[
'created_by_user'
],
'requested_to_company'
:
template_header
[
'requested_to_company'
],
'requested_to_department'
:
template_header
[
'requested_to_department'
],
'requested_to_user'
:
template_header
[
'requested_to_user'
]
}
tmp_approvers
=
template_header
[
'tmp_approvers'
]
tmp_stakes
=
template_header
[
'tmp_stakes'
]
tmp_attachments
=
template_header
[
'tmp_attachments'
]
tmp_details
=
template_header
[
'tmp_details'
]
sp1
=
transaction
.
savepoint
()
# nothing will save to db
serializer
=
serializers
.
ChangeRequestTemplatesSerializer
(
data
=
template_header_data
)
if
serializer
.
is_valid
(
raise_exception
=
True
):
serializer
.
save
()
tmp_id
=
serializer
.
data
[
'template_no'
]
# create template approvers
for
tmp_approver
in
tmp_approvers
:
tmp_approver
[
'template_no'
]
=
tmp_id
data_list_approver
.
append
(
tmp_approver
)
serializerApprover
=
serializers
.
ChangeRequestTemplateApproversSerializer
(
data
=
data_list_approver
,
many
=
True
)
if
serializerApprover
.
is_valid
(
raise_exception
=
True
):
serializerApprover
.
save
()
# create template stakes
for
tmp_stake
in
tmp_stakes
:
tmp_stake
[
'template_no'
]
=
tmp_id
data_list_stake
.
append
(
tmp_stake
)
serializerStake
=
serializers
.
ChangeRequestTemplateStakeHoldersSerializer
(
data
=
data_list_stake
,
many
=
True
)
if
serializerStake
.
is_valid
(
raise_exception
=
True
):
serializerStake
.
save
()
# create template attachments
for
tmp_attachment
in
tmp_attachments
:
tmp_attachment
[
'template_no'
]
=
tmp_id
data_list_attach
.
append
(
tmp_attachment
)
serializerAttach
=
serializers
.
ChangeRequestTemplateAttachmentsSerializer
(
data
=
data_list_attach
,
many
=
True
)
if
serializerAttach
.
is_valid
(
raise_exception
=
True
):
serializerAttach
.
save
()
# create template details
for
tmp_detail
in
tmp_details
:
tmp_detail
[
'template_no'
]
=
tmp_id
data_list_detail
.
append
(
tmp_detail
)
serializerDetail
=
serializers
.
ChangeRequestTemplateDetailsSerializer
(
data
=
data_list_detail
,
many
=
True
)
if
serializerDetail
.
is_valid
(
raise_exception
=
True
):
serializerDetail
.
save
()
message
=
{
'code'
:
201
,
'status'
:
'success'
,
'message'
:
'Template Details successfully saved!'
,
'results'
:
serializer
.
data
}
return
Response
(
message
,
status
=
status
.
HTTP_201_CREATED
)
except
ValidationError
as
e
:
transaction
.
savepoint_rollback
(
sp1
)
message
=
{
'code'
:
400
,
'status'
:
'failed'
,
'message'
:
str
(
e
),
}
return
Response
(
message
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
except
Exception
as
e
:
transaction
.
savepoint_rollback
(
sp1
)
message
=
{
'code'
:
500
,
'status'
:
'failed'
,
'message'
:
'Request was not able to process'
+
str
(
e
),
}
return
Response
(
message
,
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
class
ChangeRequestTemplateApproversViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateApprovers
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestTemplateApproversSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
lookup_field
=
"code"
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
archived_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestTemplateApproversViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
archived_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestTemplateAttachmentsViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateAttachments
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestTemplateAttachmentsSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
lookup_field
=
"code"
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
archived_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestTemplateAttachmentsViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
archived_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestTemplateStakeHoldersViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateStakeHolders
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestTemplateStakeHoldersSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
lookup_field
=
"code"
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
archived_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestTemplateStakeHoldersViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
archived_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
class
ChangeRequestTemplateDetailsViewset
(
meviewsets
.
ModelViewSet
):
queryset
=
models
.
ChangeRequestTemplateDetails
.
objects
.
all
()
serializer_class
=
serializers
.
ChangeRequestTemplateDetailsSerializer
pagination_class
=
paginators
.
SimplePageNumberPagination
lookup_field
=
"code"
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
queryset
=
self
.
queryset
.
filter
(
archived_at
=
None
)
self
.
queryset
=
QuerySetHelper
.
Sort
(
self
)
return
super
(
ChangeRequestTemplateDetailsViewset
,
self
)
.
list
(
request
)
def
retrieve
(
self
,
request
,
*
args
,
**
kwargs
):
instance
=
self
.
queryset
.
filter
(
archived_at
=
None
)
.
first
()
serializer
=
self
.
get_serializer
(
instance
)
return
Response
(
serializer
.
data
)
\ No newline at end of file
app/applicationlayer/cms/user_privilege/serializers.py
0 → 100644
View file @
4695d626
app/applicationlayer/cms/user_privilege/views.py
0 → 100644
View file @
4695d626
app/applicationlayer/
management/changerequest
/utils_cr.py
→
app/applicationlayer/
cms
/utils_cr.py
View file @
4695d626
from
datetime
import
datetime
from
django.db.models.functions
import
Lower
from
functools
import
wraps
from
django.conf
import
settings
import
requests
from
app.entities
import
models
from
datetime
import
timedelta
from
django.db.models
import
Q
# from dateutil import parser
# EMAIL = settings.EMAIL
# ACCOUNTS = settings.ACCOUNTS
# GROUPS = settings.GROUPS
# COMPANIES = settings.COMPANIES
# ALLOWED_COMPANY = settings.ALLOWED_COMPANY
# CR_FRONT_LINK = settings.CR_FRONT_LINK
# NOTIFICATION = settings.NOTIFICATION
def
get_group_details
(
group_no
):
return
requests
.
get
(
f
'{GROUPS}?group_no={group_no}'
)
.
json
()[
'results'
][
0
]
def
get_companies_details
(
slug
):
return
requests
.
get
(
f
'{COMPANIES}?slug={slug}'
)
.
json
()[
'results'
][
0
]
def
get_account_details
(
id_number
):
return
requests
.
get
(
f
'{ACCOUNTS}?id_number={id_number}'
)
.
json
()[
'results'
][
0
]
def
get_allowed_company
(
id_number
):
return
requests
.
get
(
f
'{ALLOWED_COMPANY}?id_number={id_number}'
)
class
QuerySetHelper
:
@
staticmethod
def
Sort
(
context
):
sort_field
=
context
.
request
.
query_params
.
get
(
'sort_field'
)
sort_order
=
context
.
request
.
query_params
.
get
(
'sort_order'
)
if
sort_field
and
sort_order
:
if
sort_order
.
lower
()
==
'asc'
:
context
.
queryset
=
context
.
queryset
.
order_by
(
sort_field
)
else
:
context
.
queryset
=
context
.
queryset
.
order_by
(
f
"-{sort_field}"
)
return
context
.
queryset
@
staticmethod
def
Search
(
context
):
search_field
=
context
.
request
.
query_params
.
get
(
'search-field'
)
search_key
=
context
.
request
.
query_params
.
get
(
'search-key'
)
if
search_field
and
search_key
:
context
.
queryset
=
context
.
queryset
(
__raw__
=
{
f
"{search_field}"
:
{
"$regex"
:
f
".*{search_key.lower()}.*"
}}
)
return
context
.
queryset
@
staticmethod
def
SearchDynamic
(
base_queryset
,
):
search_field
=
context
.
request
.
query_params
.
get
(
'search-field'
)
search_key
=
context
.
request
.
query_params
.
get
(
'search-key'
)
if
search_field
and
search_key
:
context
.
queryset
=
context
.
queryset
(
__raw__
=
{
f
"{search_field}"
:
{
"$regex"
:
f
".*{search_key.lower()}.*"
}}
)
return
context
.
queryset
# if self.request.query_params.get('search'):
# search_key = self.request.query_params.get('search')
# self.queryset = self.queryset.filter(
# Q(requested_to_template_name__icontains=search_key.lower()) |
# Q(requested_to_template_id__icontains=search_key.lower())
# )
# self.queryset = QuerySetHelper.Sort(self)
@
staticmethod
def
Filter
(
context
):
if
int
(
len
(
context
.
request
.
query_params
))
>
0
:
filtering_kwargs
=
{}
with_params
=
[]
common_params
=
(
'page'
,
'page-size'
,
'page_size'
,
'sort_order'
,
'sort_field'
)
for
field
,
value
in
context
.
request
.
GET
.
items
():
filtering_kwargs
=
{}
if
value
and
field
.
lower
()
not
in
common_params
:
filtering_kwargs
[
field
]
=
{
"$regex"
:
f
".*{value.lower()}.*"
}
filtering_kwargs
[
field
]
=
{
"$regex"
:
f
".*{value}.*"
}
# filtering_kwargs[field] = {"$regex" : f".*{value.lower()}.*"}
with_params
.
append
(
filtering_kwargs
)
raw_query
=
{
"$or"
:
with_params
}
context
.
queryset
=
context
.
queryset
(
__raw__
=
raw_query
)
return
context
.
queryset
def
ApproverStatus
(
status
):
choices
=
[
"pending"
,
"rejected"
,
"approved"
,
"completed"
,
"cancelled"
,
'acknowledged'
,
'accepted'
]
if
status
not
in
choices
:
return
False
else
:
return
True
def
number_generator
(
prefix
,
id
):
date
=
'{:
%
Y
%
m
%
d}'
.
format
(
datetime
.
now
())
id_num
=
'{:07}'
.
format
(
id
)
autogenerated_no
=
prefix
+
'-'
+
date
+
'-'
+
id_num
return
autogenerated_no
def
logged_user
(
self
):
# return self.request.META.get('HTTP_ACCOUNT_NO')
return
self
.
request
.
user
def
receiver_body
(
sender_account_no
,
receiver_account_no
,
email_code
,
email_recipient
,
app
,
sent
,
name
,
routing_level
,
status
,
cr_number
,
cr_name
,
company_requestedto
,
department_requestedto
,
priority_level
,
url
):
receiver_data
=
{
"sender_account_no"
:
sender_account_no
,
"receiver_account_no"
:
receiver_account_no
,
"email_code"
:
email_code
,
"email_recipient"
:
email_recipient
,
"app"
:
app
,
"sent"
:
"False"
,
"name"
:
name
,
"routing_level"
:
routing_level
,
"status"
:
status
,
"cr_number"
:
cr_number
,
"cr_name"
:
cr_name
,
"company_requestedto"
:
company_requestedto
,
"department_requestedto"
:
department_requestedto
,
"priority_level"
:
priority_level
,
"url"
:
url
}
return
receiver_data
def
get_template_instance
(
form_code
):
template_instance
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
deleted_at
=
None
)
)
.
first
()
return
template_instance
def
send_notification
(
form_code
,
cr_number
,
user_id_number
,
user_name
,
message
,
app
,
sender_id_number
,
sender_name
):
notification_data
=
{
"slug"
:
form_code
,
"change_request_template_code"
:
cr_number
,
# (OPENING TAG) receiver credential
"account_no"
:
user_id_number
,
"user"
:
user_name
,
# (CLOSING TAG) receiver credential
"notif_type"
:
"ACTIVITY"
,
"message"
:
message
,
"is_read"
:
False
,
"app"
:
app
,
"sender_account_no"
:
sender_id_number
,
"createdby"
:
sender_name
}
notification
=
requests
.
post
(
NOTIFICATION
,
data
=
notification_data
)
# return notification.status
return
notification
def
send_mail_vendor
(
receiver
,
form_code
,
delegation
,
msg
,
action
,
code
,
remarks
,
routing_level
):
app
=
'cms'
cr_link
=
f
'{CR_FRONT_LINK}/{form_code}'
template_instance
=
get_template_instance
(
form_code
)
cr_number
=
template_instance
.
requested_to_template_id
template_name
=
template_instance
.
requested_to_template_name
requested_to_company
=
template_instance
.
requested_to_company
requested_to_department
=
template_instance
.
requested_to_department
requested_by_user
=
template_instance
.
requested_by_user
created
=
template_instance
.
created
requested_to_priority
=
template_instance
.
requested_to_priority
vendor_instance
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
delegation
=
"Vendor/Implementor"
)
&
Q
(
form_code
=
form_code
)
)
.
first
()
# receiver details
vendor
=
get_account_details
(
vendor_instance
.
user
)
requestor_name
=
vendor
[
'name'
]
requestor_email
=
vendor
[
'email'
]
requestor_account_id
=
vendor
[
'id_number'
]
# sender details
sender_instance
=
get_account_details
(
receiver
)
sender_account_username
=
sender_instance
[
'username'
]
sender_account_id
=
sender_instance
[
'id_number'
]
sender_name
=
sender_instance
[
'name'
]
group
=
get_group_details
(
requested_to_department
)
group_name
=
group
[
'name'
]
company
=
get_companies_details
(
requested_to_company
)
company_name
=
company
[
'name'
]
container
=
receiver_body
(
sender_account_id
,
requestor_account_id
,
code
,
requestor_email
,
app
,
"False"
,
requestor_name
,
routing_level
,
action
,
cr_number
,
template_name
,
company_name
,
group_name
,
requested_to_priority
,
cr_link
)
if
action
.
lower
()
==
'rejected'
:
new_body
=
{
"rejected_by"
:
requestor_name
,
"remarks"
:
remarks
}
elif
action
.
lower
()
==
'accepted'
:
new_body
=
{
"approved_by"
:
requestor_name
}
data
=
{
**
container
,
**
new_body
}
email_status
=
requests
.
post
(
EMAIL
,
data
=
data
)
message
=
f
"{sender_name} {msg} ({template_name})"
send_notification
(
form_code
,
cr_number
,
requestor_account_id
,
requestor_name
,
message
,
app
,
sender_account_id
,
sender_account_username
)
def
send_mail_requestor
(
receiver
,
form_code
,
delegation
,
msg
,
action
,
code
,
remarks
,
routing_level
):
cr_link
=
f
'{CR_FRONT_LINK}/{form_code}'
template_instance
=
get_template_instance
(
form_code
)
app
=
'cms'
cr_number
=
template_instance
.
requested_to_template_id
template_name
=
template_instance
.
requested_to_template_name
requested_to_company
=
template_instance
.
requested_to_company
requested_to_department
=
template_instance
.
requested_to_department
requested_by_user
=
template_instance
.
requested_by_user
created
=
template_instance
.
created
requested_to_priority
=
template_instance
.
requested_to_priority
# receiver details --------------------------------------------------
requestor_instance
=
get_account_details
(
requested_by_user
)
requestor_name
=
requestor_instance
[
'name'
]
requestor_email
=
requestor_instance
[
'email'
]
requestor_account_id
=
requestor_instance
[
'id_number'
]
# sender details --------------------------------------------------
sender_instance
=
get_account_details
(
receiver
)
sender_account_username
=
sender_instance
[
'username'
]
sender_account_id
=
sender_instance
[
'id_number'
]
sender_name
=
sender_instance
[
'name'
]
group
=
get_group_details
(
requested_to_department
)
group_name
=
group
[
'name'
]
company
=
get_companies_details
(
requested_to_company
)
company_name
=
company
[
'name'
]
data
=
receiver_body
(
sender_account_id
,
requestor_account_id
,
code
,
requestor_email
,
app
,
"False"
,
requestor_name
,
routing_level
,
action
,
cr_number
,
template_name
,
company_name
,
group_name
,
requested_to_priority
,
cr_link
)
if
action
.
lower
()
==
'approved'
:
new_body
=
{
"approved_by"
:
sender_name
}
elif
action
.
lower
()
==
'rejected'
:
new_body
=
{
"rejected_by"
:
sender_name
,
"remarks"
:
remarks
}
elif
action
.
lower
()
==
'completed'
:
new_body
=
{
"completed_by"
:
sender_name
}
elif
action
.
lower
()
==
'acknowledged'
:
new_body
=
{
"acknowledge_by"
:
sender_name
}
data
=
{
**
data
,
**
new_body
}
email_status
=
requests
.
post
(
EMAIL
,
data
=
data
)
message
=
f
"{sender_name} {msg} ({template_name})"
notif
=
send_notification
(
form_code
,
cr_number
,
requestor_account_id
,
requestor_name
,
message
,
app
,
sender_account_id
,
sender_account_username
)
def
next_appover_email
(
receiver
,
form_code
,
delegation
,
msg
,
action
,
code
):
cr_link
=
f
'{CR_FRONT_LINK}/{form_code}'
template_instance
=
get_template_instance
(
form_code
)
app
=
'cms'
cr_number
=
template_instance
.
requested_to_template_id
template_name
=
template_instance
.
requested_to_template_name
requested_to_company
=
template_instance
.
requested_to_company
requested_to_department
=
template_instance
.
requested_to_department
requested_by_user
=
template_instance
.
requested_by_user
created
=
template_instance
.
created
requested_to_priority
=
template_instance
.
requested_to_priority
# for rec in receiver:
# receiver details
# if action == 'initial':
receiver_instance
=
get_account_details
(
receiver
)
# else:
# receiver_instance = get_account_details(receiver.user)
receiver_name
=
receiver_instance
[
'name'
]
receiver_email
=
receiver_instance
[
'email'
]
receiver_account_id
=
receiver_instance
[
'id_number'
]
# sender details
sender_instance
=
get_account_details
(
requested_by_user
)
sender_account_username
=
sender_instance
[
'username'
]
sender_account_id
=
sender_instance
[
'id_number'
]
sender_name
=
sender_instance
[
'name'
]
group
=
get_group_details
(
requested_to_department
)
group_name
=
group
[
'name'
]
company
=
get_companies_details
(
requested_to_company
)
company_name
=
company
[
'name'
]
data
=
receiver_body
(
sender_account_id
,
receiver_account_id
,
code
,
receiver_email
,
app
,
"False"
,
receiver_name
,
1
,
"Pending"
,
cr_number
,
template_name
,
company_name
,
group_name
,
requested_to_priority
,
cr_link
)
email_status
=
requests
.
post
(
EMAIL
,
data
=
data
)
message
=
f
"{sender_name} {msg} ({template_name})"
notif
=
send_notification
(
form_code
,
cr_number
,
receiver_account_id
,
receiver_name
,
message
,
app
,
sender_account_id
,
sender_account_username
)
return
True
def
cancel_overdue
(
request
):
date_submitted
=
datetime
.
now
()
requestor
=
request
.
data
[
'requested_by_user'
]
requestor
=
requests
.
get
(
f
'{ACCOUNTS}{requestor}/'
)
requestor
=
requestor
.
json
()[
'results'
]
cancel_date
=
date_submitted
+
timedelta
(
days
=
30
)
cancel_date
=
cancel_date
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
)
request
.
data
[
'date_submitted'
]
=
date_submitted
request
.
data
[
'cancel_date'
]
=
cancel_date
email_content_cancel
=
{
"sender_account_no"
:
requestor
[
'id_number'
],
"receiver_account_no"
:
requestor
[
'id_number'
],
"email_code"
:
"RMS-CRCANCELLED"
,
"email_recipient"
:
requestor
[
'email'
],
"app"
:
"CMS"
,
"sent"
:
"False"
,
"name"
:
requestor
[
'name'
],
"status"
:
"Pending"
,
"auto_cancel_date"
:
cancel_date
,
"cr_number"
:
request
.
data
[
'requested_to_template_id'
],
"cr_name"
:
request
.
data
[
'requested_to_template_name'
],
"company_requestedto"
:
request
.
data
[
'requested_to_company'
],
"department_requestedto"
:
request
.
data
[
'requested_to_department'
],
"priority_level"
:
request
.
data
[
'requested_to_priority'
],
"url"
:
"http://devweb.rms.oneberrysystem.com/login"
}
exist_cancel_template
=
models
.
CancelDateCR
.
objects
.
filter
(
cr_number
=
request
.
data
[
'requested_to_template_id'
]
)
if
exist_cancel_template
:
exist_cancel_template
.
delete
()
models
.
CancelDateCR
.
objects
.
create
(
cr_number
=
request
.
data
[
'requested_to_template_id'
],
trigger_date
=
cancel_date
,
email_content
=
email_content_cancel
)
requested_to_target_date
=
parser
.
parse
(
request
.
data
[
'requested_to_target_date'
]
)
email_content_cancel
[
'email_code'
]
=
"RMS-CROVERDUE"
email_content_cancel
[
'target_date'
]
=
requested_to_target_date
overdue
=
requested_to_target_date
+
timedelta
(
days
=
30
)
overdue
=
overdue
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
)
models
.
TargetDateOverdue
.
objects
.
create
(
cr_number
=
form_code
,
trigger_date
=
overdue
,
email_content
=
email_content_cancel
)
return
True
from
datetime
import
datetime
from
django.db.models.functions
import
Lower
from
functools
import
wraps
from
django.conf
import
settings
import
requests
from
app.entities
import
models
from
datetime
import
timedelta
from
django.db.models
import
Q
# from dateutil import parser
# EMAIL = settings.EMAIL
# ACCOUNTS = settings.ACCOUNTS
# GROUPS = settings.GROUPS
# COMPANIES = settings.COMPANIES
# ALLOWED_COMPANY = settings.ALLOWED_COMPANY
# CR_FRONT_LINK = settings.CR_FRONT_LINK
# NOTIFICATION = settings.NOTIFICATION
def
get_group_details
(
group_no
):
return
requests
.
get
(
f
'{GROUPS}?group_no={group_no}'
)
.
json
()[
'results'
][
0
]
def
get_companies_details
(
slug
):
return
requests
.
get
(
f
'{COMPANIES}?slug={slug}'
)
.
json
()[
'results'
][
0
]
def
get_account_details
(
id_number
):
return
requests
.
get
(
f
'{ACCOUNTS}?id_number={id_number}'
)
.
json
()[
'results'
][
0
]
def
get_allowed_company
(
id_number
):
return
requests
.
get
(
f
'{ALLOWED_COMPANY}?id_number={id_number}'
)
class
QuerySetHelper
:
@
staticmethod
def
Sort
(
context
):
sort_field
=
context
.
request
.
query_params
.
get
(
'sort_field'
)
sort_order
=
context
.
request
.
query_params
.
get
(
'sort_order'
)
if
sort_field
and
sort_order
:
if
sort_order
.
lower
()
==
'asc'
:
context
.
queryset
=
context
.
queryset
.
order_by
(
sort_field
)
else
:
context
.
queryset
=
context
.
queryset
.
order_by
(
f
"-{sort_field}"
)
return
context
.
queryset
@
staticmethod
def
Search
(
context
):
search_field
=
context
.
request
.
query_params
.
get
(
'search-field'
)
search_key
=
context
.
request
.
query_params
.
get
(
'search-key'
)
if
search_field
and
search_key
:
context
.
queryset
=
context
.
queryset
(
__raw__
=
{
f
"{search_field}"
:
{
"$regex"
:
f
".*{search_key.lower()}.*"
}}
)
return
context
.
queryset
@
staticmethod
def
SearchDynamic
(
base_queryset
,
):
search_field
=
context
.
request
.
query_params
.
get
(
'search-field'
)
search_key
=
context
.
request
.
query_params
.
get
(
'search-key'
)
if
search_field
and
search_key
:
context
.
queryset
=
context
.
queryset
(
__raw__
=
{
f
"{search_field}"
:
{
"$regex"
:
f
".*{search_key.lower()}.*"
}}
)
return
context
.
queryset
# if self.request.query_params.get('search'):
# search_key = self.request.query_params.get('search')
# self.queryset = self.queryset.filter(
# Q(requested_to_template_name__icontains=search_key.lower()) |
# Q(requested_to_template_id__icontains=search_key.lower())
# )
# self.queryset = QuerySetHelper.Sort(self)
@
staticmethod
def
Filter
(
context
):
if
int
(
len
(
context
.
request
.
query_params
))
>
0
:
filtering_kwargs
=
{}
with_params
=
[]
common_params
=
(
'page'
,
'page-size'
,
'page_size'
,
'sort_order'
,
'sort_field'
)
for
field
,
value
in
context
.
request
.
GET
.
items
():
filtering_kwargs
=
{}
if
value
and
field
.
lower
()
not
in
common_params
:
filtering_kwargs
[
field
]
=
{
"$regex"
:
f
".*{value.lower()}.*"
}
filtering_kwargs
[
field
]
=
{
"$regex"
:
f
".*{value}.*"
}
# filtering_kwargs[field] = {"$regex" : f".*{value.lower()}.*"}
with_params
.
append
(
filtering_kwargs
)
raw_query
=
{
"$or"
:
with_params
}
context
.
queryset
=
context
.
queryset
(
__raw__
=
raw_query
)
return
context
.
queryset
def
ApproverStatus
(
status
):
choices
=
[
"pending"
,
"rejected"
,
"approved"
,
"completed"
,
"cancelled"
,
'acknowledged'
,
'accepted'
]
if
status
not
in
choices
:
return
False
else
:
return
True
def
number_generator
(
prefix
,
id
):
date
=
'{:
%
Y
%
m
%
d}'
.
format
(
datetime
.
now
())
id_num
=
'{:07}'
.
format
(
id
)
autogenerated_no
=
prefix
+
'-'
+
date
+
'-'
+
id_num
return
autogenerated_no
def
logged_user
(
self
):
# return self.request.META.get('HTTP_ACCOUNT_NO')
return
self
.
request
.
user
def
receiver_body
(
sender_account_no
,
receiver_account_no
,
email_code
,
email_recipient
,
app
,
sent
,
name
,
routing_level
,
status
,
cr_number
,
cr_name
,
company_requestedto
,
department_requestedto
,
priority_level
,
url
):
receiver_data
=
{
"sender_account_no"
:
sender_account_no
,
"receiver_account_no"
:
receiver_account_no
,
"email_code"
:
email_code
,
"email_recipient"
:
email_recipient
,
"app"
:
app
,
"sent"
:
"False"
,
"name"
:
name
,
"routing_level"
:
routing_level
,
"status"
:
status
,
"cr_number"
:
cr_number
,
"cr_name"
:
cr_name
,
"company_requestedto"
:
company_requestedto
,
"department_requestedto"
:
department_requestedto
,
"priority_level"
:
priority_level
,
"url"
:
url
}
return
receiver_data
def
get_template_instance
(
form_code
):
template_instance
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
archived_at
=
None
)
)
.
first
()
return
template_instance
def
send_notification
(
form_code
,
cr_number
,
user_id_number
,
user_name
,
message
,
app
,
sender_id_number
,
sender_name
):
notification_data
=
{
"slug"
:
form_code
,
"change_request_template_code"
:
cr_number
,
# (OPENING TAG) receiver credential
"account_no"
:
user_id_number
,
"user"
:
user_name
,
# (CLOSING TAG) receiver credential
"notif_type"
:
"ACTIVITY"
,
"message"
:
message
,
"is_read"
:
False
,
"app"
:
app
,
"sender_account_no"
:
sender_id_number
,
"createdby"
:
sender_name
}
notification
=
requests
.
post
(
NOTIFICATION
,
data
=
notification_data
)
# return notification.status
return
notification
def
send_mail_vendor
(
receiver
,
form_code
,
delegation
,
msg
,
action
,
code
,
remarks
,
routing_level
):
app
=
'cms'
cr_link
=
f
'{CR_FRONT_LINK}/{form_code}'
template_instance
=
get_template_instance
(
form_code
)
cr_number
=
template_instance
.
requested_to_template_id
template_name
=
template_instance
.
requested_to_template_name
requested_to_company
=
template_instance
.
requested_to_company
requested_to_department
=
template_instance
.
requested_to_department
requested_by_user
=
template_instance
.
requested_by_user
created
=
template_instance
.
created
requested_to_priority
=
template_instance
.
requested_to_priority
vendor_instance
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
delegation
=
"Vendor/Implementor"
)
&
Q
(
form_code
=
form_code
)
)
.
first
()
# receiver details
vendor
=
get_account_details
(
vendor_instance
.
user
)
requestor_name
=
vendor
[
'name'
]
requestor_email
=
vendor
[
'email'
]
requestor_account_id
=
vendor
[
'id_number'
]
# sender details
sender_instance
=
get_account_details
(
receiver
)
sender_account_username
=
sender_instance
[
'username'
]
sender_account_id
=
sender_instance
[
'id_number'
]
sender_name
=
sender_instance
[
'name'
]
group
=
get_group_details
(
requested_to_department
)
group_name
=
group
[
'name'
]
company
=
get_companies_details
(
requested_to_company
)
company_name
=
company
[
'name'
]
container
=
receiver_body
(
sender_account_id
,
requestor_account_id
,
code
,
requestor_email
,
app
,
"False"
,
requestor_name
,
routing_level
,
action
,
cr_number
,
template_name
,
company_name
,
group_name
,
requested_to_priority
,
cr_link
)
if
action
.
lower
()
==
'rejected'
:
new_body
=
{
"rejected_by"
:
requestor_name
,
"remarks"
:
remarks
}
elif
action
.
lower
()
==
'accepted'
:
new_body
=
{
"approved_by"
:
requestor_name
}
data
=
{
**
container
,
**
new_body
}
email_status
=
requests
.
post
(
EMAIL
,
data
=
data
)
message
=
f
"{sender_name} {msg} ({template_name})"
send_notification
(
form_code
,
cr_number
,
requestor_account_id
,
requestor_name
,
message
,
app
,
sender_account_id
,
sender_account_username
)
def
send_mail_requestor
(
receiver
,
form_code
,
delegation
,
msg
,
action
,
code
,
remarks
,
routing_level
):
cr_link
=
f
'{CR_FRONT_LINK}/{form_code}'
template_instance
=
get_template_instance
(
form_code
)
app
=
'cms'
cr_number
=
template_instance
.
requested_to_template_id
template_name
=
template_instance
.
requested_to_template_name
requested_to_company
=
template_instance
.
requested_to_company
requested_to_department
=
template_instance
.
requested_to_department
requested_by_user
=
template_instance
.
requested_by_user
created
=
template_instance
.
created
requested_to_priority
=
template_instance
.
requested_to_priority
# receiver details --------------------------------------------------
requestor_instance
=
get_account_details
(
requested_by_user
)
requestor_name
=
requestor_instance
[
'name'
]
requestor_email
=
requestor_instance
[
'email'
]
requestor_account_id
=
requestor_instance
[
'id_number'
]
# sender details --------------------------------------------------
sender_instance
=
get_account_details
(
receiver
)
sender_account_username
=
sender_instance
[
'username'
]
sender_account_id
=
sender_instance
[
'id_number'
]
sender_name
=
sender_instance
[
'name'
]
group
=
get_group_details
(
requested_to_department
)
group_name
=
group
[
'name'
]
company
=
get_companies_details
(
requested_to_company
)
company_name
=
company
[
'name'
]
data
=
receiver_body
(
sender_account_id
,
requestor_account_id
,
code
,
requestor_email
,
app
,
"False"
,
requestor_name
,
routing_level
,
action
,
cr_number
,
template_name
,
company_name
,
group_name
,
requested_to_priority
,
cr_link
)
if
action
.
lower
()
==
'approved'
:
new_body
=
{
"approved_by"
:
sender_name
}
elif
action
.
lower
()
==
'rejected'
:
new_body
=
{
"rejected_by"
:
sender_name
,
"remarks"
:
remarks
}
elif
action
.
lower
()
==
'completed'
:
new_body
=
{
"completed_by"
:
sender_name
}
elif
action
.
lower
()
==
'acknowledged'
:
new_body
=
{
"acknowledge_by"
:
sender_name
}
data
=
{
**
data
,
**
new_body
}
email_status
=
requests
.
post
(
EMAIL
,
data
=
data
)
message
=
f
"{sender_name} {msg} ({template_name})"
notif
=
send_notification
(
form_code
,
cr_number
,
requestor_account_id
,
requestor_name
,
message
,
app
,
sender_account_id
,
sender_account_username
)
def
next_appover_email
(
receiver
,
form_code
,
delegation
,
msg
,
action
,
code
):
cr_link
=
f
'{CR_FRONT_LINK}/{form_code}'
template_instance
=
get_template_instance
(
form_code
)
app
=
'cms'
cr_number
=
template_instance
.
requested_to_template_id
template_name
=
template_instance
.
requested_to_template_name
requested_to_company
=
template_instance
.
requested_to_company
requested_to_department
=
template_instance
.
requested_to_department
requested_by_user
=
template_instance
.
requested_by_user
created
=
template_instance
.
created
requested_to_priority
=
template_instance
.
requested_to_priority
# for rec in receiver:
# receiver details
# if action == 'initial':
receiver_instance
=
get_account_details
(
receiver
)
# else:
# receiver_instance = get_account_details(receiver.user)
receiver_name
=
receiver_instance
[
'name'
]
receiver_email
=
receiver_instance
[
'email'
]
receiver_account_id
=
receiver_instance
[
'id_number'
]
# sender details
sender_instance
=
get_account_details
(
requested_by_user
)
sender_account_username
=
sender_instance
[
'username'
]
sender_account_id
=
sender_instance
[
'id_number'
]
sender_name
=
sender_instance
[
'name'
]
group
=
get_group_details
(
requested_to_department
)
group_name
=
group
[
'name'
]
company
=
get_companies_details
(
requested_to_company
)
company_name
=
company
[
'name'
]
data
=
receiver_body
(
sender_account_id
,
receiver_account_id
,
code
,
receiver_email
,
app
,
"False"
,
receiver_name
,
1
,
"Pending"
,
cr_number
,
template_name
,
company_name
,
group_name
,
requested_to_priority
,
cr_link
)
email_status
=
requests
.
post
(
EMAIL
,
data
=
data
)
message
=
f
"{sender_name} {msg} ({template_name})"
notif
=
send_notification
(
form_code
,
cr_number
,
receiver_account_id
,
receiver_name
,
message
,
app
,
sender_account_id
,
sender_account_username
)
return
True
def
cancel_overdue
(
request
):
date_submitted
=
datetime
.
now
()
requestor
=
request
.
data
[
'requested_by_user'
]
requestor
=
requests
.
get
(
f
'{ACCOUNTS}{requestor}/'
)
requestor
=
requestor
.
json
()[
'results'
]
cancel_date
=
date_submitted
+
timedelta
(
days
=
30
)
cancel_date
=
cancel_date
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
)
request
.
data
[
'date_submitted'
]
=
date_submitted
request
.
data
[
'cancel_date'
]
=
cancel_date
email_content_cancel
=
{
"sender_account_no"
:
requestor
[
'id_number'
],
"receiver_account_no"
:
requestor
[
'id_number'
],
"email_code"
:
"RMS-CRCANCELLED"
,
"email_recipient"
:
requestor
[
'email'
],
"app"
:
"CMS"
,
"sent"
:
"False"
,
"name"
:
requestor
[
'name'
],
"status"
:
"Pending"
,
"auto_cancel_date"
:
cancel_date
,
"cr_number"
:
request
.
data
[
'requested_to_template_id'
],
"cr_name"
:
request
.
data
[
'requested_to_template_name'
],
"company_requestedto"
:
request
.
data
[
'requested_to_company'
],
"department_requestedto"
:
request
.
data
[
'requested_to_department'
],
"priority_level"
:
request
.
data
[
'requested_to_priority'
],
"url"
:
"http://devweb.rms.oneberrysystem.com/login"
}
exist_cancel_template
=
models
.
CancelDateCR
.
objects
.
filter
(
cr_number
=
request
.
data
[
'requested_to_template_id'
]
)
if
exist_cancel_template
:
exist_cancel_template
.
delete
()
models
.
CancelDateCR
.
objects
.
create
(
cr_number
=
request
.
data
[
'requested_to_template_id'
],
trigger_date
=
cancel_date
,
email_content
=
email_content_cancel
)
requested_to_target_date
=
parser
.
parse
(
request
.
data
[
'requested_to_target_date'
]
)
email_content_cancel
[
'email_code'
]
=
"RMS-CROVERDUE"
email_content_cancel
[
'target_date'
]
=
requested_to_target_date
overdue
=
requested_to_target_date
+
timedelta
(
days
=
30
)
overdue
=
overdue
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
)
models
.
TargetDateOverdue
.
objects
.
create
(
cr_number
=
form_code
,
trigger_date
=
overdue
,
email_content
=
email_content_cancel
)
return
True
def
crhistory_save
(
action
,
entity
,
form_code
,
fromValue
,
toValue
):
models
.
ChangeRequestHistory
.
objects
.
create
(
action
=
action
,
entity
=
entity
,
form_code
=
form_code
,
fromValue
=
fromValue
,
toValue
=
toValue
)
return
True
\ No newline at end of file
app/applicationlayer/urls_cms.py
View file @
4695d626
...
...
@@ -3,27 +3,28 @@ from rest_framework import routers
from
django.conf.urls
import
url
from
app.applicationlayer.management.notification.views
import
NotificationsViewset
from
app.applicationlayer.management.changerequest
import
views
as
crviews
from
app.applicationlayer.cms.template
import
views
as
crtemplate_views
from
app.applicationlayer.cms.form
import
views
as
crform_views
router
=
routers
.
DefaultRouter
()
router
.
register
(
r'notifications'
,
NotificationsViewset
)
router
.
register
(
r'template'
,
crviews
.
ChangeRequestTemplatesViewset
)
router
.
register
(
r'template-approvers'
,
crviews
.
ChangeRequestTemplateApproversViewset
)
router
.
register
(
r'template-attachments'
,
crviews
.
ChangeRequestTemplateAttachmentsViewset
)
router
.
register
(
r'template-stakeholders'
,
crviews
.
ChangeRequestTemplateStakeHoldersViewset
)
router
.
register
(
r'template-details'
,
crviews
.
ChangeRequestTemplateDetailsViewset
)
router
.
register
(
r'template'
,
cr
template_
views
.
ChangeRequestTemplatesViewset
)
router
.
register
(
r'template-approvers'
,
cr
template_
views
.
ChangeRequestTemplateApproversViewset
)
router
.
register
(
r'template-attachments'
,
cr
template_
views
.
ChangeRequestTemplateAttachmentsViewset
)
router
.
register
(
r'template-stakeholders'
,
cr
template_
views
.
ChangeRequestTemplateStakeHoldersViewset
)
router
.
register
(
r'template-details'
,
cr
template_
views
.
ChangeRequestTemplateDetailsViewset
)
router
.
register
(
r'form'
,
crviews
.
ChangeRequestFormsViewset
)
router
.
register
(
r'form-approvers'
,
crviews
.
ChangeRequestFormApproversViewset
)
router
.
register
(
r'form-stakeholders'
,
crviews
.
ChangeRequestFormStakeHoldersViewset
)
router
.
register
(
r'form-attachments'
,
crviews
.
ChangeRequestFormAttachmentsViewset
)
router
.
register
(
r'form-details'
,
crviews
.
ChangeRequestFormDetailsViewset
)
router
.
register
(
r'form'
,
cr
form_
views
.
ChangeRequestFormsViewset
)
router
.
register
(
r'form-approvers'
,
cr
form_
views
.
ChangeRequestFormApproversViewset
)
router
.
register
(
r'form-stakeholders'
,
cr
form_
views
.
ChangeRequestFormStakeHoldersViewset
)
router
.
register
(
r'form-attachments'
,
cr
form_
views
.
ChangeRequestFormAttachmentsViewset
)
router
.
register
(
r'form-details'
,
cr
form_
views
.
ChangeRequestFormDetailsViewset
)
urlpatterns
=
(
path
(
''
,
include
(
router
.
urls
)),
path
(
'template-post/'
,
crviews
.
ChangeRequestTemplatePost
.
as_view
()),
path
(
'form-post/'
,
crviews
.
ChangeRequestFormPost
.
as_view
()),
path
(
'template-post/'
,
cr
template_
views
.
ChangeRequestTemplatePost
.
as_view
()),
path
(
'form-post/'
,
cr
form_
views
.
ChangeRequestFormPost
.
as_view
()),
)
app/businesslayer/changerequest/change_request.py
View file @
4695d626
...
...
@@ -22,19 +22,19 @@ def list_by_user(user_id_number):
approver
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
user
=
user_id_number
)
&
Q
(
delet
ed_at
=
None
)
Q
(
archiv
ed_at
=
None
)
)
approver
=
[
data
.
form_code
for
data
in
approver
]
stake
=
models
.
ChangeRequestFormStakeHolders
.
objects
.
filter
(
Q
(
user
=
user_id_number
)
&
Q
(
delet
ed_at
=
None
)
Q
(
archiv
ed_at
=
None
)
)
stake
=
[
data
.
form_code
for
data
in
stake
]
headers
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
delet
ed_at
=
None
,
archiv
ed_at
=
None
,
requested_by_user
=
user_id_number
)
headers
=
[
data
.
form_code
for
data
in
headers
]
...
...
@@ -52,7 +52,7 @@ def list_by_user(user_id_number):
# priviledgedList = models.ChangeRequestFormHeader.objects.filter(
# requested_to_department__in=crViews,
#
delet
ed_at=None,
#
archiv
ed_at=None,
# )
# priviledgedCrs = [data['form_code'] for data in priviledgedList]
...
...
@@ -62,7 +62,7 @@ def list_by_user(user_id_number):
return_queryset
=
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code__in
=
form_code
,
delet
ed_at
=
None
,
archiv
ed_at
=
None
,
)
exclude
=
return_queryset
.
filter
(
status__iexact
=
'Draft'
,
...
...
@@ -179,28 +179,12 @@ def filter_overdue(base_queryset):
overdue
=
[]
for
query
in
return_queryset
:
try
:
if
query
.
requested_to_target_date
:
requested_to_target_date
=
datetime
.
strptime
(
query
.
requested_to_target_date
[:
-
1
],
"
%
Y-
%
m-
%
dT
%
H:
%
M:
%
S.
%
f"
)
if
(
requested_to_target_date
<
now
):
overdue
.
append
(
query
.
form_code
)
except
ValueError
:
#convert now
if
query
.
requested_to_target_date
:
requested_to_target_date
=
datetime
.
strptime
(
query
.
requested_to_target_date
[:
-
1
],
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
(
requested_to_target_date
<
now
):
overdue
.
append
(
query
.
form_code
)
return_queryset
=
return_queryset
.
filter
(
form_code__in
=
overdue
)
if
(
query
.
requested_to_target_date
<
now
):
overdue
.
append
(
query
.
form_code
)
return_queryset
return_queryset
=
return_queryset
.
filter
(
form_code__in
=
overdue
)
except
Exception
as
e
:
pass
...
...
@@ -236,19 +220,25 @@ def filter_awaiting(base_queryset,
try
:
awaiting_included
=
[]
for
query
in
return_queryset
:
current_level
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
query
.
form_code
)
&
Q
(
deleted_at
=
None
)
&
(
Q
(
action
=
''
)
|
Q
(
action
=
None
))
)
.
order_by
(
'level'
)
if
current_level
:
first_level
=
current_level
.
first
()
if
current_level
[
0
][
'user'
]
==
user_id_number
:
awaiting_included
.
append
(
query
.
form_code
)
first_user
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
code
=
first_level
)
.
values
(
'user'
)
print
(
first_user
.
user
)
# if x == user_id_number:
# awaiting_included.append(query.form_code)
return_queryset
=
return_queryset
.
filter
(
form_code__in
=
awaiting_included
)
...
...
app/entities/migrations/0007_auto_20190911_1102.py
0 → 100644
View file @
4695d626
# Generated by Django 2.2 on 2019-09-11 11:02
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'entities'
,
'0006_emaillogs_is_sent'
),
]
operations
=
[
migrations
.
AlterField
(
model_name
=
'changerequestformheader'
,
name
=
'requested_to_template_id'
,
field
=
models
.
CharField
(
max_length
=
255
),
),
]
app/entities/migrations/0008_auto_20190911_1715.py
0 → 100644
View file @
4695d626
# Generated by Django 2.2 on 2019-09-11 17:15
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'entities'
,
'0007_auto_20190911_1102'
),
]
operations
=
[
migrations
.
AlterField
(
model_name
=
'changerequesthistory'
,
name
=
'form_code'
,
field
=
models
.
CharField
(
blank
=
True
,
max_length
=
255
,
null
=
True
),
),
]
app/entities/migrations/0009_auto_20190911_1845.py
0 → 100644
View file @
4695d626
# Generated by Django 2.2 on 2019-09-11 18:45
from
django.db
import
migrations
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'entities'
,
'0008_auto_20190911_1715'
),
]
operations
=
[
migrations
.
RenameField
(
model_name
=
'changerequestformapprovers'
,
old_name
=
'deleted_at'
,
new_name
=
'archived_at'
,
),
migrations
.
RenameField
(
model_name
=
'changerequestformattachments'
,
old_name
=
'deleted_at'
,
new_name
=
'archived_at'
,
),
migrations
.
RenameField
(
model_name
=
'changerequestformdetails'
,
old_name
=
'deleted_at'
,
new_name
=
'archived_at'
,
),
migrations
.
RenameField
(
model_name
=
'changerequestformheader'
,
old_name
=
'deleted_at'
,
new_name
=
'archived_at'
,
),
migrations
.
RenameField
(
model_name
=
'changerequestformstakeholders'
,
old_name
=
'deleted_at'
,
new_name
=
'archived_at'
,
),
migrations
.
RenameField
(
model_name
=
'changerequesttemplateapprovers'
,
old_name
=
'deleted_at'
,
new_name
=
'archived_at'
,
),
migrations
.
RenameField
(
model_name
=
'changerequesttemplateattachments'
,
old_name
=
'deleted_at'
,
new_name
=
'archived_at'
,
),
migrations
.
RenameField
(
model_name
=
'changerequesttemplatedetails'
,
old_name
=
'deleted_at'
,
new_name
=
'archived_at'
,
),
migrations
.
RenameField
(
model_name
=
'changerequesttemplateheader'
,
old_name
=
'deleted_at'
,
new_name
=
'archived_at'
,
),
migrations
.
RenameField
(
model_name
=
'changerequesttemplatestakeholders'
,
old_name
=
'deleted_at'
,
new_name
=
'archived_at'
,
),
]
app/entities/migrations/0010_auto_20190913_1143.py
0 → 100644
View file @
4695d626
# Generated by Django 2.2 on 2019-09-13 11:43
from
django.db
import
migrations
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'entities'
,
'0009_auto_20190911_1845'
),
]
operations
=
[
migrations
.
RemoveField
(
model_name
=
'changerequestformapprovers'
,
name
=
'archived_at'
,
),
migrations
.
RemoveField
(
model_name
=
'changerequestformattachments'
,
name
=
'archived_at'
,
),
migrations
.
RemoveField
(
model_name
=
'changerequestformdetails'
,
name
=
'archived_at'
,
),
migrations
.
RemoveField
(
model_name
=
'changerequestformheader'
,
name
=
'archived_at'
,
),
migrations
.
RemoveField
(
model_name
=
'changerequestformstakeholders'
,
name
=
'archived_at'
,
),
]
app/entities/models.py
View file @
4695d626
...
...
@@ -354,8 +354,7 @@ class BaseHeader(models.Model):
to_field
=
'code'
)
requested_to_template_name
=
models
.
CharField
(
max_length
=
255
)
requested_to_template_id
=
models
.
CharField
(
max_length
=
255
,
unique
=
True
)
requested_to_objective
=
models
.
CharField
(
max_length
=
255
,
blank
=
True
,
...
...
@@ -374,10 +373,6 @@ class BaseHeader(models.Model):
created
=
models
.
DateTimeField
(
auto_now_add
=
True
)
deleted_at
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
class
Meta
:
abstract
=
True
...
...
@@ -399,9 +394,6 @@ class BaseApprover(models.Model):
created
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
deleted_at
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
class
Meta
:
abstract
=
True
...
...
@@ -421,9 +413,6 @@ class BaseStakeholder(models.Model):
created
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
deleted_at
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
class
Meta
:
abstract
=
True
...
...
@@ -452,9 +441,6 @@ class BaseAttachment(models.Model):
created
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
deleted_at
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
class
Meta
:
abstract
=
True
...
...
@@ -469,9 +455,6 @@ class BaseDetails(models.Model):
created
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
deleted_at
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
class
Meta
:
abstract
=
True
...
...
@@ -487,6 +470,10 @@ class ChangeRequestTemplateHeader(BaseHeader):
template_no
=
models
.
CharField
(
unique
=
True
,
max_length
=
255
)
requested_to_template_id
=
models
.
CharField
(
max_length
=
255
,
unique
=
True
)
created_by_user
=
models
.
ForeignKey
(
User
,
...
...
@@ -500,6 +487,10 @@ class ChangeRequestTemplateHeader(BaseHeader):
to_field
=
'code'
,
related_name
=
'created_by_department'
)
archived_at
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
class
Meta
:
db_table
=
'change_request_template_headers'
...
...
@@ -515,7 +506,7 @@ class ChangeRequestTemplateHeader(BaseHeader):
self
.
save
()
def
delete
(
self
):
self
.
delet
ed_at
=
datetime
.
utcnow
self
.
archiv
ed_at
=
datetime
.
utcnow
self
.
save
()
...
...
@@ -528,6 +519,9 @@ class ChangeRequestTemplateApprovers(BaseApprover):
on_delete
=
models
.
DO_NOTHING
,
to_field
=
'template_no'
,
related_name
=
'tmp_approvers'
)
archived_at
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
class
Meta
:
db_table
=
'change_request_template_approvers'
...
...
@@ -544,6 +538,10 @@ class ChangeRequestTemplateApprovers(BaseApprover):
self
.
created
=
datetime
.
now
()
self
.
save
()
def
delete
(
self
):
self
.
archived_at
=
datetime
.
utcnow
self
.
save
()
class
ChangeRequestTemplateStakeHolders
(
BaseStakeholder
):
code
=
models
.
CharField
(
unique
=
True
,
...
...
@@ -553,6 +551,9 @@ class ChangeRequestTemplateStakeHolders(BaseStakeholder):
on_delete
=
models
.
DO_NOTHING
,
to_field
=
'template_no'
,
related_name
=
'tmp_stakes'
)
archived_at
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
class
Meta
:
db_table
=
'change_request_template_stakeholders'
...
...
@@ -568,6 +569,10 @@ class ChangeRequestTemplateStakeHolders(BaseStakeholder):
self
.
code
=
code
self
.
created
=
datetime
.
now
()
self
.
save
()
def
delete
(
self
):
self
.
archived_at
=
datetime
.
utcnow
self
.
save
()
class
ChangeRequestTemplateAttachments
(
BaseAttachment
):
...
...
@@ -579,6 +584,9 @@ class ChangeRequestTemplateAttachments(BaseAttachment):
on_delete
=
models
.
DO_NOTHING
,
to_field
=
'template_no'
,
related_name
=
'tmp_attachments'
)
archived_at
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
class
Meta
:
db_table
=
'change_request_template_attachments'
...
...
@@ -594,6 +602,10 @@ class ChangeRequestTemplateAttachments(BaseAttachment):
self
.
code
=
code
self
.
created
=
datetime
.
now
()
self
.
save
()
def
delete
(
self
):
self
.
archived_at
=
datetime
.
utcnow
self
.
save
()
class
ChangeRequestTemplateDetails
(
BaseDetails
):
...
...
@@ -605,6 +617,9 @@ class ChangeRequestTemplateDetails(BaseDetails):
on_delete
=
models
.
DO_NOTHING
,
to_field
=
'template_no'
,
related_name
=
'tmp_details'
)
archived_at
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
class
Meta
:
db_table
=
'change_request_template_details'
...
...
@@ -620,6 +635,10 @@ class ChangeRequestTemplateDetails(BaseDetails):
self
.
code
=
code
self
.
created
=
datetime
.
now
()
self
.
save
()
def
delete
(
self
):
self
.
archived_at
=
datetime
.
utcnow
self
.
save
()
'''
*****
...
...
@@ -666,6 +685,8 @@ class ChangeRequestFormHeader(BaseHeader):
max_length
=
255
,
null
=
True
,
blank
=
True
)
requested_to_template_id
=
models
.
CharField
(
max_length
=
255
)
class
Meta
:
db_table
=
'change_request_form_headers'
...
...
@@ -840,7 +861,10 @@ class ChangeRequestHistory(AuditClass):
(
tag
.
value
,
tag
.
value
)
for
tag
in
enums
.
CREntitiesEnum
],
default
=
enums
.
CREntitiesEnum
.
CR_FRM_HEADER
.
value
,
max_length
=
50
)
form_code
=
models
.
IntegerField
()
form_code
=
models
.
CharField
(
max_length
=
255
,
blank
=
True
,
null
=
True
)
fromValue
=
models
.
TextField
(
blank
=
True
,
null
=
True
)
toValue
=
models
.
TextField
(
blank
=
True
,
null
=
True
)
...
...
requirements/RMSv2.postman_collection_091319
0 → 100644
View file @
4695d626
{
"info": {
"_postman_id": "8f54e04b-ae4d-49cc-a560-1e7f94f5313d",
"name": "RMSv2",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Access Token",
"item": [
{
"name": "current-user",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "e53b51ddf459852812a56435aaea934d107cde82",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/auth/current-user/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"auth",
"current-user",
""
]
}
},
"response": []
},
{
"name": "Login",
"request": {
"auth": {
"type": "noauth"
},
"method": "POST",
"header": [
{
"key": "Authorization",
"value": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTU2OTM5MDI4LCJlbWFpbCI6IiJ9.eAA6vSTOhrto5yfy3IQsCdR7iaZxfApNcvdJsFdFmsc",
"type": "text",
"disabled": true
}
],
"body": {
"mode": "formdata",
"formdata": [
{
"key": "username",
"value": "superuser",
"type": "text"
},
{
"key": "password",
"value": "password123",
"type": "text"
}
]
},
"url": {
"raw": "http://localhost:8000/api/v1/auth/login/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"auth",
"login",
""
]
}
},
"response": []
}
]
},
{
"name": "Management",
"item": [
{
"name": "Application Management",
"item": [
{
"name": "List of Applications",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "ee0a1398b999f2ab1953447e2c733734d0cb0413",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/management/applications/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"applications",
""
]
}
},
"response": []
},
{
"name": "View Application",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/management/applications/1/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"applications",
"1",
""
]
}
},
"response": []
},
{
"name": "Create Application",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "ee0a1398b999f2ab1953447e2c733734d0cb0413",
"type": "string"
}
]
},
"method": "POST",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"Assets Management System\",\n\t\"app_code\": \"AMS\"\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/applications/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"applications",
""
]
}
},
"response": []
},
{
"name": "Edit Application",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "4bf6b1bed4066b3712bd3ca6d6e0466c14767cf0",
"type": "string"
}
]
},
"method": "PUT",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"rms2\",\n\t\"app_code\": \"rms\"\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/applications/1/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"applications",
"1",
""
]
}
},
"response": []
},
{
"name": "Delete Application",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "DELETE",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"rms2\"\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/applications/3/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"applications",
"3",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "Companies Management",
"item": [
{
"name": "List of Companies",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "ee0a1398b999f2ab1953447e2c733734d0cb0413",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/management/companies/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"companies",
""
]
}
},
"response": []
},
{
"name": "View Company",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/management/companies/1/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"companies",
"1",
""
]
}
},
"response": []
},
{
"name": "Create Company",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "ee0a1398b999f2ab1953447e2c733734d0cb0413",
"type": "string"
}
]
},
"method": "POST",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"Oneberry\",\n\t\"contact_details\": \"2152509\"\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/companies/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"companies",
""
]
}
},
"response": []
},
{
"name": "Edit Company",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "PUT",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"TIR2\",\n\t\"contact_details\": \"2152509\"\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/companies/4/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"companies",
"4",
""
]
}
},
"response": []
},
{
"name": "Delete Company",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "DELETE",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"name\": \"TIR2\",\n\t\"contact_details\": \"2152509\"\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/companies/4/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"companies",
"4",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "Department Management",
"item": [
{
"name": "List of Department",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "ee0a1398b999f2ab1953447e2c733734d0cb0413",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/management/departments/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"departments",
""
]
}
},
"response": []
},
{
"name": "View Department",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/management/departments/1/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"departments",
"1",
""
]
}
},
"response": []
},
{
"name": "Create Department",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "ee0a1398b999f2ab1953447e2c733734d0cb0413",
"type": "string"
}
]
},
"method": "POST",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Super User\",\n \"company\": 2\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/departments/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"departments",
""
]
}
},
"response": []
},
{
"name": "Edit Department",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "PUT",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Business Developments\",\n \"company\": 2\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/departments/2/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"departments",
"2",
""
]
}
},
"response": []
},
{
"name": "Delete Department",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "DELETE",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Business Developments\",\n \"company\": 2\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/departments/2/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"departments",
"2",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "Module Management",
"item": [
{
"name": "List of Module",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "ee0a1398b999f2ab1953447e2c733734d0cb0413",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/management/modules/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"modules",
""
]
}
},
"response": []
},
{
"name": "View Module",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/management/modules/5/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"modules",
"5",
""
]
}
},
"response": []
},
{
"name": "Create Module",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "ee0a1398b999f2ab1953447e2c733734d0cb0413",
"type": "string"
}
]
},
"method": "POST",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"User Management\",\n \"parent\": 0,\n \"sort_id\": 6,\n \"application\": 1\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/modules/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"modules",
""
]
}
},
"response": []
},
{
"name": "Edit Module",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "PUT",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Assets NVM\",\n \"parent\": 10,\n \"sort_id\": 1,\n \"application\": 2\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/modules/12/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"modules",
"12",
""
]
}
},
"response": []
},
{
"name": "Edit Module Copy",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "46fcda76895239b0fdfa998165780fd451fe049d",
"type": "string"
}
]
},
"method": "DELETE",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Assets NVM\",\n \"parent\": 10,\n \"sort_id\": 1,\n \"application\": 2\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/modules/12/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"modules",
"12",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "User",
"item": [
{
"name": "List of Users",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "7bb27437597c6598d7cffefa7953d28983af6644",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/management/users/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"users",
""
]
}
},
"response": []
},
{
"name": "View Users",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "4bf6b1bed4066b3712bd3ca6d6e0466c14767cf0",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/users/3/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"users",
"3",
""
]
}
},
"response": []
},
{
"name": "Create User",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "7bb27437597c6598d7cffefa7953d28983af6644",
"type": "string"
}
]
},
"method": "POST",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n\t\"application\":[1,3],\r\n\t\"department\": 1,\r\n\t\"user_type\": \"OUA\",\r\n\t\"name\": \"Kath\",\r\n\t\"username\": \"kath\",\r\n\t\"doa\":\"\",\r\n\t\"default_app\": \"RMS\",\r\n\t\"contact_no\": \"1312313\",\r\n\t\"email\": \"test@gmail.com\"\r\n}\r\n"
},
"url": {
"raw": "http://localhost:8000/api/v1/management/users/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"users",
""
]
}
},
"response": []
},
{
"name": "Edit User",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "4bf6b1bed4066b3712bd3ca6d6e0466c14767cf0",
"type": "string"
}
]
},
"method": "PUT",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n\t\"application\":[1,3],\r\n\t\"department\": 1,\r\n\t\"user_type\": \"OUA\",\r\n\t\"name\": \"Ritas\",\r\n\t\"username\": \"OBRITA\",\r\n\t\"password\": \"password123\",\r\n\t\"doa\":\"\",\r\n\t\"default_app\": \"RMS\",\r\n\t\"contact_no\": \"1312313\",\r\n\t\"email\": \"test@gmail.com\"\r\n}\r\n"
},
"url": {
"raw": "http://localhost:8000/api/v1/users/3/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"users",
"3",
""
]
}
},
"response": []
},
{
"name": "Change Password",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "4bf6b1bed4066b3712bd3ca6d6e0466c14767cf0",
"type": "string"
}
]
},
"method": "PUT",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n\t\"application\":[1,3],\r\n\t\"department\": 1,\r\n\t\"user_type\": \"OUA\",\r\n\t\"name\": \"Ritas\",\r\n\t\"username\": \"OBRITA\",\r\n\t\"password\": \"password123\",\r\n\t\"doa\":\"\",\r\n\t\"default_app\": \"RMS\",\r\n\t\"contact_no\": \"1312313\",\r\n\t\"email\": \"test@gmail.com\"\r\n}\r\n"
},
"url": {
"raw": "http://localhost:8000/api/v1/users/3/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"users",
"3",
""
]
}
},
"response": []
},
{
"name": "Delete User",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "4bf6b1bed4066b3712bd3ca6d6e0466c14767cf0",
"type": "string"
}
]
},
"method": "DELETE",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": ""
},
"url": {
"raw": "http://localhost:8000/api/v1/users/3/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"users",
"3",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
}
]
},
{
"name": "Change Request",
"item": [
{
"name": "CR Templates",
"item": [
{
"name": "CR Template Header",
"item": [
{
"name": "Template Header Post",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "7bb27437597c6598d7cffefa7953d28983af6644",
"type": "string"
}
]
},
"method": "POST",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n\t\"requested_to_template_name\": \"Sample Template\",\r\n\t\"requested_to_template_id\": \"JTC\",\r\n\t\"requested_to_objective\": \"Sample Objective\",\r\n\t\"requested_to_target_date\": \"10\",\r\n\t\"requested_to_priority\": \"High\",\r\n\t\"description\": \"sample description\",\r\n\t\"created_by_department\": \"Super User\",\r\n\t\"created_by_user\": \"USER-20190913-0000006\",\r\n\t\"requested_to_company\": \"COMPANY-20190909-0000002\",\r\n\t\"requested_to_department\": \"DEPARTMENT-20190909-0000002\",\r\n\t\"requested_to_user\": \"USER-20190913-0000007\",\r\n\t\r\n\t\r\n\t\"tmp_approvers\": [{\r\n\t\t\t\"level\": \"1\",\r\n\t\t\t\"delegation\": \"Approver\",\r\n\t\t\t\"user\": \"USER-20190911-0000005\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"level\": \"2\",\r\n\t\t\t\"delegation\": \"Approver\",\r\n\t\t\t\"user\": \"USER-20190911-0000005\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"tmp_stakes\": [{\r\n\t\t\t\"delegation\": \"Mandatory Approver\",\r\n\t\t\t\"user\": \"USER-20190911-0000005\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"delegation\": \"Stake Approver\",\r\n\t\t\t\"user\": \"USER-20190911-0000005\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"tmp_attachments\": [{\r\n\t\t\t\"attachment_type\": \"Hello\",\r\n\t\t\t\"attachment_name\": \"heyu\",\r\n\t\t\t\"file_name\": \"Sample\",\r\n\t\t\t\"description\": \"Sameple Desc\",\r\n\t\t\t\"uploaded_by\": \"USER-20190911-0000005\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"attachment_type\": \"Hello\",\r\n\t\t\t\"attachment_name\": \"heyu\",\r\n\t\t\t\"file_name\": \"Sample\",\r\n\t\t\t\"description\": \"Sameple Desc\",\r\n\t\t\t\"uploaded_by\": \"USER-20190911-0000005\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"tmp_details\": [{\r\n\t\t\t\"field_idx\": \"Hello\",\r\n\t\t\t\"field_ref\": \"heyu\",\r\n\t\t\t\"field_val\": \"Sample\",\r\n\t\t\t\"field_props\": \"Sameple Desc\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"field_idx\": \"Hello\",\r\n\t\t\t\"field_ref\": \"heyu\",\r\n\t\t\t\"field_val\": \"Sample\",\r\n\t\t\t\"field_props\": \"Sameple Desc\"\r\n\t\t}\r\n\t]\r\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template-post/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template-post",
""
]
}
},
"response": []
},
{
"name": "List of Templates",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "7bb27437597c6598d7cffefa7953d28983af6644",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template",
""
]
}
},
"response": []
},
{
"name": "View Template",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template/TMP-20190911-0000001/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template",
"TMP-20190911-0000001",
""
]
}
},
"response": []
},
{
"name": "Edit Template",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "PATCH",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"template_no\": \"TMP-20190911-0000001\",\r\n \"requested_to_template_name\": \"Sample Template\",\r\n \"requested_to_objective\": \"hello objective\",\r\n \"requested_to_target_date\": \"2019-09-03T13:59:29.694560\",\r\n \"requested_to_priority\": \"High\",\r\n \"description\": \"sample description\",\r\n \"archived_at\": \"2019-09-11T18:59:09.296883\",\r\n \"requested_to_template_id\": \"temp\",\r\n \"requested_to_company\": \"COMPANY-20190909-0000002\",\r\n \"requested_to_department\": \"DEPARTMENT-20190909-0000002\",\r\n \"requested_to_user\": \"USER-20190909-0000005\",\r\n \"created_by_user\": \"USER-20190909-0000005\",\r\n \"created_by_department\": \"admin\",\r\n \r\n \"tmp_approvers\": [\r\n {\r\n \"id\": 1,\r\n \"level\": \"1\",\r\n \"delegation\": \"Approver\",\r\n \"created\": \"2019-09-11T18:59:09.509901\",\r\n \"archived_at\": null,\r\n \"code\": \"TMPAPR-20190911-0000001\",\r\n \"user\": \"USER-20190909-0000005\",\r\n \"template_no\": \"TMP-20190911-0000001\"\r\n },\r\n {\r\n \"id\": 2,\r\n \"level\": \"2\",\r\n \"delegation\": \"Approver\",\r\n \"created\": \"2019-09-11T18:59:09.607909\",\r\n \"archived_at\": null,\r\n \"code\": \"TMPAPR-20190911-0000002\",\r\n \"user\": \"USER-20190909-0000005\",\r\n \"template_no\": \"TMP-20190911-0000001\"\r\n }\r\n ],\r\n \"tmp_stakes\": [\r\n {\r\n \"id\": 1,\r\n \"delegation\": \"Mandatory Approver\",\r\n \"created\": \"2019-09-11T18:59:09.618924\",\r\n \"archived_at\": null,\r\n \"code\": \"TMPSTK-20190911-0000001\",\r\n \"user\": \"USER-20190909-0000005\",\r\n \"template_no\": \"TMP-20190911-0000001\"\r\n },\r\n {\r\n \"id\": 2,\r\n \"delegation\": \"Stake Approver\",\r\n \"created\": \"2019-09-11T18:59:09.619886\",\r\n \"archived_at\": null,\r\n \"code\": \"TMPSTK-20190911-0000002\",\r\n \"user\": \"USER-20190909-0000005\",\r\n \"template_no\": \"TMP-20190911-0000001\"\r\n }\r\n ],\r\n \"tmp_attachments\": [\r\n {\r\n \"id\": 1,\r\n \"attachment_type\": \"Hello\",\r\n \"attachment_name\": \"heyu\",\r\n \"file_name\": \"Sample\",\r\n \"description\": \"Sameple Desc\",\r\n \"file_upload\": null,\r\n \"created\": \"2019-09-11T18:59:09.631923\",\r\n \"archived_at\": null,\r\n \"code\": \"TMPATCH-20190911-0000001\",\r\n \"uploaded_by\": \"USER-20190909-0000005\",\r\n \"template_no\": \"TMP-20190911-0000001\"\r\n },\r\n {\r\n \"id\": 2,\r\n \"attachment_type\": \"Hello\",\r\n \"attachment_name\": \"heyu\",\r\n \"file_name\": \"Sample\",\r\n \"description\": \"Sameple Desc\",\r\n \"file_upload\": null,\r\n \"created\": \"2019-09-11T18:59:09.674881\",\r\n \"archived_at\": null,\r\n \"code\": \"TMPATCH-20190911-0000002\",\r\n \"uploaded_by\": \"USER-20190909-0000005\",\r\n \"template_no\": \"TMP-20190911-0000001\"\r\n }\r\n ],\r\n \"tmp_details\": [\r\n {\r\n \"id\": 1,\r\n \"field_idx\": \"Hello\",\r\n \"field_ref\": \"heyu\",\r\n \"field_val\": \"Sample\",\r\n \"field_props\": \"Sameple Desc\",\r\n \"created\": \"2019-09-11T18:59:09.684922\",\r\n \"archived_at\": null,\r\n \"code\": \"TMPDETAIL-20190911-0000001\",\r\n \"template_no\": \"TMP-20190911-0000001\"\r\n },\r\n {\r\n \"id\": 2,\r\n \"field_idx\": \"Hello\",\r\n \"field_ref\": \"heyu\",\r\n \"field_val\": \"Sample\",\r\n \"field_props\": \"Sameple Desc\",\r\n \"created\": \"2019-09-11T18:59:09.685887\",\r\n \"archived_at\": null,\r\n \"code\": \"TMPDETAIL-20190911-0000002\",\r\n \"template_no\": \"TMP-20190911-0000001\"\r\n }\r\n ]\r\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template/TMP-20190911-0000001/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template",
"TMP-20190911-0000001",
""
]
}
},
"response": []
},
{
"name": "Archive Template",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "PATCH",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template/archived/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template",
"archived",
""
]
}
},
"response": []
},
{
"name": "Retrieve Template",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "PATCH",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template/TMP-20190909-0000002/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template",
"TMP-20190909-0000002",
""
]
}
},
"response": []
},
{
"name": "Delete Template",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "9a1e3cb331a5191193365413058dcec1ad8fb42a",
"type": "string"
}
]
},
"method": "DELETE",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template/TMP-20190909-0000002/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template",
"TMP-20190909-0000002",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "CR Template Approver",
"item": [
{
"name": "List of Approvers",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template-approvers/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template-approvers",
""
]
}
},
"response": []
},
{
"name": "View Approver",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template-approvers/TMPAPR-20190911-0000001/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template-approvers",
"TMPAPR-20190911-0000001",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "CR Template Stakeholder",
"item": [
{
"name": "List of Stakeholders",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template-stakeholders/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template-stakeholders",
""
]
}
},
"response": []
},
{
"name": "View Stakeholder",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "951574546a6d45af34dfef101840bba27f1ab574",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template-stakeholders/TMPSTK-20190909-0000001/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template-stakeholders",
"TMPSTK-20190909-0000001",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "CR Template Attachment",
"item": [
{
"name": "List of Attachments",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template-attachments/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template-attachments",
""
]
}
},
"response": []
},
{
"name": "View Attachment",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template-attachments/TMPATCH-20190909-0000001/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template-attachments",
"TMPATCH-20190909-0000001",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "CR Template Detail",
"item": [
{
"name": "List of Details",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template-details/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template-details",
""
]
}
},
"response": []
},
{
"name": "View Detail",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/template-details/TMPDETAIL-20190909-0000001/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"template-details",
"TMPDETAIL-20190909-0000001",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
}
],
"_postman_isSubFolder": true
},
{
"name": "CR Forms",
"item": [
{
"name": "CR Form Header",
"item": [
{
"name": "Create Form Header",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "POST",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n\t\"requested_to_template_name\": \"Sample Template\",\r\n\t\"requested_to_template_id\": \"gg\",\r\n\t\"requested_to_objective\": \"hello objective\",\r\n\t\"requested_to_target_date\": \"2019-09-03 13:59:29.694560\",\r\n\t\"requested_to_priority\": \"High\",\r\n\t\"description\": \"sample description\",\r\n\t\"status\": \"Pending\",\r\n\t\"company_desc\": \"Oneberry\",\r\n\t\"department_desc\": \"Oneberry Superuser\",\r\n\t\"requested_desc\": \"Super User\",\r\n\t\"old_form_code\": \"\",\r\n\t\"requested_by_department\": \"admin\",\r\n\t\"requested_by_user\": \"USER-20190911-0000005\",\r\n\t\"requested_to_company\": \"COMPANY-20190909-0000002\",\r\n\t\"requested_to_department\": \"DEPARTMENT-20190909-0000002\",\r\n\t\"requested_to_user\": \"USER-20190911-0000005\",\r\n\t\"template_no\": \"TMP-20190911-0000003\",\r\n\t\r\n\t\"frm_approvers\": [{\r\n\t\t\t\"level\": \"1\",\r\n\t\t\t\"delegation\": \"Approver\",\r\n\t\t\t\"remarks\": \"Approver\",\r\n\t\t\t\"user\": \"USER-20190911-0000005\",\r\n\t\t\t\"action\": \"Approved\",\r\n\t\t\t\"date_sent\": \"2019-09-03 13:59:29.694560\",\r\n\t\t\t\"tmp_approver\": \"TMPAPR-20190911-0000005\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"level\": \"2\",\r\n\t\t\t\"delegation\": \"Approver\",\r\n\t\t\t\"remarks\": \"Approver\",\r\n\t\t\t\"user\": \"USER-20190911-0000005\",\r\n\t\t\t\"action\": \"Approved\",\r\n\t\t\t\"date_sent\": \"2019-09-03 13:59:29.694560\",\r\n\t\t\t\"tmp_approver\": \"TMPAPR-20190911-0000006\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"frm_stakes\": [{\r\n\t\t\t\"date_added\": \"2019-09-03 13:59:29.694560\",\r\n\t\t\t\"delegation\": \"Mandatory Stakeholder\",\r\n\t\t\t\"user\": \"USER-20190911-0000005\",\r\n\t\t\t\"tmp_stake\": \"TMPSTK-20190911-0000005\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"date_added\": \"2019-09-03 13:59:29.694560\",\r\n\t\t\t\"delegation\": \"Mandatory Stakeholder\",\r\n\t\t\t\"user\": \"USER-20190911-0000005\",\r\n\t\t\t\"tmp_stake\": \"TMPSTK-20190911-0000006\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"frm_attachments\": [{\r\n\t\t\t\"attachment_type\": \"Mandatory Attache\",\r\n\t\t\t\"attachment_name\": \"Mandatory Stakeholder\",\r\n\t\t\t\"file_name\": \"sss\",\r\n\t\t\t\"description\": \"Sample Desc 1\",\r\n\t\t\t\"uploaded_by\": \"USER-20190911-0000005\",\r\n\t\t\t\"tmp_attach\": \"TMPATCH-20190911-0000005\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"attachment_type\": \"Mandatory Attache 2\",\r\n\t\t\t\"attachment_name\": \"Mandatory Stakeholder\",\r\n\t\t\t\"file_name\": \"Sample Desc 2\",\r\n\t\t\t\"description\": \"Sample Desc\",\r\n\t\t\t\"uploaded_by\": \"USER-20190911-0000005\",\r\n\t\t\t\"tmp_attach\": \"TMPATCH-20190911-0000006\"\r\n\t\t}\r\n\t],\r\n\t\r\n\t\"frm_details\": [{\r\n\t\t\t\"field_idx\": \"Hello\",\r\n\t\t\t\"field_ref\": \"heyu\",\r\n\t\t\t\"field_val\": \"Sample\",\r\n\t\t\t\"field_props\": \"Sameple Desc\",\r\n\t\t\t\"tmp_detail\": \"TMPDETAIL-20190911-0000005\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"field_idx\": \"Hello\",\r\n\t\t\t\"field_ref\": \"heyu\",\r\n\t\t\t\"field_val\": \"Sample\",\r\n\t\t\t\"field_props\": \"Sameple Desc\",\r\n\t\t\t\"tmp_detail\": \"TMPDETAIL-20190911-0000006\"\r\n\t\t}\r\n\t]\r\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form-post/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form-post",
""
]
}
},
"response": []
},
{
"name": "List of Forms",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "f19b85056e3e3e7c095239f6701cb2ef4f7eeb09",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form",
""
]
}
},
"response": []
},
{
"name": "View Form",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "defb141318b540c9df8698150a68b59af14cca20",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form/FRM-20190912-0000002/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form",
"FRM-20190912-0000002",
""
]
}
},
"response": []
},
{
"name": "Edit Form",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "951574546a6d45af34dfef101840bba27f1ab574",
"type": "string"
}
]
},
"method": "PUT",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"requested_to_template_name\": \"Sample Templates\",\r\n \"requested_to_template_id\": \"Samp\",\r\n \"requested_to_objective\": \"hello objective\",\r\n \"requested_to_target_date\": \"2019-09-03T13:59:29.694560\",\r\n \"requested_to_priority\": \"High\",\r\n \"description\": \"sample description\",\r\n \"form_code\": \"FRM-20190909-0000006\",\r\n \"cancel_date\": null,\r\n \"status\": \"Pending\",\r\n \"company_desc\": \"Oneberry\",\r\n \"department_desc\": \"Oneberry Superuser\",\r\n \"requested_desc\": \"Super User\",\r\n \"old_form_code\": \"\",\r\n \"requested_to_company\": \"COMPANY-20190909-0000002\",\r\n \"requested_to_department\": \"DEPARTMENT-20190909-0000002\",\r\n \"requested_to_user\": \"USER-20190909-0000005\",\r\n \"requested_by_user\": \"USER-20190909-0000005\",\r\n \"requested_by_department\": \"admin\",\r\n \"template_no\": \"TMP-20190909-0000001\",\r\n \"action\": \"No\"\r\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form/FRM-20190909-0000006/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form",
"FRM-20190909-0000006",
""
]
}
},
"response": []
},
{
"name": "Delete Form",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "951574546a6d45af34dfef101840bba27f1ab574",
"type": "string"
}
]
},
"method": "DELETE",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form/FRM-20190909-0000006/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form",
"FRM-20190909-0000006",
""
]
}
},
"response": []
},
{
"name": "Re Route for Approval",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "67f8d147a33e90055f19a47bc60ad559e4b556e7",
"type": "string"
}
]
},
"method": "PATCH",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form/FRM-20190912-0000002/re_route/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form",
"FRM-20190912-0000002",
"re_route",
""
]
}
},
"response": []
},
{
"name": "Resubmit",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "22259ad4dd11ee87dd0735366694979dc419228f",
"type": "string"
}
]
},
"method": "PATCH",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form/FRM-20190912-0000002/re_submit/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form",
"FRM-20190912-0000002",
"re_submit",
""
]
}
},
"response": []
},
{
"name": "CR Action",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "6fb3fbceeab432bbe8102481c2fdf11db55dbf72",
"type": "string"
}
]
},
"method": "PATCH",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"id\": 1,\r\n \"level\": \"1\",\r\n \"delegation\": \"Approver\",\r\n \"created\": \"2019-09-10T17:21:10.794834\",\r\n \"deleted_at\": null,\r\n \"code\": \"FRMAPR-20190910-0000001\",\r\n \"remarks\": \"Approver\",\r\n \"action\": \"Approved\",\r\n \"date_sent\": \"2019-09-03T13:59:29.694560\",\r\n \"user\": \"USER-20190909-0000005\",\r\n \"form_code\": \"FRM-20190910-0000001\",\r\n \"tmp_approver\": \"TMPAPR-20190910-0000001\"\r\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form-approvers/approved/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form-approvers",
"approved",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "CR Form Approver",
"item": [
{
"name": "List of Approvers",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "6fb3fbceeab432bbe8102481c2fdf11db55dbf72",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form-approvers/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form-approvers",
""
]
}
},
"response": []
},
{
"name": "View Approver",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "951574546a6d45af34dfef101840bba27f1ab574",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form-approvers/TMPAPR-20190909-0000001/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form-approvers",
"TMPAPR-20190909-0000001",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "CR Form Stakeholder",
"item": [
{
"name": "List of Stakeholders",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "951574546a6d45af34dfef101840bba27f1ab574",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form-stakeholders/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form-stakeholders",
""
]
}
},
"response": []
},
{
"name": "View Stakeholder",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "951574546a6d45af34dfef101840bba27f1ab574",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form-stakeholders/TMPSTK-20190909-0000001/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form-stakeholders",
"TMPSTK-20190909-0000001",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "CR Form Attachment",
"item": [
{
"name": "List of Attachments",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "951574546a6d45af34dfef101840bba27f1ab574",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form-attachments/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form-attachments",
""
]
}
},
"response": []
},
{
"name": "View Attachment",
"protocolProfileBehavior": {
"disableBodyPruning": true
},
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "951574546a6d45af34dfef101840bba27f1ab574",
"type": "string"
}
]
},
"method": "GET",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"attachment_type\": \"Mandatory Attached\",\r\n \"attachment_name\": \"Mandatory Stakeholder\",\r\n \"file_name\": \"USER-20190909-0000005\",\r\n \"description\": \"Sample Desc 1\",\r\n \"file_upload\": null,\r\n \"code\": \"FRMATCH-20190909-0000001\",\r\n \"uploaded_by\": \"USER-20190909-0000005\",\r\n \"form_code\": \"FRM-20190909-0000005\",\r\n \"tmp_attach\": \"TMPATCH-20190909-0000001\"\r\n}"
},
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form-attachments/FRMATCH-20190909-0000001/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form-attachments",
"FRMATCH-20190909-0000001",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
},
{
"name": "CR Form Detail",
"item": [
{
"name": "List of Details",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "951574546a6d45af34dfef101840bba27f1ab574",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form-details/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form-details",
""
]
}
},
"response": []
},
{
"name": "View Detail",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8000/api/v1/change-request/form-details/FRMDETAIL-20190909-0000001/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"change-request",
"form-details",
"FRMDETAIL-20190909-0000001",
""
]
}
},
"response": []
}
],
"_postman_isSubFolder": true
}
],
"_postman_isSubFolder": true
}
]
},
{
"name": "Notifications",
"item": [
{
"name": "List Notifications by account_no",
"protocolProfileBehavior": {
"disableBodyPruning": true
},
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "951574546a6d45af34dfef101840bba27f1ab574",
"type": "string"
}
]
},
"method": "GET",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"url": {
"raw": "http://localhost:8000/api/v1/management/notifications/",
"protocol": "http",
"host": [
"localhost"
],
"port": "8000",
"path": [
"api",
"v1",
"management",
"notifications",
""
]
}
},
"response": []
},
{
"name": "Create Notification",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "37d5c7c08f82cc0f8a3a73634d3b6a78ead3da37",
"type": "string"
}
]
},
"method": "POST",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"form_header_code\": \"FRM-20190902-000001\",\n \"notif_type\": \"ACTIVITY\",\n \"message\": \"Oneberry CCTV Replacement Request due in 5 days\",\n \"is_read\": false,\n \"app\": \"APP-20190903-0000002\",\n \"account_no\": \"USER-20190904-0000002\",\n \"sender_account_no\": \"USER-20190904-0000002\"\n}"
},
"url": {
"raw": "http://devapi.rmsv2.oneberrysystem.com:7020/api/v1/notifications/",
"protocol": "http",
"host": [
"devapi",
"rmsv2",
"oneberrysystem",
"com"
],
"port": "7020",
"path": [
"api",
"v1",
"notifications",
""
]
}
},
"response": []
},
{
"name": "Update Read Status by ids",
"request": {
"auth": {
"type": "basic",
"basic": [
{
"key": "password",
"value": "password123",
"type": "string"
},
{
"key": "username",
"value": "admin",
"type": "string"
}
]
},
"method": "PATCH",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"ids\": [8]\n}"
},
"url": {
"raw": "http://devapi.rmsv2.oneberrysystem.com/api/v1/notifications/USER-20190903-0000002/seen/",
"protocol": "http",
"host": [
"devapi",
"rmsv2",
"oneberrysystem",
"com"
],
"path": [
"api",
"v1",
"notifications",
"USER-20190903-0000002",
"seen",
""
]
}
},
"response": []
},
{
"name": "Update Read Status by account_no",
"request": {
"auth": {
"type": "basic",
"basic": [
{
"key": "password",
"value": "password123",
"type": "string"
},
{
"key": "username",
"value": "admin",
"type": "string"
}
]
},
"method": "PATCH",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": ""
},
"url": {
"raw": "http://devapi.rmsv2.oneberrysystem.com/api/v1/notifications/USER-20190903-0000002/seenall/",
"protocol": "http",
"host": [
"devapi",
"rmsv2",
"oneberrysystem",
"com"
],
"path": [
"api",
"v1",
"notifications",
"USER-20190903-0000002",
"seenall",
""
]
}
},
"response": []
}
]
}
]
}
\ No newline at end of file
requirements/local.txt
View file @
4695d626
...
...
@@ -19,6 +19,7 @@ Django==2.2
django-cors-headers==2.5.2
django-filter==2.1.0
djangorestframework==3.9.2
drf-writable-nested==0.5.1
gevent==1.4.0
greenlet==0.4.15
hiredis==1.0.0
...
...
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