First commit
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
"""Generate DOCX: Internal memo."""
|
||||
|
||||
from pathlib import Path
|
||||
from docx import Document
|
||||
from docx.shared import Pt, RGBColor
|
||||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||||
|
||||
|
||||
def generate(output_path: Path, firm: dict, body: str, date: str, subject: str):
|
||||
"""Generate an internal memo document."""
|
||||
doc = Document()
|
||||
|
||||
style = doc.styles["Normal"]
|
||||
font = style.font
|
||||
font.name = "Arial"
|
||||
font.size = Pt(11)
|
||||
|
||||
# MEMO header
|
||||
title = doc.add_paragraph()
|
||||
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||
run = title.add_run("INTERNAL MEMORANDUM")
|
||||
run.bold = True
|
||||
run.font.size = Pt(16)
|
||||
run.font.color.rgb = RGBColor(0, 51, 102)
|
||||
|
||||
# Confidential marker
|
||||
conf = doc.add_paragraph()
|
||||
conf.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||
run = conf.add_run("CONFIDENTIAL")
|
||||
run.font.size = Pt(9)
|
||||
run.font.color.rgb = RGBColor(200, 0, 0)
|
||||
|
||||
doc.add_paragraph("_" * 60).runs[0].font.color.rgb = RGBColor(180, 180, 180)
|
||||
|
||||
# Memo fields
|
||||
fields = [
|
||||
("TO:", firm["attorney"]["name"]),
|
||||
("FROM:", firm["attorney"]["name"]),
|
||||
("DATE:", date),
|
||||
("RE:", subject),
|
||||
]
|
||||
|
||||
for label, value in fields:
|
||||
p = doc.add_paragraph()
|
||||
run_label = p.add_run(f"{label}\t")
|
||||
run_label.bold = True
|
||||
run_label.font.size = Pt(11)
|
||||
run_value = p.add_run(value)
|
||||
run_value.font.size = Pt(11)
|
||||
|
||||
doc.add_paragraph("_" * 60).runs[0].font.color.rgb = RGBColor(180, 180, 180)
|
||||
doc.add_paragraph()
|
||||
|
||||
# Body
|
||||
for para_text in body.split("\n\n"):
|
||||
if para_text.strip():
|
||||
doc.add_paragraph(para_text.strip())
|
||||
|
||||
doc.add_paragraph()
|
||||
|
||||
# Sign-off
|
||||
p = doc.add_paragraph()
|
||||
run = p.add_run(firm["attorney"]["name"])
|
||||
run.bold = True
|
||||
doc.add_paragraph("Partner")
|
||||
doc.add_paragraph(firm["name"])
|
||||
|
||||
doc.save(str(output_path))
|
||||
Reference in New Issue
Block a user