Source code for fin_aid.create_paper

# TODO check importancy of this feature. If essential, make create_paper method of AidRequest class
# all further imports are needed only to make application paper!
from django.core.files import File
from django.contrib.auth.models import User
from django.utils import timezone
from docxtpl import DocxTemplate  # create word document from template
from petrovich.enums import Case, Gender  # склоняем фамилию (в заявлении нужен родительский падеж
from petrovich.main import Petrovich
import datetime
import os
import logging

from core.settings import MEDIA_ROOT, STATIC_ROOT
from .models import user_hash
from .models import AidRequest, AidDocument

logger = logging.getLogger(__name__)

# russian, genitive
MONTH_RU = {
    1: "января",
    2: "февраля",
    3: "марта",
    4: "апреля",
    5: "мая",
    6: "июня",
    7: "июля",
    8: "августа",
    9: "сентября",
    10: "октября",
    11: "ноября",
    12: "декабря",
}


[docs]def get_sex(user: User): if user.userprofile.student_info: return user.userprofile.student_info.get_sex_display() if user.userprofile.middlename: if user.userprofile.middlename[-1] == "ч": return 'male' elif user.first_name[-1] in ["a", 'я']: return 'female' else: return 'male'
[docs]def create_paper(aid_request: AidRequest): try: today = datetime.date.today() date = "{} {} {} г.".format(today.day, MONTH_RU[today.month], today.year) user = aid_request.applicant userprofile = user.userprofile student_info = userprofile.student_info sex = get_sex(user) if sex == 'female': student = "студентки" gender = Gender.FEMALE else: student = "студента" gender = Gender.MALE p = Petrovich() fst = p.firstname(student_info.first_name, Case.GENITIVE, gender) lst = p.firstname(student_info.last_name, Case.GENITIVE, gender) if userprofile.middlename: mdl = p.firstname(userprofile.middlename, Case.GENITIVE, gender) else: mdl = "" name = "{} {} {}".format(lst, fst, mdl) context = { "student": student, "group": str(student_info.group), "date": date, "name": name, "reason": aid_request.category.reason, } tpl = DocxTemplate(STATIC_ROOT + "/fin_aid/Obrazets_Zayavlenia_Na_Matpomosch.docx") tpl.render(context) path = MEDIA_ROOT + "/aid_docs/user_{}/".format(user_hash(user)) filename = "application-{}-{}-{}.docx".format(today.year, today.month, today.day) os.makedirs(path, exist_ok=True) tpl.save(path + filename) application = AidDocument(request=aid_request, is_application_paper=True) application.file.save(filename, File(open(path+filename, "rb")), save=True) return filename except Exception as e: logger.exception(e)