Commit d3b54812 authored by John Red Medrano's avatar John Red Medrano

Merge pull request #518 in RMS/api-main-service from red-develop to RMSv2

* commit '5201d429':
  fixing on batch upload
parents e7f6d39a 5201d429
import configparser
import shutil
import os
from django.shortcuts import render from django.shortcuts import render
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.views import APIView from rest_framework.views import APIView
...@@ -64,6 +67,17 @@ from django_filters.rest_framework import DjangoFilterBackend ...@@ -64,6 +67,17 @@ from django_filters.rest_framework import DjangoFilterBackend
import json import json
from app.applicationlayer.utils import main_threading from app.applicationlayer.utils import main_threading
from django.core.files.base import ContentFile
from django.conf import settings
from io import BytesIO
from django.http import HttpResponse
from xhtml2pdf import pisa
config = configparser.ConfigParser()
config_file = os.path.join('./', 'env.ini')
config.read(config_file)
APPROVER_MESSAGE = settings.APPROVER_MESSAGE APPROVER_MESSAGE = settings.APPROVER_MESSAGE
REQUESTOR_MESSAGE = settings.REQUESTOR_MESSAGE REQUESTOR_MESSAGE = settings.REQUESTOR_MESSAGE
REQUESTOR_REJECT_MESSAGE = settings.REQUESTOR_REJECT_MESSAGE REQUESTOR_REJECT_MESSAGE = settings.REQUESTOR_REJECT_MESSAGE
...@@ -396,21 +410,21 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -396,21 +410,21 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
# queryset = self.get_serializer_class().setup_eager_loading(self.queryset) # queryset = self.get_serializer_class().setup_eager_loading(self.queryset)
models.Notification.objects.filter( # models.Notification.objects.filter(
account_no=id_number, # account_no=id_number,
form_code=form_code, # form_code=form_code,
is_read=False).update(is_read=True) # is_read=False).update(is_read=True)
ROOM = id_number # ROOM = id_number
SENDER = id_number # SENDER = id_number
notif = send_broadcast_message( # notif = send_broadcast_message(
ROOM, # ROOM,
SENDER, # SENDER,
'UPDATE NOTIFICATIONS' # 'UPDATE NOTIFICATIONS'
) # )
main_threading(1, notif) # main_threading(1, notif)
return Response(serializer.data) return Response(serializer.data)
...@@ -515,6 +529,67 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -515,6 +529,67 @@ 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)
@action(
methods=['GET'], detail=True,
url_path='form-download', url_name='form-download'
)
def FormDownload(self, request, form_code=None):
args = ['CHANGE_REQUEST_TEMPLATE.html']
my_folder = os.path.join(settings.MEDIA_ROOT, f'cr/{request.user.code}')
attch = models.ChangeRequestFormAttachments.objects.filter(
form_code=str(form_code)
).values('file_upload__url')
attch_list = [data['file_upload__url'].split('/')[1] for data in attch]
# print(attch.query)
# print(attch)
# print(attch_list)
if os.path.isdir(my_folder):
shutil.rmtree(my_folder)
user_folder = os.mkdir(my_folder)
for data in args:
F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, data), 'r')
result = BytesIO()
pdf = pisa.pisaDocument(F, result)
updated_file = ContentFile(result.getvalue())
updated_file.name = f"{data}.pdf"
completeName = os.path.join(
os.path.join(settings.MEDIA_ROOT, f'cr/{request.user.code}'),
updated_file.name
)
file1 = open(completeName, "w")
file1.close()
# for file_name in attch_list:
# full_file_name = os.path.join(my_folder, file_name)
# if os.path.isfile(full_file_name):
# shutil.copy(full_file_name, dest)
print(attch)
for file_name in attch:
a = os.path.join(settings.MEDIA_ROOT, file_name['file_upload__url'])
# full_file_name = os.path.join(my_folder, file_name['file_upload__url'])
# print(full_file_name)
if os.path.isfile(a):
print('ddd')
shutil.copy(a, my_folder)
else:
print('xxx')
test = shutil.make_archive(my_folder + 'archive', 'zip', my_folder, ".")
response = HttpResponse(open(test, 'rb'), content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename=change request.zip'
return response
@transaction.atomic() @transaction.atomic()
@action( @action(
......
...@@ -38,6 +38,15 @@ config = configparser.ConfigParser() ...@@ -38,6 +38,15 @@ config = configparser.ConfigParser()
config_file = os.path.join('./', 'env.ini') config_file = os.path.join('./', 'env.ini')
config.read(config_file) config.read(config_file)
from django.conf import settings from django.conf import settings
from io import BytesIO
from django.http import HttpResponse
from django.template.loader import get_template
from xhtml2pdf import pisa
from django.core.files.storage import FileSystemStorage
import sys
import os
import zipfile
import shutil
class BatchUploadViewSet(viewsets.ModelViewSet): class BatchUploadViewSet(viewsets.ModelViewSet):
queryset = ExtractTransformLoad.objects.all() queryset = ExtractTransformLoad.objects.all()
...@@ -103,13 +112,41 @@ class BatchUploadViewSet(viewsets.ModelViewSet): ...@@ -103,13 +112,41 @@ class BatchUploadViewSet(viewsets.ModelViewSet):
url_path='pdf-instruction', name='how to upload bulk users' url_path='pdf-instruction', name='how to upload bulk users'
) )
def testpdf(self, request, code=None): def testpdf(self, request, code=None):
return sender.to_pdf() F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'RMS-NEWUSER.html'), 'r')
result = BytesIO()
pdf = pisa.pisaDocument(F, result)
updated_file = ContentFile(result.getvalue())
updated_file.name = "cr_download.pdf"
my_folder = os.path.join(settings.MEDIA_ROOT, f'cr/{request.user.code}')
if os.path.isdir(my_folder):
shutil.rmtree(my_folder)
user_folder = os.mkdir(my_folder)
completeName = os.path.join(os.path.join(settings.MEDIA_ROOT, f'cr/{request.user.code}'), updated_file.name)
file1 = open(completeName, "w+")
# response = HttpResponse(open(my_folder, 'rb'), content_type='application/zip')
# response['Content-Disposition'] = 'attachment; filename=any_name_you_like.zip'
# return response
message = status_message_response(
200,
'success',
'test',
"sss"
)
return Response(message)
# return sender.to_pdf()
@action( @action(
detail=False, methods=['get'], detail=False, methods=['get'],
url_path='user-instruction', name='how to upload bulk users' url_path='user-instruction', name='how to upload bulk users'
) )
def UserInstruction(self, request, code=None): def UserInstruction(self, request, code=None):
sender.to_pdf()
self.serializer_class = BatchUploadSerializer self.serializer_class = BatchUploadSerializer
queryset = MasterAttachment.objects.filter( queryset = MasterAttachment.objects.filter(
url__contains=config['SETTINGS']['BATCH_UPLOAD_FORMAT_FILENAME'] url__contains=config['SETTINGS']['BATCH_UPLOAD_FORMAT_FILENAME']
...@@ -261,8 +298,8 @@ class BatchUploadViewSet(viewsets.ModelViewSet): ...@@ -261,8 +298,8 @@ class BatchUploadViewSet(viewsets.ModelViewSet):
# user type authorization and user type per user # user type authorization and user type per user
else: else:
user_department = Department.objects.get( user_department = Department.objects.filter(
name__icontains=keys['department'] name__icontains=keys['Department_Code']
) )
default_app = Application.objects.filter( default_app = Application.objects.filter(
......
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1_0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Change Request Template</title>
<link rel="stylesheet" href="./styles.css">
</head>
<body>
<h1>Change Request Template</h1>
<h2>Requested To:</h2>
<div class="requested-to">
<div class="input">
<label>Company</label>
<input type="text" value="{company_name}">
</div>
<div class="input">
<label>Department</label>
<input type="text" value="{department_name}">
</div>
<div class="input">
<label>Template Name</label>
<input type="text" value="{template}">
</div>
<div class="input">
<label>Point of Contact</label>
<input type="text" value="{request_to_name_name}">
</div>
<div class="input">
<label>CR Number prefix</label>
<input type="text" value="{id}">
</div>
<div class="input">
<label>Priority</label>
<input type="text" value="{priority}">
</div>
<div class="input">
<label>Objective</label>
<input type="text" value="{objective}">
</div>
<div class="input">
<label>Lead Time Required (Number of Days)</label>
<input type="text" value="{target_date}">
</div>
<div class="input">
<label>Description</label>
<input type="text" value="{description}">
</div>
</div>
<h2>Created By:</h2>
<div class="input">
<label>Name</label>
<input type="text" value="{name}">
</div>
<div class="input">
<label>Department</label>
<input type="text" value="{department_name}">
</div>
<div class="input">
<label>Contact Number</label>
<input type="text" value="{contact_no}">
</div>
<div class="table">
<h3>Routing Table</h3>
<table>
<thead>
<th>Level</th>
<th>Company</th>
<th>Department</th>
<th>Name</th>
<th>Email</th>
<th>Contact</th>
<th>Delegation</th>
<th>Action</th>
</thead>
<tbody>
<tr>
<td>{approver_level}</td>
<td>{approver_company_name}</td>
<td>{approver_department_name}</td>
<td>{approver_name}</td>
<td>{approver_email}</td>
<td>{approver_contact_no}</td>
<td>{approver_delegation_name}</td>
<td>{approver_action}</td>
</tr>
</tbody>
</table>
<h3>Stakeholders</h3>
<table>
<thead>
<th>Company</th>
<th>Department</th>
<th>Name</th>
<th>Email</th>
<th>Contact</th>
<th>Delegation</th>
<th>Action</th>
</thead>
<tbody>
<tr>
<td>{stakeholder_company_name}</td>
<td>{stakeholder_department_name}</td>
<td>{stakeholder_name}</td>
<td>{stakeholder_email}</td>
<td>{stakeholder_contact_no}</td>
<td>{stakeholder_delegation_name}</td>
<td>{stakeholder_action}</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
\ No newline at end of file
* {
box-sizing: border-box;
padding: 0;
margin: 0;
}
body {
font-family: Arial, Helvetica, sans-serif;
margin: 30px 200px 30px 200px;
font-size: 20px;
color: #8B8B8B
}
h1 {
padding-bottom: 80px;
font-size: 24px;
font-weight: 400;
}
h2 {
font-size: 22px;
font-weight: 400;
margin-bottom: 20px;
}
h3 {
font-size: 21px;
font-weight: 400;
margin-bottom: 20px;
margin-top: 20px;
}
.requested-to {
margin-top: 20px;
}
.input {
margin-bottom: 50px;
}
label {
font-size: 19px;
font-weight: 700;
color: #737373;
}
input {
display: block;
width: 500px;
color: #8B8B8B;
font-size: 19px;
border: none;
padding-top: 20px;
margin-bottom: 10px;
border-bottom: 2px #919191 solid;
}
table, th, td {
border-bottom: 1px solid #8B8B8B;
border-collapse: collapse;
}
th {
text-align: left;
}
tr {
border-bottom: 1px solid black;
}
td {
padding: 8px;
}
.table {
margin-top: 100px;
font-size: 16px;
padding: 50px;
background-color: #F2F2F2;
border-radius: 25px;
}
\ No newline at end of file
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