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
bd7e796b
Commit
bd7e796b
authored
Oct 30, 2019
by
Gladys Forte
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #431 in RMS/api-main-service from gladys-dev2 to RMSv2
* commit '
5b5fd7dd
': clean clean refactor actions code
parents
bfaed074
5b5fd7dd
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
512 additions
and
683 deletions
+512
-683
app/applicationlayer/cms/form/header/views.py
app/applicationlayer/cms/form/header/views.py
+227
-309
app/applicationlayer/utils.py
app/applicationlayer/utils.py
+1
-1
app/businesslayer/changerequest/change_request.py
app/businesslayer/changerequest/change_request.py
+284
-5
app/helper/email_service/sender.py
app/helper/email_service/sender.py
+0
-368
No files found.
app/applicationlayer/cms/form/header/views.py
View file @
bd7e796b
...
@@ -495,100 +495,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -495,100 +495,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
except
Exception
as
e
:
except
Exception
as
e
:
return
Response
(
e
,
return
Response
(
e
,
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
@
transaction
.
atomic
()
@
action
(
methods
=
[
'PATCH'
],
detail
=
True
,
url_path
=
're_route'
,
url_name
=
're_route'
)
def
re_route
(
self
,
request
,
*
args
,
**
kwargs
):
# generate batchno history
batchno
=
get_max_batchno
(
"batch"
)
# partial update
partial
=
kwargs
.
pop
(
'partial'
,
True
)
instance
=
self
.
get_object
()
form_code
=
kwargs
[
'form_code'
]
status_update
=
{
"status"
:
'Pending'
}
serializer
=
self
.
get_serializer
(
instance
,
data
=
status_update
,
partial
=
partial
)
serializer
.
is_valid
(
raise_exception
=
True
)
old_instance
=
model_to_dict
(
instance
)
self
.
perform_update
(
serializer
)
form_header
=
get_object_or_404
(
models
.
ChangeRequestFormHeader
,
pk
=
instance
.
id
)
new_instance
=
model_to_dict
(
form_header
)
# save history in form header
crhistory_save
(
batchno
,
enums
.
CREnum
.
REROUTE
.
value
,
enums
.
CREnum
.
UPDATE
.
value
,
enums
.
CREntitiesEnum
.
CR_FRM_HEADER
.
value
,
form_code
,
old_instance
,
new_instance
)
approver_data
=
[]
# get all approvers of form
approvers
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
)
for
approver
in
approvers
:
approver_add
=
{
'id'
:
approver
.
id
,
'action'
:
None
,
'remarks'
:
None
,
'date_sent'
:
None
,
'action_date'
:
None
,
'is_action'
:
False
}
approver_data
.
append
(
approver_add
)
change_request
.
form_add_edit_delete
(
approver_data
,
models
.
ChangeRequestFormApprovers
,
enums
.
CREntitiesEnum
.
CR_FRM_APPROVER
.
value
,
ChangeRequestFormApproversSerializer
,
partial
,
self
,
form_code
,
batchno
,
enums
.
CREnum
.
REROUTE
.
value
)
min_level
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
)
.
aggregate
(
Min
(
'level'
))
min_level
=
min_level
.
get
(
'level__min'
)
next_approver_email
(
form_code
,
min_level
)
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
min_level
))
)
.
update
(
date_sent
=
datetime
.
now
()
)
message
=
status_message_response
(
200
,
'success'
,
'Change request form successfully re routed'
,
serializer
.
data
)
return
Response
(
message
,
status
=
status
.
HTTP_200_OK
)
@
transaction
.
atomic
()
@
transaction
.
atomic
()
@
action
(
@
action
(
...
@@ -690,15 +596,13 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -690,15 +596,13 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
def
actions
(
self
,
request
,
*
args
,
**
kwargs
):
def
actions
(
self
,
request
,
*
args
,
**
kwargs
):
current_user
=
self
.
request
.
user
.
code
current_user
=
self
.
request
.
user
.
code
action_body
=
request
.
data
action_body
=
request
.
data
id
=
action_body
.
get
(
'id'
,
False
)
id
=
action_body
.
get
(
'id'
,
False
)
form_code
=
action_body
.
get
(
'form_code'
,
False
)
form_code
=
action_body
.
get
(
'form_code'
,
False
)
delegation
=
action_body
.
get
(
'delegation'
,
False
)
#
delegation = action_body.get('delegation', False)
action
=
action_body
.
get
(
'action'
,
False
)
action
=
action_body
.
get
(
'action'
,
False
)
level
=
action_body
.
get
(
'level'
,
False
)
#
level = action_body.get('level', False)
next_level
=
int
(
level
)
+
1
#
next_level = int(level) + 1
remarks
=
action_body
.
get
(
'remarks'
,
False
)
remarks
=
action_body
.
get
(
'remarks'
,
False
)
# generate batchno history
# generate batchno history
...
@@ -736,249 +640,251 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -736,249 +640,251 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
new_instance
new_instance
)
)
if
action
.
lower
()
==
'approved'
:
change_request
.
cr_routing_actions
(
new_instance
,
current_user
)
# if action.lower() == 'approved':
the_next_vendor
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
the_next_vendor = models.ChangeRequestFormApprovers.objects.filter(
form_code
=
form_code
,
level
=
int
(
next_level
),
#
form_code=form_code, level=int(next_level),
delegation
=
'Vendor/Implementor'
#
delegation='Vendor/Implementor'
)
.
first
()
#
).first()
if
the_next_vendor
:
#
if the_next_vendor:
the_last_vendor
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
the_last_vendor = models.ChangeRequestFormApprovers.objects.filter(
form_code
=
form_code
,
delegation
=
'Vendor/Implementor'
#
form_code=form_code, delegation='Vendor/Implementor'
)
.
order_by
(
'level'
)
.
last
()
#
).order_by('level').last()
if
the_next_vendor
==
the_last_vendor
:
#
if the_next_vendor == the_last_vendor:
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
#
models.ChangeRequestFormHeader.objects.filter(
form_code
=
form_code
#
form_code=form_code
)
.
update
(
status
=
'Approved'
)
#
).update(status='Approved')
# NOTIF MSG FOR REQUESTOR
#
# NOTIF MSG FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_MESSAGE
.
split
(
';'
)[
0
]
#
requestor_notification_msg = REQUESTOR_MESSAGE.split(';')[0]
# NOTIF MSG FOR NEXT APPROVER
#
# NOTIF MSG FOR NEXT APPROVER
notification_msg
=
APPROVER_MESSAGE
.
split
(
';'
)[
0
]
#
notification_msg = APPROVER_MESSAGE.split(';')[0]
# SEND EMAIL AND NOTIF TO REQUESTOR
#
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
#
send_mail_requestor(
current_user
,
form_code
,
delegation
,
#
current_user, form_code, delegation,
requestor_notification_msg
,
action
,
#
requestor_notification_msg, action,
remarks
,
level
#
remarks, level
)
#
)
next_approver_email
(
form_code
,
next_level
)
#
next_approver_email(form_code, next_level)
date_now
=
datetime
.
now
()
#
date_now = datetime.now()
# update next approver details
#
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
models.ChangeRequestFormApprovers.objects.filter(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
next_level
))
#
Q(form_code=form_code) & Q(level=int(next_level))
)
.
update
(
#
).update(
date_sent
=
date_now
,
#
date_sent=date_now,
is_action
=
True
#
is_action=True
)
#
)
# update current approver details
#
# update current approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
models.ChangeRequestFormApprovers.objects.filter(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
#
Q(form_code=form_code) & Q(level=int(level))
)
.
update
(
#
).update(
is_action
=
False
#
is_action=False
)
#
)
reminder_trigger_save
(
form_code
,
date_now
,
#
reminder_trigger_save(form_code, date_now,
approver_instance
.
date_sent
)
#
approver_instance.date_sent)
elif
action
.
lower
()
==
'rejected'
:
#
elif action.lower() == 'rejected':
# send email to vendor
#
# send email to vendor
if
delegation
.
lower
()
==
'requestor'
:
#
if delegation.lower() == 'requestor':
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
#
notification_msg = VENDOR_REJECT_MESSAGE.split(';')[0]
send_mail_vendor
(
# send_mail_vendor(
current_user
,
form_code
,
delegation
,
# current_user, form_code, delegation,
notification_msg
,
action
,
# notification_msg, action,
remarks
,
level
# remarks, level
)
# )
prev_level
=
int
(
level
)
-
1
# reset last vendor details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
prev_level
))
)
.
update
(
is_action
=
True
,
action
=
'Acknowledged'
,
action_date
=
datetime
.
now
(),
date_sent
=
datetime
.
now
()
)
else
:
prev_vendor
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
# prev_level = int(level) - 1
Q
(
form_code
=
form_code
)
&
# # reset last vendor details
Q
(
action
=
'Completed'
)
&
# models.ChangeRequestFormApprovers.objects.filter(
Q
(
delegation
=
'Vendor/Implementor'
)
&
# Q(form_code=form_code) &
Q
(
level__lte
=
int
(
level
))
# Q(level=int(prev_level))
)
# ).update(
# is_action=True,
if
not
prev_vendor
.
count
()
>
0
:
# action='Acknowledged',
# action_date=datetime.now(),
# date_sent=datetime.now()
# )
# else:
# prev_vendor = models.ChangeRequestFormApprovers.objects.filter(
# Q(form_code=form_code) &
# Q(action='Completed') &
# Q(delegation='Vendor/Implementor') &
# Q(level__lte=int(level))
# )
# if not prev_vendor.count() > 0:
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
#
models.ChangeRequestFormHeader.objects.filter(
form_code
=
form_code
#
form_code=form_code
)
.
update
(
status
=
'Rejected'
)
#
).update(status='Rejected')
# EMAIL CODE FOR REQUESTOR
#
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
#
requestor_notification_msg = REQUESTOR_REJECT_MESSAGE.split(';')[0]
# SEND EMAIL AND NOTIF TO REQUESTOR
#
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
#
send_mail_requestor(
current_user
,
form_code
,
delegation
,
#
current_user, form_code, delegation,
requestor_notification_msg
,
action
,
#
requestor_notification_msg, action,
remarks
,
level
#
remarks, level
)
#
)
else
:
#
else:
# EMAIL CODE FOR REQUESTOR
#
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
#
requestor_notification_msg = REQUESTOR_REJECT_MESSAGE.split(';')[0]
# SEND EMAIL AND NOTIF TO REQUESTOR
#
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
#
send_mail_requestor(
current_user
,
form_code
,
delegation
,
#
current_user, form_code, delegation,
requestor_notification_msg
,
action
,
#
requestor_notification_msg, action,
remarks
,
level
#
remarks, level
)
#
)
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
#
notification_msg = VENDOR_REJECT_MESSAGE.split(';')[0]
send_mail_vendor
(
#
send_mail_vendor(
current_user
,
form_code
,
'others'
,
#
current_user, form_code, 'others',
notification_msg
,
action
,
#
notification_msg, action,
remarks
,
level
#
remarks, level
)
#
)
last_action_vendor
=
prev_vendor
.
last
()
#
last_action_vendor = prev_vendor.last()
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
models.ChangeRequestFormApprovers.objects.filter(
code
=
last_action_vendor
#
code=last_action_vendor
)
.
update
(
#
).update(
is_action
=
True
,
#
is_action=True,
action
=
'Acknowledged'
,
#
action='Acknowledged',
action_date
=
datetime
.
now
(),
#
action_date=datetime.now(),
date_sent
=
datetime
.
now
()
#
date_sent=datetime.now()
)
#
)
level
=
last_action_vendor
.
level
+
1
#
level = last_action_vendor.level + 1
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
models.ChangeRequestFormApprovers.objects.filter(
Q
(
form_code
=
form_code
)
&
Q
(
level__gte
=
int
(
level
))
#
Q(form_code=form_code) & Q(level__gte=int(level))
)
.
update
(
#
).update(
is_action
=
False
,
#
is_action=False,
action
=
None
,
#
action=None,
remarks
=
None
,
#
remarks=None,
action_date
=
None
,
#
action_date=None,
date_sent
=
None
#
date_sent=None
)
#
)
elif
action
.
lower
()
==
'completed'
:
#
elif action.lower() == 'completed':
the_last_vendor
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
the_last_vendor = models.ChangeRequestFormApprovers.objects.filter(
form_code
=
form_code
,
delegation
=
'Vendor/Implementor'
#
form_code=form_code, delegation='Vendor/Implementor'
)
.
order_by
(
'level'
)
.
last
()
#
).order_by('level').last()
if
(
current_user
==
the_last_vendor
.
user
.
code
and
#
if (current_user == the_last_vendor.user.code and
level
==
the_last_vendor
.
level
):
#
level == the_last_vendor.level):
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
#
models.ChangeRequestFormHeader.objects.filter(
form_code
=
form_code
#
form_code=form_code
)
.
update
(
status
=
'Approved'
)
#
).update(status='Approved')
else
:
#
else:
the_next_vendor
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
the_next_vendor = models.ChangeRequestFormApprovers.objects.filter(
form_code
=
form_code
,
level
=
int
(
next_level
),
#
form_code=form_code, level=int(next_level),
delegation
=
'Vendor/Implementor'
#
delegation='Vendor/Implementor'
)
.
first
()
#
).first()
if
the_next_vendor
:
#
if the_next_vendor:
if
the_next_vendor
.
user
.
code
==
the_last_vendor
.
user
.
code
:
#
if the_next_vendor.user.code == the_last_vendor.user.code:
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
#
models.ChangeRequestFormHeader.objects.filter(
form_code
=
form_code
#
form_code=form_code
)
.
update
(
status
=
'Approved'
)
#
).update(status='Approved')
else
:
#
else:
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
#
models.ChangeRequestFormHeader.objects.filter(
form_code
=
form_code
#
form_code=form_code
)
.
update
(
status
=
'Pending'
)
#
).update(status='Pending')
next_approver_email
(
form_code
,
next_level
)
#
next_approver_email(form_code, next_level)
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
models.ChangeRequestFormApprovers.objects.filter(
Q
(
level
=
int
(
next_level
))
#
Q(level=int(next_level))
)
.
update
(
#
).update(
date_sent
=
datetime
.
now
(),
#
date_sent=datetime.now(),
is_action
=
True
#
is_action=True
)
#
)
# update current approver details
#
# update current approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
models.ChangeRequestFormApprovers.objects.filter(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
#
Q(form_code=form_code) & Q(level=int(level))
)
.
update
(
#
).update(
is_action
=
False
#
is_action=False
)
#
)
# EMAIL CODE FOR REQUESTOR
#
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_COMPLETION_MESSAGE
.
split
(
';'
)[
0
]
#
requestor_notification_msg = REQUESTOR_COMPLETION_MESSAGE.split(';')[0]
send_mail_requestor
(
#
send_mail_requestor(
current_user
,
form_code
,
delegation
,
#
current_user, form_code, delegation,
requestor_notification_msg
,
action
,
#
requestor_notification_msg, action,
remarks
,
level
#
remarks, level
)
#
)
elif
action
.
lower
()
==
'acknowledged'
:
#
elif action.lower() == 'acknowledged':
# EMAIL CODE FOR REQUESTOR
#
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
0
]
#
requestor_notification_msg = REQUESTOR_ACKNOWLEDGE_MESSAGE.split(';')[0]
send_mail_requestor
(
#
send_mail_requestor(
current_user
,
form_code
,
delegation
,
#
current_user, form_code, delegation,
requestor_notification_msg
,
action
,
#
requestor_notification_msg, action,
remarks
,
level
#
remarks, level
)
#
)
elif
action
.
lower
()
==
'accepted'
:
#
elif action.lower() == 'accepted':
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
#
models.ChangeRequestFormHeader.objects.filter(
form_code
=
form_code
#
form_code=form_code
)
.
update
(
status
=
'Completed & Accepted'
)
#
).update(status='Completed & Accepted')
# EMAIL CODE FOR VENDOR
#
# EMAIL CODE FOR VENDOR
requestor_notification_msg
=
VENDOR_ACCEPTANCE_MESSAGE
.
split
(
';'
)[
0
]
#
requestor_notification_msg = VENDOR_ACCEPTANCE_MESSAGE.split(';')[0]
send_mail_vendor
(
#
send_mail_vendor(
current_user
,
form_code
,
delegation
,
#
current_user, form_code, delegation,
requestor_notification_msg
,
action
,
#
requestor_notification_msg, action,
remarks
,
level
#
remarks, level
)
#
)
# update is_action for current level
#
# update is_action for current level
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
models.ChangeRequestFormApprovers.objects.filter(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
#
Q(form_code=form_code) & Q(level=int(level))
)
.
update
(
#
).update(
is_action
=
False
#
is_action=False
)
#
)
elif
action
.
lower
()
==
'cancelled'
:
#
elif action.lower() == 'cancelled':
# changed form status to cancelled
#
# changed form status to cancelled
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
#
models.ChangeRequestFormHeader.objects.filter(
form_code
=
form_code
)
.
update
(
status
=
'Cancelled'
)
#
form_code=form_code).update(status='Cancelled')
# update is_action for current level
#
# update is_action for current level
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
#
models.ChangeRequestFormApprovers.objects.filter(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
#
Q(form_code=form_code) & Q(level=int(level))
)
.
update
(
#
).update(
is_action
=
False
#
is_action=False
)
#
)
reset_autoemail_tables
(
form_code
)
#
reset_autoemail_tables(form_code)
message
=
status_message_response
(
message
=
status_message_response
(
200
,
'success'
,
200
,
'success'
,
...
@@ -1227,6 +1133,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -1227,6 +1133,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
next_approver_email
(
form_code
,
min_level
)
next_approver_email
(
form_code
,
min_level
)
date_now
=
datetime
.
now
()
# update next approver details
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
min_level
))
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
min_level
))
...
@@ -1237,6 +1145,10 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
...
@@ -1237,6 +1145,10 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
# save details for overdue and auto cancellation
# save details for overdue and auto cancellation
overdue_trigger_save
(
form_code
)
overdue_trigger_save
(
form_code
)
# save details for reminder for first approver
reminder_trigger_save
(
form_code
,
date_now
,
date_now
)
serializer
=
self
.
get_serializer
(
instance
)
serializer
=
self
.
get_serializer
(
instance
)
...
@@ -1549,16 +1461,22 @@ class ChangeRequestFormPost(APIView):
...
@@ -1549,16 +1461,22 @@ class ChangeRequestFormPost(APIView):
next_approver_email
(
frm_id
,
min_level
)
next_approver_email
(
frm_id
,
min_level
)
date_now
=
datetime
.
now
()
# update next approver details
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
frm_id
)
&
Q
(
level
=
int
(
min_level
))
Q
(
form_code
=
frm_id
)
&
Q
(
level
=
int
(
min_level
))
)
.
update
(
)
.
update
(
date_sent
=
date
time
.
now
()
,
date_sent
=
date
_now
,
is_action
=
True
is_action
=
True
)
)
# save details for overdue and auto cancellation
# save details for overdue and auto cancellation
overdue_trigger_save
(
frm_id
)
overdue_trigger_save
(
frm_id
)
# save details for reminder for first approver
reminder_trigger_save
(
frm_id
,
date_now
,
date_now
)
message
=
{
message
=
{
'code'
:
201
,
'code'
:
201
,
...
...
app/applicationlayer/utils.py
View file @
bd7e796b
...
@@ -20,7 +20,7 @@ REALTIMESERVER_IP = settings.REALTIMESERVER_IP
...
@@ -20,7 +20,7 @@ REALTIMESERVER_IP = settings.REALTIMESERVER_IP
def
model_to_dict
(
instance
):
def
model_to_dict
(
instance
):
try
:
try
:
mySerializer
=
copy
.
deepcopy
(
DynamicSerializer
)
mySerializer
=
copy
.
deepcopy
(
DynamicSerializer
)
mySerializer
.
Meta
.
model
=
instance
.
__class__
mySerializer
.
Meta
.
model
=
instance
.
__class__
return
mySerializer
(
instance
)
.
data
return
mySerializer
(
instance
)
.
data
...
...
app/businesslayer/changerequest/change_request.py
View file @
bd7e796b
...
@@ -13,14 +13,33 @@ from django.http import Http404
...
@@ -13,14 +13,33 @@ from django.http import Http404
from
django.db.models
import
Q
from
django.db.models
import
Q
from
app.applicationlayer.cms.utils_cr
import
(
from
app.applicationlayer.cms.utils_cr
import
(
number_generator
,
crhistory_save
,
entity_log_bulk
,
number_generator
,
crhistory_log_bulk_delete
crhistory_save
,
entity_log_bulk
,
crhistory_log_bulk_delete
,
send_mail_requestor
,
next_approver_email
,
send_mail_vendor
,
crhistory_create_save
,
reminder_trigger_save
,
overdue_trigger_save
,
reset_autoemail_tables
)
)
from
app.applicationlayer.utils
import
model_to_dict
from
app.applicationlayer.utils
import
model_to_dict
from
app.entities
import
enums
,
models
from
app.entities
import
enums
,
models
from
app.applicationlayer.utils
import
log_save
,
CustomPagination
from
app.applicationlayer.utils
import
log_save
,
CustomPagination
from
app.applicationlayer.cms.template
import
serializers
from
app.applicationlayer.cms.template
import
serializers
from
django.db.models
import
Min
from
django.db.models
import
Min
from
django.conf
import
settings
APPROVER_MESSAGE
=
settings
.
APPROVER_MESSAGE
REQUESTOR_MESSAGE
=
settings
.
REQUESTOR_MESSAGE
REQUESTOR_REJECT_MESSAGE
=
settings
.
REQUESTOR_REJECT_MESSAGE
VENDOR_ACKNOWLEDGE_MESSAGE
=
settings
.
VENDOR_ACKNOWLEDGE_MESSAGE
REQUESTOR_ACKNOWLEDGE_MESSAGE
=
settings
.
REQUESTOR_ACKNOWLEDGE_MESSAGE
REQUESTOR_COMPLETION_MESSAGE
=
settings
.
REQUESTOR_COMPLETION_MESSAGE
VENDOR_ACCEPTANCE_MESSAGE
=
settings
.
VENDOR_ACCEPTANCE_MESSAGE
VENDOR_REJECT_MESSAGE
=
settings
.
VENDOR_REJECT_MESSAGE
def
list_by_user
(
user_id_number
):
def
list_by_user
(
user_id_number
):
...
@@ -443,7 +462,9 @@ def check_vendor_level(position, routing_level, form_code):
...
@@ -443,7 +462,9 @@ def check_vendor_level(position, routing_level, form_code):
form_code
=
form_code
,
form_code
=
form_code
,
level
=
int
(
routing_level
),
level
=
int
(
routing_level
),
delegation
=
'Vendor/Implementor'
delegation
=
'Vendor/Implementor'
)
)
.
first
()
return
query
elif
position
==
'last'
:
elif
position
==
'last'
:
...
@@ -451,6 +472,8 @@ def check_vendor_level(position, routing_level, form_code):
...
@@ -451,6 +472,8 @@ def check_vendor_level(position, routing_level, form_code):
form_code
=
form_code
,
form_code
=
form_code
,
delegation
=
'Vendor/Implementor'
delegation
=
'Vendor/Implementor'
)
.
order_by
(
'level'
)
.
last
()
)
.
order_by
(
'level'
)
.
last
()
return
query
elif
position
==
'prev'
:
elif
position
==
'prev'
:
...
@@ -458,9 +481,265 @@ def check_vendor_level(position, routing_level, form_code):
...
@@ -458,9 +481,265 @@ def check_vendor_level(position, routing_level, form_code):
Q
(
form_code
=
form_code
)
&
Q
(
form_code
=
form_code
)
&
Q
(
action
=
'Completed'
)
&
Q
(
action
=
'Completed'
)
&
Q
(
delegation
=
'Vendor/Implementor'
)
&
Q
(
delegation
=
'Vendor/Implementor'
)
&
Q
(
level__lte
=
int
(
level
))
Q
(
level__lte
=
int
(
routing_level
))
)
return
query
def
update_form_approver
(
form_code
,
level
,
apprv_type
,
date_now
):
if
apprv_type
==
'next'
:
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
)
.
update
(
date_sent
=
date_now
,
is_action
=
True
)
elif
apprv_type
==
'current'
:
# update current approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
)
.
update
(
is_action
=
False
)
def
update_form_header_status
(
form_code
,
status
):
models
.
ChangeRequestFormHeader
.
objects
.
filter
(
form_code
=
form_code
)
.
update
(
status
=
status
)
return
True
def
cr_routing_actions
(
approver_instance
,
current_user
):
form_code
=
approver_instance
[
'form_code'
]
delegation
=
approver_instance
[
'delegation'
]
action
=
approver_instance
[
'action'
]
.
lower
()
level
=
approver_instance
[
'level'
]
next_level
=
int
(
approver_instance
[
'level'
])
+
1
remarks
=
approver_instance
[
'remarks'
]
if
approver_instance
[
'action'
]
.
lower
()
==
'approved'
:
the_next_vendor
=
check_vendor_level
(
'next'
,
next_level
,
form_code
)
if
the_next_vendor
:
the_last_vendor
=
check_vendor_level
(
'last'
,
level
,
form_code
)
# changed form status to Approved
if
the_next_vendor
==
the_last_vendor
:
update_form_header_status
(
form_code
,
'Approved'
)
# NOTIF MSG FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_MESSAGE
.
split
(
';'
)[
0
]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
next_approver_email
(
form_code
,
next_level
)
date_now
=
datetime
.
now
()
# update next approver details
update_form_approver
(
form_code
,
next_level
,
'next'
,
date_now
)
# update current approver details
update_form_approver
(
form_code
,
level
,
'current'
,
date_now
)
#save details for reminder trigger
reminder_trigger_save
(
form_code
,
date_now
,
date_now
)
elif
approver_instance
[
'action'
]
.
lower
()
==
'rejected'
:
# send email to vendor
if
delegation
.
lower
()
==
'requestor'
:
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
# send reject email to vendor
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
notification_msg
,
action
,
remarks
,
level
)
prev_level
=
int
(
level
)
+
1
# reset last vendor details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
prev_level
))
)
.
update
(
is_action
=
True
,
action
=
'Acknowledged'
,
action_date
=
datetime
.
now
(),
date_sent
=
datetime
.
now
()
)
else
:
prev_vendor
=
check_vendor_level
(
'prev'
,
level
,
form_code
)
if
not
prev_vendor
.
count
()
>
0
:
update_form_header_status
(
form_code
,
'Rejected'
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
else
:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
# SEND EMAIL AND NOTIF TO REQUESTOR
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
)
# def cr_routing_actions(approver_instance):
notification_msg
=
VENDOR_REJECT_MESSAGE
.
split
(
';'
)[
0
]
send_mail_vendor
(
current_user
,
form_code
,
'others'
,
notification_msg
,
action
,
remarks
,
level
)
last_action_vendor
=
prev_vendor
.
last
()
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
code
=
last_action_vendor
)
.
update
(
is_action
=
True
,
action
=
'Acknowledged'
,
action_date
=
datetime
.
now
(),
date_sent
=
datetime
.
now
()
)
level
=
last_action_vendor
.
level
+
1
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level__gte
=
int
(
level
))
)
.
update
(
is_action
=
False
,
action
=
None
,
remarks
=
None
,
action_date
=
None
,
date_sent
=
None
)
elif
approver_instance
[
'action'
]
.
lower
()
==
'completed'
:
the_last_vendor
=
check_vendor_level
(
'last'
,
level
,
form_code
)
if
(
current_user
==
the_last_vendor
.
user
.
code
and
level
==
the_last_vendor
.
level
):
update_form_header_status
(
form_code
,
'Approved'
)
else
:
the_next_vendor
=
check_vendor_level
(
'next'
,
next_level
,
form_code
)
if
the_next_vendor
:
if
the_next_vendor
.
user
.
code
==
the_last_vendor
.
user
.
code
:
update_form_header_status
(
form_code
,
'Approved'
)
else
:
update_form_header_status
(
form_code
,
'Pending'
)
next_approver_email
(
form_code
,
next_level
)
date_now
=
datetime
.
now
()
# update next approver details
update_form_approver
(
form_code
,
next_level
,
'next'
,
date_now
)
# update current approver details
update_form_approver
(
form_code
,
level
,
'current'
,
date_now
)
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_COMPLETION_MESSAGE
.
split
(
';'
)[
0
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
elif
action
.
lower
()
==
'acknowledged'
:
# EMAIL CODE FOR REQUESTOR
requestor_notification_msg
=
REQUESTOR_ACKNOWLEDGE_MESSAGE
.
split
(
';'
)[
0
]
send_mail_requestor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
elif
action
.
lower
()
==
'accepted'
:
update_form_header_status
(
form_code
,
'Completed & Accepted'
)
# EMAIL CODE FOR VENDOR
requestor_notification_msg
=
VENDOR_ACCEPTANCE_MESSAGE
.
split
(
';'
)[
0
]
send_mail_vendor
(
current_user
,
form_code
,
delegation
,
requestor_notification_msg
,
action
,
remarks
,
level
)
# update current approver details
update_form_approver
(
form_code
,
level
,
'current'
,
date_now
)
elif
action
.
lower
()
==
'cancelled'
:
# changed form status to cancelled
update_form_header_status
(
form_code
,
'Cancelled'
)
# update is_action for current level
update_form_approver
(
form_code
,
level
,
'current'
,
date_now
)
reset_autoemail_tables
(
form_code
)
return
True
app/helper/email_service/sender.py
View file @
bd7e796b
...
@@ -5,7 +5,6 @@ from app.entities import models
...
@@ -5,7 +5,6 @@ from app.entities import models
from
django.conf
import
settings
from
django.conf
import
settings
# def account_created(args, username, password, receiver) :
def
account_created
(
args
):
def
account_created
(
args
):
name
=
args
[
0
]
name
=
args
[
0
]
username
=
args
[
1
]
username
=
args
[
1
]
...
@@ -51,20 +50,7 @@ def account_created(args):
...
@@ -51,20 +50,7 @@ def account_created(args):
def
cronjob
(
args
):
def
cronjob
(
args
):
# name = args[0]
# username = args[1]
# password = args[2]
# recipient = args[3]
# admin = args[4]
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'RMS-NEWUSER.html'), 'r')
# FC = F.read()
# FC = FC.replace('{name}', name)
# FC = FC.replace('{username}', username)
# FC = FC.replace('{password}', password)
# FC = FC.replace('{url}', settings.FRONT_END_URL + '/cms/profile') #changed
try
:
try
:
send_mail
(
send_mail
(
subject
=
'Resource Management System: Welcome!'
,
subject
=
'Resource Management System: Welcome!'
,
...
@@ -145,24 +131,6 @@ def forgot_password(args):
...
@@ -145,24 +131,6 @@ def forgot_password(args):
)
)
# def password_changed(username, date, receiver) :
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'password-changed.html'), 'r')
# FC = F.read()
# FC = FC.replace('[Username]', username)
# FC = FC.replace('[Datetime]', date)
# FC = FC.replace('[URL]', settings.FRONT_END_URL)
# send_mail(
# subject='OB RMS: Password Changed!',
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=[receiver,],
# html_message=FC
# )
def
admin_changepassword
(
args
):
def
admin_changepassword
(
args
):
name
=
args
[
0
]
name
=
args
[
0
]
username
=
args
[
1
]
username
=
args
[
1
]
...
@@ -188,342 +156,6 @@ def admin_changepassword(args):
...
@@ -188,342 +156,6 @@ def admin_changepassword(args):
)
)
# def account_created(username, password, receiver) :
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'account-created.html'), 'r')
# FC = F.read()
# FC = FC.replace('[Username]', username)
# FC = FC.replace('[Password]', password)
# FC = FC.replace('[URL]', settings.FRONT_END_URL)
# send_mail(
# subject='OB IMS: Welcome!',
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=[receiver,],
# html_message=FC
# )
# def stock_requisition_new(sr_id,
# sr_no,
# requestor,
# requested_on,
# project,
# remarks,
# receiver,
# requested_items=[],
# purchase_items=[],
# required_date=None):
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'stock-requisition.html'), 'r')
# FC = F.read()
# FC = FC.replace('[SR No]', sr_no)
# FC = FC.replace('[Requestor]', requestor)
# FC = FC.replace('[Requested On]', requested_on)
# FC = FC.replace('[Project]', project)
# FC = FC.replace('[Remarks]', remarks)
# # PRINT SR ITEMS
# if requested_items and len(requested_items) > 0:
# appendedList = ''
# for item in requested_items :
# prodNo = str(item.product.product_no)
# prodName = str(item.product.name)
# brand = str(item.product.brand.name)
# qty = str(item.quantity)
# unit = str(item.product.unit_material.name)
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="sr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# # PRINT PR ITEMS
# if purchase_items and len(purchase_items) > 0 :
# FC = FC.replace('[Required Date]', required_date)
# appendedList = ''
# for item in purchase_items :
# prodNo = str(item.product.product_no)
# prodName = str(item.product.name)
# brand = str(item.product.brand.name)
# qty = str(item.quantity)
# unit = str(item.product.unit_material.name)
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="pr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# urlApprove = f"{settings.FRONT_END_URL}/{'transaction/requisition/approve'}/{sr_id}/basic"
# urlReject = f"{settings.FRONT_END_URL}/{'transaction/requisition/reject'}/{sr_id}/basic"
# FC = FC.replace('ApproveToken', urlApprove)
# FC = FC.replace('RejectToken', urlReject)
# send_mail(
# subject='OB IMS: '+ sr_no +' by ' + requestor,
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=[receiver,],
# html_message=FC
# )
# def stock_requisition_approve(sr_no,
# requestor,
# requestor_email,
# requested_on,
# requestor_contact,
# project,
# remarks,
# approved_by,
# approved_date,
# requested_items=[],
# purchase_items=[],
# required_date=None):
# # requested_items
# # LIST OF "RequisitionApproveItem"
# # purchase_items
# # LIST OF "PurchaseRequestApproveItem"
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'stock-requisition-approved.html'), 'r')
# FC = F.read()
# FC = FC.replace('[SR No]', sr_no)
# FC = FC.replace('[Requestor]', requestor)
# FC = FC.replace('[Requested On]', requested_on)
# FC = FC.replace('[Project]', project)
# FC = FC.replace('[Remarks]', remarks)
# FC = FC.replace('[Approved By]', approved_by)
# FC = FC.replace('[Approved On]', approved_date)
# # PRINT SR ITEMS
# if len(requested_items) > 0 :
# appendedList = ''
# for item in requested_items :
# prodNo = item.requisition_product.product.product_no
# prodName = item.requisition_product.product.name
# brand = item.requisition_product.product.brand.name
# qty = str(item.quantity)
# unit = item.requisition_product.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="sr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# # PRINT PR ITEMS
# if len(purchase_items) > 0 :
# FC = FC.replace('[Required Date]', required_date)
# appendedList = ''
# for item in purchase_items :
# prodNo = item.purchase_request_item.product.product_no
# prodName = item.purchase_request_item.product.name
# brand = item.purchase_request_item.product.brand.name
# qty = str(item.quantity)
# unit = item.purchase_request_item.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="pr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# approver_emails = []
# # roles_receives = ['Receive Stock Requisition Authorization Email',
# # 'Allow Purchase Requests Authorisation',
# # 'Receive Stock Request Email',
# # 'Receive Purchase Request Email']
# # qry = models.User.objects.filter(user_roles__role__code__in=roles_receives).values('email').distinct()
# # for item in qry:
# # approver_emails.append(item['email'])
# approver_emails.append(requestor_email)
# if len(approver_emails) > 0:
# send_mail(
# subject='OB IMS Stock Request: '+ sr_no,
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=approver_emails,
# html_message=FC
# )
# def stock_requisition_reject(sr_no,
# requestor,
# requestor_email,
# requested_on,
# project,
# remarks,
# rejected_reason,
# rejected_by,
# rejected_date,
# requested_items=[],
# purchase_items=[],
# required_date=None):
# # requested_items
# # LIST OF "RequisitionRejectItem"
# # purchase_items
# # LIST OF "PurchaseRequestRejectItem"
# F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'stock-requisition-rejected.html'), 'r')
# FC = F.read()
# FC = FC.replace('[SR No]', sr_no)
# FC = FC.replace('[Requestor]', requestor)
# FC = FC.replace('[Requested On]', requested_on)
# FC = FC.replace('[Project]', project)
# FC = FC.replace('[Remarks]', remarks)
# FC = FC.replace('[Rejected By]', rejected_by)
# FC = FC.replace('[Rejected On]', rejected_date)
# FC = FC.replace('[Rejected Reason]', rejected_reason)
# # PRINT SR ITEMS
# if len(requested_items) > 0 :
# appendedList = ''
# for item in requested_items :
# prodNo = item.requisition_product.product.product_no
# prodName = item.requisition_product.product.name
# brand = item.requisition_product.product.brand.name
# qty = str(item.quantity)
# unit = item.requisition_product.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="sr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# # PRINT PR ITEMS
# if len(purchase_items) > 0 :
# FC = FC.replace('[Required Date]', required_date)
# appendedList = ''
# for item in purchase_items :
# prodNo = item.purchase_request_item.product.product_no
# prodName = item.purchase_request_item.product.name
# brand = item.purchase_request_item.product.brand.name
# qty = str(item.quantity)
# unit = item.purchase_request_item.product.unit_material.name
# appendedList += '\t\t\t\t \
# <tr bgcolor="#FFFFFF"> \
# <td>' + prodNo + '</td> \
# <td>' + prodName + '</td> \
# <td>' + brand + '</td> \
# <td>' + qty + '</td> \
# <td>' + unit + '</td> \
# </tr>'
# FC = FC.replace('<tr bgcolor="#FFFFFF" id="pr">\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n <td> </td>\n </tr>', appendedList)
# approver_emails = []
# # roles_receives = ['Receive Stock Requisition Authorization Email', 'Allow Purchase Requests Authorisation', 'Receive Stock Request Email', 'Receive Purchase Request Email']
# # qry = models.User.objects.filter(user_roles__role__code__in=roles_receives).values('email').distinct()
# # for item in qry :
# # approver_emails.append(item['email'])
# approver_emails.append(requestor_email)
# if len(approver_emails) > 0:
# send_mail(
# subject='OB IMS: '+ sr_no +' by ' + requestor,
# message='',
# from_email=settings.EMAIL_DEFAULT_SENDER,
# recipient_list=approver_emails,
# html_message=FC
# )
# # def account_password_reset(username, password, receiver, date_reset) :
# # F = open(os.path.join(EMAIL_TEMPLATES_ROOT, 'reset-password.html'), 'r')
# # FC = F.read()
# # FC = FC.replace('[Username]', username)
# # FC = FC.replace('[Password]', password)
# # FC = FC.replace('[Reset Datetime]', date_reset)
# # send_mail(
# # subject='OB IMS: Password Reset!',
# # message='',
# # from_email=EMAIL_DEFAULT_SENDER,
# # recipient_list=[receiver,],
# # html_message=FC
# # )
# RMS-CRAPPROVED ; RMS-CRACKNOWLEDGE ; RMS-CRCOMPLETED ; RMS-CRACCEPTED ;
# RMS-CRAPPROVED ; RMS-CRACKNOWLEDGE ; RMS-CRCOMPLETED ; RMS-CRACCEPTED ;
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
# RMS-CRREJECTED ; RMS-CRREJECTED-VENDOR
...
...
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