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

fixing on batch upload

parent e059317a
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
...@@ -376,21 +390,21 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -376,21 +390,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)
...@@ -495,6 +509,67 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -495,6 +509,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