diff --git a/.gitignore b/.gitignore index a136337..34990f7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.pdf +*.yml \ No newline at end of file diff --git a/beitrittserklärung.typ b/beitrittserklärung.typ index dbf4858..4334be2 100644 --- a/beitrittserklärung.typ +++ b/beitrittserklärung.typ @@ -57,7 +57,6 @@ #form_field[unterschrift (bei minderjährigen der ges. vertr.)] ] -#v(0.5em) #text(10pt, style: "italic")[ \* Bitte eines der Felder ankreuzen. Es kann auch ein beliebig höherer Beitrag entrichtet werden. ] diff --git a/rechnung.typ b/rechnung.typ new file mode 100644 index 0000000..6b7ba28 --- /dev/null +++ b/rechnung.typ @@ -0,0 +1,146 @@ +#import "templates/form.typ": tmpl, colors +#let config = yaml("rechnung.yml") + +#show: doc => tmpl( + title: ( + invoice: "Rechnung", + estimate: "Kostenvoranschlag", + internal: "Eigenbeleg" + ).at(config.type), + version: "", + change_date: config.date, + text_size: 11.25pt, + doc, +) + +// DIN 5008 Sichtfenster: 45mm +#place( + top+left, + dy: 25mm, +)[ + #text(size: 0.75em)[#underline[swablab e.V. - Katharinenstr. 1 - 72250 Freudenstadt]] \ + #v(0.5em) + #config.address +] + +// DIN 5008 Informationsblock: 50mm +#place( + top+right, + dy: 30mm, +)[ + #v(1em) + Datum: #config.date \ + #if config.type != "internal" [ + Kunden-Nr.: #config.customer_no \ + ] + #if config.type == "invoice" [ + Rechnungs-Nr.: #config.invoice_no \ + ] +] + +// DIN 5008 Faltmarke 1: 105mm +#place( + top+left, + dy: 85mm, + dx: -1cm, + line( + length: -1em, + stroke: 0.5pt + colors.subtext + ) +) +// DIN 5008 Faltmarke 2: 210mm +#place( + top+left, + dy: 190mm, + dx: -1cm, + line( + length: -1em, + stroke: 0.5pt + colors.subtext + ) +) + +#let money(i) = { + if i == 0 { + return "0.00€" + } + str(i * 100).slice(0,-2)+ "." + str(i * 100).slice(-2) + " €" +} + +// DIN 5008 nach Faltmarke 1 +#place( + top+left, + dy: 85mm, +)[ + #table( + columns: (auto, 1fr, auto, auto, auto ,auto), + fill: (_, row) => if row == 0 { colors.highlight } else { white }, + stroke: 0.1pt + colors.subtext, + [*Pos.*], + [*Beschreibung*], + [*Stück*], + [*Einzelpreis*], + [*Rabatt*], + [*Betrag*], + ..config.entries.enumerate().map(e => ( + e.at(0)+1, + e.at(1).description, + e.at(1).pieces, + money(e.at(1).price), + money(e.at(1).sale), + money(e.at(1).pieces * e.at(1).price - e.at(1).sale), + )).flatten().map(e => [#e]), + ) + + #align(right)[ + #pad(x:1em)[ + *Gesamtbetrag: #money(config.entries.map(e => e.pieces * e.price - e.sale).sum())* + ] + ] +] + +// Footer +#place(bottom+left)[ + #if config.type == "invoice" [ + Vielen Dank für deine Bestellung! \ + ] else if config.type == "estimate" [ + Wir freuen uns auf deine Bestellung! \ + ] else if config.type == "internal" [ + *Grund für Eigenbeleg:* \ + #config.internal_reason + ] + + #text(size: 0.7em, fill: colors.subtext)[ + #if config.type == "invoice" [ + Gesamtbetrag fällig in 10 Tagen ab Rechnungserhalt. \ + Für überfällige Zahlungen wird eine Bearbeitungsgebühr von min. 5 % pro Monat berechnet. + ] else if config.type == "estimate" [ + Dieser Kostenvoranschlag ist unverbindlich. + ] + + #table( + stroke: none, + align: top+left, + columns: (1fr,1fr,auto,1fr,1fr), + [*Telefon*],[*E-Mail / Web*],[*Bankverbindung*],[*Vereinsregister*],[*Vorstand*], + [ + +49 15679232971 + ], + [ + info\@swablab.de \ + https://swablab.de + ], + [ + VR-Bank Dornstetten-Horb \ + DE12 6426 2408 0125 6340 05 + ], + [ + VR 724909 \ + Amtsgericht Stuttgart + ], + [ + Fabian Haas \ + Manuel Knodel + ], + ) + ] +] \ No newline at end of file diff --git a/rechnung.yml.template b/rechnung.yml.template new file mode 100644 index 0000000..9804eb4 --- /dev/null +++ b/rechnung.yml.template @@ -0,0 +1,18 @@ +type: invoice # invoice (Rechnung), estimate (Kostenvoranschlag), internal (Eigenbeleg) +date: 01.01.2024 +customer_no: 0 # für Rechnung und Kostenvoranschlag +invoice_no: 0 # für Rechnung +internal_reason: Begründung # für Eigenbeleg +address: | + Name + Straße + PLZ Adresse +entries: + - description: Teil 1 + pieces: 2 + price: 5 + sale: 1 + - description: Teil 2 + pieces: 1 + price: 2 + sale: 0 diff --git a/templates/form.typ b/templates/form.typ index a2b6786..eb309ba 100644 --- a/templates/form.typ +++ b/templates/form.typ @@ -1,3 +1,10 @@ +#let colors = ( + primary: oklch(93.84%, 0.09, 183.69deg), + secondary: oklch(73.51%, 0.168, 40.25deg), + subtext: oklch(60%, 0, 0deg), + highlight: oklch(90%, 0, 0deg), +) + #let tmpl( title: none, version: none, @@ -39,7 +46,7 @@ place( origin: bottom + left, text( size: 10pt, - fill: rgb("9c9c9c"), + fill: colors.subtext, [swablab e.V. / #title #version / #change_date] ) ) @@ -82,17 +89,17 @@ doc #let form_field(name, width: 100%) = { stack(spacing: 2pt)[ #rect( - fill: rgb("e4e5ea"), + fill: colors.highlight, width: width, height: 2em, ) ][ - #text(9pt, fill: rgb("000000"))[ + #text(9pt, fill: black)[ #name ] ] } #let form_inline(width: 12em) = { - box(height: 0.75em, width: width, fill: rgb("e4e5ea"), outset: (y: 3pt)) + box(height: 0.75em, width: width, fill: colors.highlight, outset: (y: 3pt)) } \ No newline at end of file