uplatnica_generator.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import os
  2. from fpdf import FPDF
  3. import config
  4. def generate_uplatnica(order_id: int, payer_name: str, payer_address: str, amount: float) -> str:
  5. """
  6. Generate a simple PDF 'Nalog za uplatu' (Uplatnica) for Montenegro.
  7. Returns the absolute path to the generated PDF.
  8. """
  9. pdf = FPDF(orientation='L', unit='mm', format=(100, 210))
  10. pdf.add_page()
  11. # We will just use the default Helvetica or Arial
  12. pdf.set_font("helvetica", 'B', 12)
  13. # Draw simple border
  14. pdf.rect(5, 5, 200, 90)
  15. # Title
  16. pdf.set_y(10)
  17. pdf.set_font("helvetica", 'B', 14)
  18. pdf.cell(0, 10, "NALOG ZA UPLATU", align="C")
  19. pdf.set_font("helvetica", '', 10)
  20. # Payer Info (Uplatilac)
  21. pdf.set_xy(10, 25)
  22. pdf.cell(40, 5, "UPLATILAC:")
  23. pdf.set_xy(10, 30)
  24. pdf.set_font("helvetica", 'B', 10)
  25. pdf.multi_cell(80, 5, f"{payer_name}\n{payer_address}")
  26. pdf.set_font("helvetica", '', 10)
  27. # Purpose (Svrha uplate)
  28. pdf.set_xy(10, 50)
  29. pdf.cell(40, 5, "SVRHA UPLATE:")
  30. pdf.set_xy(10, 55)
  31. pdf.set_font("helvetica", 'B', 10)
  32. pdf.multi_cell(80, 5, f"Placanje za 3D stampu - Narudzba #{order_id}")
  33. pdf.set_font("helvetica", '', 10)
  34. # Recipient (Primalac)
  35. pdf.set_xy(10, 75)
  36. pdf.cell(40, 5, "PRIMALAC:")
  37. pdf.set_xy(10, 80)
  38. pdf.set_font("helvetica", 'B', 10)
  39. pdf.multi_cell(80, 5, config.COMPANY_NAME)
  40. pdf.set_font("helvetica", '', 10)
  41. # Right column
  42. # Amount
  43. pdf.set_xy(100, 25)
  44. pdf.cell(40, 5, "IZNOS (EUR):")
  45. pdf.set_xy(140, 23)
  46. pdf.set_font("helvetica", 'B', 14)
  47. pdf.cell(40, 8, f"={amount:.2f}", border=1, align="C")
  48. pdf.set_font("helvetica", '', 10)
  49. # Account
  50. pdf.set_xy(100, 40)
  51. pdf.cell(40, 5, "RACUN PRIMAOCA:")
  52. pdf.set_xy(140, 38)
  53. pdf.set_font("helvetica", 'B', 12)
  54. pdf.cell(60, 8, config.ZIRO_RACUN, border=1, align="C")
  55. pdf.set_font("helvetica", '', 10)
  56. # Reference
  57. pdf.set_xy(100, 55)
  58. pdf.cell(40, 5, "POZIV NA BROJ:")
  59. pdf.set_xy(140, 53)
  60. pdf.set_font("helvetica", 'B', 12)
  61. pdf.cell(60, 8, str(order_id), border=1, align="C")
  62. # Save file
  63. pdf_dir = os.path.join(config.UPLOAD_DIR, "invoices")
  64. if not os.path.exists(pdf_dir):
  65. os.makedirs(pdf_dir)
  66. filename = f"uplatnica_order_{order_id}.pdf"
  67. filepath = os.path.join(pdf_dir, filename)
  68. pdf.output(filepath)
  69. return os.path.join("uploads", "invoices", filename).replace("\\", "/")