|
@@ -4,72 +4,114 @@ import config
|
|
|
|
|
|
|
|
def generate_uplatnica(order_id: int, payer_name: str, payer_address: str, amount: float) -> str:
|
|
def generate_uplatnica(order_id: int, payer_name: str, payer_address: str, amount: float) -> str:
|
|
|
"""
|
|
"""
|
|
|
- Generate a simple PDF 'Nalog za uplatu' (Uplatnica) for Montenegro.
|
|
|
|
|
- Returns the absolute path to the generated PDF.
|
|
|
|
|
|
|
+ Generate a PDF 'Nalog za uplatu' (Uplatnica) for Montenegro.
|
|
|
|
|
+ Dimensions: 210x99 mm.
|
|
|
"""
|
|
"""
|
|
|
- pdf = FPDF(orientation='L', unit='mm', format=(100, 210))
|
|
|
|
|
|
|
+ pdf = FPDF(orientation='L', unit='mm', format=(99, 210))
|
|
|
|
|
+ pdf.set_margins(10, 8, 10)
|
|
|
pdf.add_page()
|
|
pdf.add_page()
|
|
|
|
|
|
|
|
- # We will just use the default Helvetica or Arial
|
|
|
|
|
|
|
+ # Fonts
|
|
|
pdf.set_font("helvetica", 'B', 12)
|
|
pdf.set_font("helvetica", 'B', 12)
|
|
|
|
|
|
|
|
- # Draw simple border
|
|
|
|
|
- pdf.rect(5, 5, 200, 90)
|
|
|
|
|
|
|
+ # Outer border (optional but helps when printing on A4)
|
|
|
|
|
+ pdf.rect(5, 5, 200, 89)
|
|
|
|
|
|
|
|
# Title
|
|
# Title
|
|
|
- pdf.set_y(10)
|
|
|
|
|
- pdf.set_font("helvetica", 'B', 14)
|
|
|
|
|
- pdf.cell(0, 10, "NALOG ZA UPLATU", align="C")
|
|
|
|
|
|
|
+ pdf.set_font("helvetica", 'B', 11)
|
|
|
|
|
+ pdf.cell(0, 5, "NALOG ZA UPLATU", align="C", new_x="LMARGIN", new_y="NEXT")
|
|
|
|
|
+ pdf.ln(5)
|
|
|
|
|
+
|
|
|
|
|
+ # Left Block (UPLATILAC, SVRHA PLACANJA, PRIMALAC)
|
|
|
|
|
+ pdf.set_font("helvetica", 'B', 7)
|
|
|
|
|
+ pdf.set_xy(10, 20)
|
|
|
|
|
+ pdf.cell(85, 4, "uplatilac")
|
|
|
|
|
|
|
|
pdf.set_font("helvetica", '', 10)
|
|
pdf.set_font("helvetica", '', 10)
|
|
|
|
|
+ pdf.set_xy(10, 24)
|
|
|
|
|
+ pdf.rect(10, 24, 85, 14)
|
|
|
|
|
+ pdf.multi_cell(85, 5, f"{payer_name}\n{payer_address}")
|
|
|
|
|
+
|
|
|
|
|
+ pdf.set_font("helvetica", 'B', 7)
|
|
|
|
|
+ pdf.set_xy(10, 40)
|
|
|
|
|
+ pdf.cell(85, 4, "svrha placanja")
|
|
|
|
|
|
|
|
- # Payer Info (Uplatilac)
|
|
|
|
|
- pdf.set_xy(10, 25)
|
|
|
|
|
- pdf.cell(40, 5, "UPLATILAC:")
|
|
|
|
|
- pdf.set_xy(10, 30)
|
|
|
|
|
- pdf.set_font("helvetica", 'B', 10)
|
|
|
|
|
- pdf.multi_cell(80, 5, f"{payer_name}\n{payer_address}")
|
|
|
|
|
pdf.set_font("helvetica", '', 10)
|
|
pdf.set_font("helvetica", '', 10)
|
|
|
|
|
+ pdf.set_xy(10, 44)
|
|
|
|
|
+ pdf.rect(10, 44, 85, 14)
|
|
|
|
|
+ pdf.multi_cell(85, 5, f"Usluge 3D stampe - Narudzba #{order_id}")
|
|
|
|
|
+
|
|
|
|
|
+ pdf.set_font("helvetica", 'B', 7)
|
|
|
|
|
+ pdf.set_xy(10, 60)
|
|
|
|
|
+ pdf.cell(85, 4, "primalac")
|
|
|
|
|
|
|
|
- # Purpose (Svrha uplate)
|
|
|
|
|
- pdf.set_xy(10, 50)
|
|
|
|
|
- pdf.cell(40, 5, "SVRHA UPLATE:")
|
|
|
|
|
- pdf.set_xy(10, 55)
|
|
|
|
|
- pdf.set_font("helvetica", 'B', 10)
|
|
|
|
|
- pdf.multi_cell(80, 5, f"Placanje za 3D stampu - Narudzba #{order_id}")
|
|
|
|
|
pdf.set_font("helvetica", '', 10)
|
|
pdf.set_font("helvetica", '', 10)
|
|
|
|
|
+ pdf.set_xy(10, 64)
|
|
|
|
|
+ pdf.rect(10, 64, 85, 14)
|
|
|
|
|
+ pdf.multi_cell(85, 6, config.COMPANY_NAME)
|
|
|
|
|
+
|
|
|
|
|
+ # Right Block
|
|
|
|
|
+ # Sifra, Valuta, Iznos
|
|
|
|
|
+ pdf.set_font("helvetica", 'B', 7)
|
|
|
|
|
+ pdf.set_xy(105, 20)
|
|
|
|
|
+ pdf.cell(15, 4, "sifra", align="C")
|
|
|
|
|
+ pdf.set_xy(125, 20)
|
|
|
|
|
+ pdf.cell(15, 4, "valuta", align="C")
|
|
|
|
|
+ pdf.set_xy(150, 20)
|
|
|
|
|
+ pdf.cell(45, 4, "iznos", align="C")
|
|
|
|
|
|
|
|
- # Recipient (Primalac)
|
|
|
|
|
- pdf.set_xy(10, 75)
|
|
|
|
|
- pdf.cell(40, 5, "PRIMALAC:")
|
|
|
|
|
- pdf.set_xy(10, 80)
|
|
|
|
|
pdf.set_font("helvetica", 'B', 10)
|
|
pdf.set_font("helvetica", 'B', 10)
|
|
|
- pdf.multi_cell(80, 5, config.COMPANY_NAME)
|
|
|
|
|
- pdf.set_font("helvetica", '', 10)
|
|
|
|
|
|
|
+ pdf.rect(105, 24, 15, 7)
|
|
|
|
|
+ pdf.rect(125, 24, 15, 7)
|
|
|
|
|
+ pdf.rect(145, 24, 50, 7)
|
|
|
|
|
|
|
|
- # Right column
|
|
|
|
|
- # Amount
|
|
|
|
|
- pdf.set_xy(100, 25)
|
|
|
|
|
- pdf.cell(40, 5, "IZNOS (EUR):")
|
|
|
|
|
- pdf.set_xy(140, 23)
|
|
|
|
|
- pdf.set_font("helvetica", 'B', 14)
|
|
|
|
|
- pdf.cell(40, 8, f"={amount:.2f}", border=1, align="C")
|
|
|
|
|
- pdf.set_font("helvetica", '', 10)
|
|
|
|
|
|
|
+ pdf.set_xy(105, 25)
|
|
|
|
|
+ pdf.cell(15, 5, "00", align="C") # Sifra placanja
|
|
|
|
|
+ pdf.set_xy(125, 25)
|
|
|
|
|
+ pdf.cell(15, 5, "EUR", align="C")
|
|
|
|
|
+ pdf.set_xy(145, 25)
|
|
|
|
|
+ pdf.cell(50, 5, f"= {amount:.2f}", align="R")
|
|
|
|
|
|
|
|
- # Account
|
|
|
|
|
- pdf.set_xy(100, 40)
|
|
|
|
|
- pdf.cell(40, 5, "RACUN PRIMAOCA:")
|
|
|
|
|
- pdf.set_xy(140, 38)
|
|
|
|
|
- pdf.set_font("helvetica", 'B', 12)
|
|
|
|
|
- pdf.cell(60, 8, config.ZIRO_RACUN, border=1, align="C")
|
|
|
|
|
- pdf.set_font("helvetica", '', 10)
|
|
|
|
|
|
|
+ # Racun posiljaoca (left empty usually for cash deposits)
|
|
|
|
|
+ pdf.set_font("helvetica", 'B', 7)
|
|
|
|
|
+ pdf.set_xy(105, 34)
|
|
|
|
|
+ pdf.cell(60, 4, "racun posiljaoca")
|
|
|
|
|
+ pdf.rect(105, 38, 90, 7)
|
|
|
|
|
|
|
|
- # Reference
|
|
|
|
|
- pdf.set_xy(100, 55)
|
|
|
|
|
- pdf.cell(40, 5, "POZIV NA BROJ:")
|
|
|
|
|
- pdf.set_xy(140, 53)
|
|
|
|
|
- pdf.set_font("helvetica", 'B', 12)
|
|
|
|
|
- pdf.cell(60, 8, str(order_id), border=1, align="C")
|
|
|
|
|
|
|
+ # Racun primaoca
|
|
|
|
|
+ pdf.set_xy(105, 48)
|
|
|
|
|
+ pdf.cell(60, 4, "racun primaoca")
|
|
|
|
|
+ pdf.rect(105, 52, 90, 7)
|
|
|
|
|
+ pdf.set_font("helvetica", 'B', 11)
|
|
|
|
|
+ pdf.set_xy(105, 52)
|
|
|
|
|
+ pdf.cell(90, 7, config.ZIRO_RACUN, align="C")
|
|
|
|
|
+
|
|
|
|
|
+ # Model and Poziv na broj odobrenja
|
|
|
|
|
+ pdf.set_font("helvetica", 'B', 7)
|
|
|
|
|
+ pdf.set_xy(105, 62)
|
|
|
|
|
+ pdf.cell(15, 4, "model")
|
|
|
|
|
+ pdf.set_xy(125, 62)
|
|
|
|
|
+ pdf.cell(70, 4, "poziv na broj (odobrenja)")
|
|
|
|
|
+
|
|
|
|
|
+ pdf.rect(105, 66, 15, 7)
|
|
|
|
|
+ pdf.rect(125, 66, 70, 7)
|
|
|
|
|
+
|
|
|
|
|
+ pdf.set_font("helvetica", 'B', 10)
|
|
|
|
|
+ pdf.set_xy(105, 67)
|
|
|
|
|
+ pdf.cell(15, 5, "00", align="C")
|
|
|
|
|
+ pdf.set_xy(125, 67)
|
|
|
|
|
+ pdf.cell(70, 5, str(order_id), align="C")
|
|
|
|
|
+
|
|
|
|
|
+ # Signature
|
|
|
|
|
+ pdf.set_font("helvetica", 'B', 7)
|
|
|
|
|
+ pdf.set_xy(10, 84)
|
|
|
|
|
+ pdf.cell(40, 4, "potpis uplatioca", align="C")
|
|
|
|
|
+ pdf.line(10, 84, 50, 84)
|
|
|
|
|
+
|
|
|
|
|
+ # Stamp & signature recipient
|
|
|
|
|
+ pdf.set_xy(155, 84)
|
|
|
|
|
+ pdf.cell(40, 4, "potpis i pecat primaoca", align="C")
|
|
|
|
|
+ pdf.line(155, 84, 195, 84)
|
|
|
|
|
|
|
|
# Save file
|
|
# Save file
|
|
|
pdf_dir = os.path.join(config.UPLOAD_DIR, "invoices")
|
|
pdf_dir = os.path.join(config.UPLOAD_DIR, "invoices")
|