Bläddra i källkod

fix: adjust uplatnica dimensions to montenegrin legal standard 210x99mm

unknown 1 vecka sedan
förälder
incheckning
392688c19d
1 ändrade filer med 90 tillägg och 48 borttagningar
  1. 90 48
      backend/services/uplatnica_generator.py

+ 90 - 48
backend/services/uplatnica_generator.py

@@ -4,72 +4,114 @@ import config
 
 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()
     
-    # We will just use the default Helvetica or Arial
+    # Fonts
     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
-    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_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_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_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.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
     pdf_dir = os.path.join(config.UPLOAD_DIR, "invoices")