implement sumaexcel step-1
This commit is contained in:
57
rog/views.py
57
rog/views.py
@ -91,6 +91,8 @@ from django.urls import get_resolver
|
||||
import os
|
||||
import json
|
||||
|
||||
from sumaexcel import SumasenExcel
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@api_view(['PATCH'])
|
||||
@ -2605,41 +2607,32 @@ def update_checkins(request):
|
||||
|
||||
@api_view(['GET'])
|
||||
def export_excel(request, zekken_number):
|
||||
# エントリー情報の取得
|
||||
entry = Entry.objects.select_related('team','event').get(zekken_number=zekken_number)
|
||||
checkins = GpsCheckin.objects.filter(zekken_number=zekken_number).order_by('path_order')
|
||||
|
||||
# Excelファイルの生成
|
||||
output = BytesIO()
|
||||
workbook = xlsxwriter.Workbook(output)
|
||||
worksheet = workbook.add_worksheet('通過証明書')
|
||||
# 初期化
|
||||
variables = {
|
||||
"zekken_number":sekken_number,
|
||||
"event_code":request["FC岐阜"],
|
||||
"db":"rogdb",
|
||||
"username":"admin",
|
||||
"password":"admin123456",
|
||||
"host":"localhost",
|
||||
"port":"5432"
|
||||
}
|
||||
excel = SumasenExcel(document="test", variables=variables, docbase="./docbase")
|
||||
# ./docbase/certificate.ini の定義をベースに、
|
||||
# ./docbase/certificate_template.xlsxを読み込み
|
||||
# ./docbase/certificate_(zekken_number).xlsxを作成する
|
||||
|
||||
# スタイルの定義
|
||||
header_format = workbook.add_format({
|
||||
'bold': True,
|
||||
'bg_color': '#CCCCCC',
|
||||
'border': 1
|
||||
})
|
||||
# シート初期化
|
||||
ret = excel.make_report(variables=variables)
|
||||
if ret["status"]==True:
|
||||
filepath=ret["filepath"]
|
||||
logging.info(f"Excelファイル作成 : ret.filepath={filepath}")
|
||||
else:
|
||||
message = ret.get("message", "No message provided")
|
||||
logging.error(f"Excelファイル作成失敗 : ret.message={message}")
|
||||
|
||||
# ヘッダー情報の書き込み
|
||||
worksheet.write('A1', 'チーム名', header_format)
|
||||
worksheet.write('B1', entry.team.team_name)
|
||||
worksheet.write('A2', 'ゼッケン番号', header_format)
|
||||
worksheet.write('B2', zekken_number)
|
||||
|
||||
# チェックインデータの書き込み
|
||||
headers = ['順序', 'CP番号', 'チェックイン時刻', '検証', 'ポイント']
|
||||
for col, header in enumerate(headers):
|
||||
worksheet.write(3, col, header, header_format)
|
||||
|
||||
for row, checkin in enumerate(checkins, start=4):
|
||||
worksheet.write(row, 0, checkin.path_order)
|
||||
worksheet.write(row, 1, checkin.cp_number)
|
||||
worksheet.write(row, 2, checkin.create_at.strftime('%Y-%m-%d %H:%M:%S'))
|
||||
worksheet.write(row, 3, '✓' if checkin.validate_location else '')
|
||||
worksheet.write(row, 4, checkin.points)
|
||||
|
||||
workbook.close()
|
||||
|
||||
# レスポンスの生成
|
||||
output.seek(0)
|
||||
@ -2647,7 +2640,7 @@ def export_excel(request, zekken_number):
|
||||
output.read(),
|
||||
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
||||
)
|
||||
response['Content-Disposition'] = f'attachment; filename=通過証明書_{zekken_number}.xlsx'
|
||||
response['Content-Disposition'] = f'attachment; filename=./docbase/certificate_{zekken_number}.xlsx'
|
||||
return response
|
||||
|
||||
# ----- for Supervisor -----
|
||||
|
||||
Reference in New Issue
Block a user