exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

challenger-postal.typ (1991B)


      1 // Form to render postal addresses validated via Challenger.
      2 // Pass JSON data as content dictionary
      3 
      4 #let form(data) = {
      5   set page(
      6     paper: "a4",
      7     margin: (left: 2cm, right: 2cm, top: 2cm, bottom: 2.5cm),
      8     footer: context [
      9       #grid(
     10         columns: (1fr, 1fr),
     11         align: (left, right),
     12         text(size: 8pt)[
     13         ],
     14         text(size: 8pt)[
     15           Page #here().page() of #counter(page).final().first()
     16         ]
     17       )
     18     ]
     19   )
     20 
     21   set text(font: "Liberation Sans", size: 10pt)
     22   set par(justify: false, leading: 0.65em)
     23 
     24   // Helper function to get value or empty string
     25   let get(key, default: "") = {
     26     data.at(key, default: default)
     27   }
     28 
     29   // Helper function for checkbox
     30   let checkbox(checked) = {
     31     box(
     32       width: 3mm,
     33       height: 3mm,
     34       stroke: 0.5pt + black,
     35       inset: 0.3mm,
     36       if checked == true or checked == "true" {
     37         place(center + horizon, text(size: 8pt, sym.checkmark))
     38       }
     39     )
     40   }
     41 
     42   // Header
     43   align(center, text(size: 11pt, weight: "bold")[CONFIDENTIAL])
     44 
     45   v(0.5em)
     46 
     47   grid(
     48     columns: (50%, 50%),
     49     gutter: 1em,
     50     image("taler-logo.svg", width: 80%),
     51     align(right)[
     52       #table(
     53         columns: (1fr, 1fr),
     54         stroke: 0.5pt + black,
     55         inset: 5pt,
     56         align: (left, left),
     57         [AMLA File No.],
     58         [#get("FILE_NUMBER")]
     59       )
     60     ]
     61   )
     62 
     63   v(1em)
     64 
     65   // Section 1: Validated address
     66   text(size: 11pt, weight: "bold")[Validated address:]
     67 
     68   v(0.5em)
     69 
     70   block(breakable: false)[
     71     #v(0.5em)
     72     #table(
     73       columns: (35%, 65%),
     74       stroke: 0.5pt + black,
     75       inset: 5pt,
     76       [Contact name:], [#get("CONTACT_NAME")],
     77       [Address:], [#get("ADDRESS_LINES").split("\n").join(linebreak())],
     78       [Country:], [#get("ADDRESS_COUNTRY")],
     79     )
     80     #v(0.5em)
     81   ]
     82 }
     83 
     84 // Example usage:
     85 #form((
     86   "VQF_MEMBER_NUMBER": "12345",
     87   "FILE_NUMBER": "42",
     88   "CONTACT_NAME": "Bob Builder",
     89   "ADDRESS_LINES" : "Parkallee 42\n12345 Bielefeld",
     90   "ADDRESS_COUNTRY" : "Germany",
     91 ))