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
b677618f
Commit
b677618f
authored
Oct 13, 2019
by
Gladys Forte
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
reminder
parent
0cbe37e3
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
439 additions
and
319 deletions
+439
-319
app/applicationlayer/cms/auto_email/overdue.py
app/applicationlayer/cms/auto_email/overdue.py
+0
-0
app/applicationlayer/cms/auto_email/reminder.py
app/applicationlayer/cms/auto_email/reminder.py
+75
-40
app/applicationlayer/cms/form/header/views.py
app/applicationlayer/cms/form/header/views.py
+10
-4
app/applicationlayer/cms/urls_cms.py
app/applicationlayer/cms/urls_cms.py
+6
-0
app/applicationlayer/cms/utils_cr.py
app/applicationlayer/cms/utils_cr.py
+32
-1
app/entities/migrations/0018_canceltrigger_overduetrigger_remindertrigger.py
...ions/0018_canceltrigger_overduetrigger_remindertrigger.py
+56
-0
app/entities/models.py
app/entities/models.py
+56
-40
app/helper/email_service/sender.py
app/helper/email_service/sender.py
+1
-1
requirements/RMSv2.postman_collection.json
requirements/RMSv2.postman_collection.json
+203
-233
No files found.
app/applicationlayer/cms/auto_email/overdue.py
0 → 100644
View file @
b677618f
app/applicationlayer/cms/auto_email/reminder.py
View file @
b677618f
# from app.entities import models
# from app.applicationlayer import paginators
# from datetime import datetime
# from rest_framework.response import Response
# from rest_framework import status, views
# from cms.applicationlayer.utilities import email
# from mongoengine.queryset.visitor import Q
# import requests
# from django.conf import settings
# from datetime import timedelta
# EMAIL = settings.EMAIL
# class ReminderAPIView(views.APIView):
# def get(self, request):
# print(request.META['HTTP_ACCOUNT_NO'])
# date_format = datetime.now()
# next_day = date_format + timedelta(days=1)
# today_mail = models.EmailNotification.objects.filter(
# Q(date_from__lte=date_format.strftime('%Y-%m-%d')) &
# Q(date_to__gte=date_format.strftime('%Y-%m-%d')) &
# Q(date_to_send=date_format.strftime('%Y-%m-%d 00:00:00.000'))
# )[0:25]
# print(len(today_mail))
# list_of_emails = []
# for data in today_mail:
# approver = requests.post(EMAIL, data=data['approver'])
# requestor = requests.post(EMAIL, data=data['requestor'])
# list_of_emails.append(data['approver'])
# list_of_emails.append(data['requestor'])
# today_mail.update(date_to_send=next_day)
# return Response(
# {"list of emails": list_of_emails},
# status=status.HTTP_200_OK
# )
from
app.entities
import
models
from
app.applicationlayer
import
paginators
from
datetime
import
datetime
from
rest_framework.response
import
Response
from
rest_framework
import
status
,
views
from
django.db.models
import
Q
import
requests
from
django.conf
import
settings
from
datetime
import
timedelta
from
app.helper.email_service
import
sender
from
app.applicationlayer.utils
import
main_threading
CR_FRONT_LINK
=
settings
.
CR_FRONT_LINK
class
ReminderTriggerAPIView
(
views
.
APIView
):
def
get
(
self
,
request
):
date_now
=
datetime
.
now
()
next_day
=
date_now
+
timedelta
(
days
=
1
)
today_mail
=
models
.
ReminderTrigger
.
objects
.
filter
(
Q
(
date_from__gte
=
date_now
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
))
&
Q
(
date_to__lte
=
date_now
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
))
&
Q
(
date_to_send
=
date_now
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
))
)
# print(today_mail)
list_of_emails
=
[]
for
data
in
today_mail
:
if
data
.
frm_approver
.
is_action
==
True
:
# common details
cr_link
=
f
'{CR_FRONT_LINK}/{data.frm_approver.form_code}'
auto_cancel_date
=
data
.
auto_cancel_date
.
strftime
(
'
%
B
%
d,
%
Y'
)
date_submitted_last_approver
=
data
.
date_submitted_last_approver
.
strftime
(
'
%
B
%
d,
%
Y'
)
cr_number
=
data
.
frm_approver
.
form_code
.
requested_to_template_id
cr_name
=
data
.
frm_approver
.
form_code
.
requested_to_template_name
company_requestedto
=
data
.
frm_approver
.
form_code
.
requested_to_company
.
name
department_requestedto
=
data
.
frm_approver
.
form_code
.
requested_to_department
.
name
priority_level
=
data
.
frm_approver
.
form_code
.
requested_to_priority
form_status
=
data
.
frm_approver
.
form_code
.
status
url
=
cr_link
admin
=
'Test'
# approver details
name
=
data
.
frm_approver
.
user
.
name
recipient
=
data
.
frm_approver
.
user
.
email
args_approver
=
[
name
,
auto_cancel_date
,
date_submitted_last_approver
,
cr_number
,
cr_name
,
company_requestedto
,
department_requestedto
,
priority_level
,
form_status
,
url
,
recipient
,
admin
]
result
=
main_threading
(
args_approver
,
sender
.
routing_table_reminder_approver
)
list_of_emails
.
append
(
data
.
frm_approver
.
code
)
# requestor details
requestor_name
=
data
.
frm_approver
.
form_code
.
requested_by_user
.
name
requestor_recipient
=
data
.
frm_approver
.
form_code
.
requested_by_user
.
email
args_requestor
=
[
requestor_name
,
auto_cancel_date
,
date_submitted_last_approver
,
name
,
cr_number
,
cr_name
,
company_requestedto
,
department_requestedto
,
priority_level
,
form_status
,
url
,
requestor_recipient
,
admin
]
main_threading
(
args_requestor
,
sender
.
routing_table_reminder_requestor
)
today_mail
.
update
(
date_to_send
=
next_day
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
))
return
Response
(
{
"list of emails"
:
list_of_emails
},
status
=
status
.
HTTP_200_OK
)
app/applicationlayer/cms/form/header/views.py
View file @
b677618f
...
...
@@ -27,7 +27,8 @@ from app.applicationlayer.cms.utils_cr import (number_generator,
get_max_batchno
,
generate_template_id
,
crhistory_create_save
,
entity_log_bulk
)
entity_log_bulk
,
reminder_trigger_save
)
from
app.entities
import
enums
from
app.applicationlayer.utils
import
model_to_dict
...
...
@@ -733,23 +734,28 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
requestor_notification_msg
,
action
,
remarks
,
level
)
next_approver_email
(
form_code
,
next_level
)
date_now
=
datetime
.
now
()
# update next approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
next_level
))
)
.
update
(
date_sent
=
date
time
.
now
()
,
date_sent
=
date
_now
,
is_action
=
True
)
# update current approver details
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
Q
(
form_code
=
form_code
)
&
Q
(
level
=
int
(
level
))
)
.
update
(
is_action
=
False
)
reminder_trigger_save
(
form_code
,
date_now
,
approver_instance
.
date_sent
)
elif
action
.
lower
()
==
'rejected'
:
...
...
app/applicationlayer/cms/urls_cms.py
View file @
b677618f
...
...
@@ -38,6 +38,11 @@ from app.applicationlayer.cms.form.details import views as detailsform
from
app.applicationlayer.cms.form.attachment
import
views
as
attachmentform
# FORM
# AUTO_EMAIL
from
app.applicationlayer.cms.auto_email
import
reminder
,
overdue
,
cancel
# AUTO_EMAIL
from
app.applicationlayer.cms.form.download
import
views
as
dl
router
=
routers
.
DefaultRouter
()
...
...
@@ -80,6 +85,7 @@ urlpatterns = [
path
(
'form-user-list/'
,
UserListForm
.
as_view
(),
name
=
"User List"
),
path
(
'template-user-list/'
,
UserListTemplate
.
as_view
(),
name
=
"User List"
),
# filter endpoints under Allowed Companies table
path
(
'reminder/'
,
reminder
.
ReminderTriggerAPIView
.
as_view
()),
]
# urlpatterns += format_suffix_patterns(urlpatterns)
...
...
app/applicationlayer/cms/utils_cr.py
View file @
b677618f
...
...
@@ -67,6 +67,11 @@ def get_allowed_company(id_number):
return
requests
.
get
(
f
'{ALLOWED_COMPANY}?id_number={id_number}'
)
def
get_approver_details
(
form_code
):
active_approver_instance
=
models
.
ChangeRequestFormApprovers
.
objects
.
filter
(
form_code
=
form_code
,
is_action
=
True
)
return
active_approver_instance
class
QuerySetHelper
:
@
staticmethod
...
...
@@ -520,4 +525,30 @@ def crhistory_create_save(batch_no, main_action,
class
BadRequestException
(
Exception
):
pass
\ No newline at end of file
pass
def
reminder_trigger_save
(
form_code
,
date_now
,
date_submitted_last_approver
):
approver_instance
=
get_approver_details
(
form_code
)
date_from
=
date_now
+
timedelta
(
days
=
7
)
date_to
=
date_now
+
timedelta
(
days
=
29
)
auto_cancel_date
=
date_now
+
timedelta
(
days
=
30
)
# create log for auto_email
for
approver
in
approver_instance
:
models
.
ReminderTrigger
.
objects
.
create
(
frm_approver
=
approver
,
date_from
=
date_from
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
date_to
=
date_to
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
date_to_send
=
date_from
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
auto_cancel_date
=
auto_cancel_date
.
strftime
(
'
%
Y-
%
m-
%
d 00:00:00.000'
),
date_submitted_last_approver
=
date_submitted_last_approver
,
is_sent
=
False
)
return
True
app/entities/migrations/0018_canceltrigger_overduetrigger_remindertrigger.py
0 → 100644
View file @
b677618f
# Generated by Django 2.2 on 2019-10-13 20:18
from
django.db
import
migrations
,
models
import
django.db.models.deletion
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'entities'
,
'0017_auto_20191009_1640'
),
]
operations
=
[
migrations
.
CreateModel
(
name
=
'CancelTrigger'
,
fields
=
[
(
'id'
,
models
.
AutoField
(
auto_created
=
True
,
primary_key
=
True
,
serialize
=
False
,
verbose_name
=
'ID'
)),
(
'form_code'
,
models
.
CharField
(
blank
=
True
,
max_length
=
255
,
null
=
True
)),
(
'auto_cancel_date'
,
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)),
(
'is_sent'
,
models
.
BooleanField
(
default
=
False
)),
(
'date_submitted_last_approver'
,
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)),
(
'approver_pending_action'
,
models
.
CharField
(
blank
=
True
,
max_length
=
255
,
null
=
True
)),
],
options
=
{
'db_table'
:
'cancel_trigger'
,
},
),
migrations
.
CreateModel
(
name
=
'OverdueTrigger'
,
fields
=
[
(
'id'
,
models
.
AutoField
(
auto_created
=
True
,
primary_key
=
True
,
serialize
=
False
,
verbose_name
=
'ID'
)),
(
'form_code'
,
models
.
CharField
(
blank
=
True
,
max_length
=
255
,
null
=
True
)),
(
'overdue_date'
,
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)),
(
'is_sent'
,
models
.
BooleanField
(
default
=
False
)),
],
options
=
{
'db_table'
:
'overdue_trigger'
,
},
),
migrations
.
CreateModel
(
name
=
'ReminderTrigger'
,
fields
=
[
(
'id'
,
models
.
AutoField
(
auto_created
=
True
,
primary_key
=
True
,
serialize
=
False
,
verbose_name
=
'ID'
)),
(
'auto_cancel_date'
,
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)),
(
'date_submitted_last_approver'
,
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)),
(
'date_from'
,
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)),
(
'date_to'
,
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)),
(
'date_to_send'
,
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)),
(
'is_sent'
,
models
.
BooleanField
(
default
=
False
)),
(
'frm_approver'
,
models
.
ForeignKey
(
on_delete
=
django
.
db
.
models
.
deletion
.
PROTECT
,
to
=
'entities.ChangeRequestFormApprovers'
,
to_field
=
'code'
)),
],
options
=
{
'db_table'
:
'reminder_trigger'
,
},
),
]
app/entities/models.py
View file @
b677618f
...
...
@@ -1006,49 +1006,65 @@ class AllowedCompany(models.Model):
db_table
=
'allowed_company'
# class EmailNotification(models.Model):
# cr_number = models.CharField(
# null=True,
# blank=True)
# approver = models.CharField(
# null=True,
# blank=True)
# requestor = models.CharField(
# null=True,
# blank=True)
# date_from = models.DateTimeField(
# null=True,
# blank=True)
# date_to = models.DateTimeField(
# null=True,
# blank=True)
# date_to_send = models.DateTimeField(
# null=True,
# blank=True)
class
ReminderTrigger
(
models
.
Model
):
frm_approver
=
models
.
ForeignKey
(
ChangeRequestFormApprovers
,
on_delete
=
models
.
PROTECT
,
to_field
=
'code'
)
auto_cancel_date
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
date_submitted_last_approver
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
date_from
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
date_to
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
date_to_send
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
is_sent
=
models
.
BooleanField
(
default
=
False
)
#
class Meta:
# db_table = 'email_notification
'
class
Meta
:
db_table
=
'reminder_trigger
'
# class CancelDateCR(Document):
# meta = {'collection': 'cancel_date_change_request'}
class
CancelTrigger
(
models
.
Model
):
form_code
=
models
.
CharField
(
null
=
True
,
blank
=
True
,
max_length
=
255
)
auto_cancel_date
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
is_sent
=
models
.
BooleanField
(
default
=
False
)
date_submitted_last_approver
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
approver_pending_action
=
models
.
CharField
(
null
=
True
,
blank
=
True
,
max_length
=
255
)
# cr_number = fields.StringField(required=True)
# trigger_date = fields.DateTimeField(required=True)
# deleted_at = fields.DateTimeField(required=False, null=True)
# is_sent = fields.BooleanField(default=False)
# date_submitted_last_approver = fields.StringField(required=False)
# approver_pending_action = fields.StringField(required=False)
# email_content = fields.DictField(required=True)
# class Meta:
# db_table = 'email_notification'
class
Meta
:
db_table
=
'cancel_trigger'
# class TargetDateOverdue(Document):
# meta = {'collection': 'target_date_overdue'}
# cr_number = fields.StringField(required=True)
# trigger_date = fields.DateTimeField(required=True)
# is_sent = fields.BooleanField(default=False)
# email_content = fields.DictField(required=True)
\ No newline at end of file
class
OverdueTrigger
(
models
.
Model
):
form_code
=
models
.
CharField
(
null
=
True
,
blank
=
True
,
max_length
=
255
)
overdue_date
=
models
.
DateTimeField
(
null
=
True
,
blank
=
True
)
is_sent
=
models
.
BooleanField
(
default
=
False
)
class
Meta
:
db_table
=
'overdue_trigger'
\ No newline at end of file
app/helper/email_service/sender.py
View file @
b677618f
...
...
@@ -647,7 +647,7 @@ def routing_table_reminder_approver(args):
recipient
=
args
[
10
]
admin
=
args
[
11
]
F
=
open
(
os
.
path
.
join
(
settings
.
EMAIL_TEMPLATES_ROOT
,
'RMS-REMINDER-APPROVER.html'
),
'r'
)
FC
=
F
.
read
()
...
...
requirements/RMSv2.postman_collection.json
View file @
b677618f
This diff is collapsed.
Click to expand it.
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