Commit f2fff17f authored by Gladys Forte's avatar Gladys Forte

Merge pull request #367 in RMS/api-main-service from gladys-dev2 to RMSv2

* commit '72ba88eb':
  added form attachment serializer
  reminder
parents fe07a632 72ba88eb
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 CancelTriggerAPIView(views.APIView):
def get(self, request):
date_now = datetime.now()
today_mail = models.CancelTrigger.objects.filter(
Q(auto_cancel_date=date_now.strftime('%Y-%m-%d 00:00:00.000'))
)
list_of_emails = []
for data in today_mail:
if data.is_sent == False and data.form_code.status == 'Pending' and data.frm_approver.is_action == True:
cr_link = f'{CR_FRONT_LINK}/{data.form_code}'
requestor_name = data.form_code.requested_by_user.name
auto_cancel_date = data.auto_cancel_date.strftime('%B %d, %Y')
date_submitted_last_approver = data.date_submitted_last_approver.strftime('%B %d, %Y')
approver_pending_action = data.frm_approver.user.name
cr_number = data.form_code.requested_to_template_id
cr_name = data.form_code.requested_to_template_name
company_requestedto = data.form_code.requested_to_company.name
department_requestedto = data.form_code.requested_to_department.name
priority_level = data.form_code.requested_to_priority
form_status = data.form_code.status
url = cr_link
requestor_recipient = data.form_code.requested_by_user.email
admin = 'Test'
args_requestor = [requestor_name, auto_cancel_date,
date_submitted_last_approver, approver_pending_action,
cr_number, cr_name, company_requestedto,
department_requestedto, priority_level, form_status, url,
requestor_recipient, admin]
main_threading(args_requestor, sender.routing_table_cancelled)
cancel = models.ChangeRequestFormHeader.objects.filter(
form_code=data.form_code
).update(status='Cancelled')
list_of_emails.append(data.form_code.form_code)
today_mail.update(is_sent=True)
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 OverdueTriggerAPIView(views.APIView):
def get(self, request):
date_now = datetime.now()
today_mail = models.CancelTrigger.objects.filter(
Q(auto_cancel_date=date_now.strftime('%Y-%m-%d 00:00:00.000'))
)
list_of_emails = []
for data in today_mail:
if data.is_sent == False and data.form_code.status == 'Pending' and data.frm_approver.is_action == True:
cr_link = f'{CR_FRONT_LINK}/{data.form_code}'
requestor_name = data.form_code.requested_by_user.name
auto_cancel_date = data.auto_cancel_date.strftime('%B %d, %Y')
date_submitted_last_approver = data.date_submitted_last_approver.strftime('%B %d, %Y')
approver_pending_action = data.frm_approver.user.name
cr_number = data.form_code.requested_to_template_id
cr_name = data.form_code.requested_to_template_name
company_requestedto = data.form_code.requested_to_company.name
department_requestedto = data.form_code.requested_to_department.name
priority_level = data.form_code.requested_to_priority
form_status = data.form_code.status
url = cr_link
requestor_recipient = data.form_code.requested_by_user.email
admin = 'Test'
args_requestor = [requestor_name, auto_cancel_date,
date_submitted_last_approver, approver_pending_action,
cr_number, cr_name, company_requestedto,
department_requestedto, priority_level, form_status, url,
requestor_recipient, admin]
main_threading(args_requestor, sender.routing_table_cancelled)
cancel = models.ChangeRequestFormHeader.objects.filter(
form_code=data.form_code
).update(status='Cancelled')
list_of_emails.append(data.form_code.form_code)
today_mail.update(is_sent=True)
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 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]
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
)
......@@ -32,8 +32,7 @@ class ChangeRequestFormAttachmentsSerializer(
class ChangeRequestFormAttachmentsFileUploadSerializer(
serializers.ModelSerializer
):
class Meta:
model = models.ChangeRequestFormAttachments
fields = (
......
......@@ -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
......@@ -45,7 +46,9 @@ from app.businesslayer.changerequest.change_request import (
from app.applicationlayer.cms.form.approver.serializers import ChangeRequestFormApproversSerializer
from app.applicationlayer.cms.form.stakeholder.serializers import ChangeRequestFormStakeHoldersSerializer
from app.applicationlayer.cms.form.details.serializers import ChangeRequestFormDetailsSerializer
from app.applicationlayer.cms.form.attachment.serializers import ChangeRequestFormAttachmentsFileUploadSerializer
from app.applicationlayer.cms.form.attachment.serializers import (
ChangeRequestFormAttachmentsFileUploadSerializer,
ChangeRequestFormAttachmentsSerializer)
from app.applicationlayer.cms.form.header.serializers import (
ChangeRequestFormHeaderSerializer,
ChangeRequestFormHeaderSerializerList)
......@@ -733,23 +736,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=datetime.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':
......
......@@ -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,8 @@ 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()),
# path('cancelled/', cancel.CancelTriggerAPIView.as_view()),
]
# urlpatterns += format_suffix_patterns(urlpatterns)
......
......@@ -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,43 @@ 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)
form_instance = models.ChangeRequestFormHeader.objects.get(
form_code=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
counter = 0
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
)
if counter == 0:
models.CancelTrigger.objects.create(
form_code=form_instance,
auto_cancel_date=auto_cancel_date.strftime('%Y-%m-%d 00:00:00.000'),
date_submitted_last_approver=date_submitted_last_approver,
is_sent=False,
frm_approver=approver
)
counter = counter + 1
return True
# Generated by Django 2.2 on 2019-10-14 16:31
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='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',
},
),
migrations.CreateModel(
name='OverdueTrigger',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('overdue_date', models.DateTimeField(blank=True, null=True)),
('is_sent', models.BooleanField(default=False)),
('form_code', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='entities.ChangeRequestFormHeader', to_field='form_code')),
],
options={
'db_table': 'overdue_trigger',
},
),
migrations.CreateModel(
name='CancelTrigger',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('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)),
('form_code', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='entities.ChangeRequestFormHeader', to_field='form_code')),
('frm_approver', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='entities.ChangeRequestFormApprovers', to_field='code')),
],
options={
'db_table': 'cancel_trigger',
},
),
]
......@@ -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.ForeignKey(
ChangeRequestFormHeader,
on_delete=models.PROTECT,
to_field='form_code')
frm_approver = models.ForeignKey(
ChangeRequestFormApprovers,
on_delete=models.PROTECT,
to_field='code')
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)
# 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.ForeignKey(
ChangeRequestFormHeader,
on_delete=models.PROTECT,
to_field='form_code')
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
......@@ -691,7 +691,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()
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment