From 455306a0a6beeb318f108fdd81e32fd2e9171f44 Mon Sep 17 00:00:00 2001 From: Chris Lowis Date: Tue, 3 May 2022 11:44:36 +0100 Subject: [PATCH] Generate invocies from the members.csv This commit updates the previous template to inline the two images as data URIs and embed ERB template markers for the data. The ruby script added in this commit interpolates the data from the members.csv file into the template and generates PDFs using wkhtmltopdf. --- ADMINISTRATION.md | 16 ++--- img/Cotech-blue-text.png | Bin 5775 -> 0 bytes img/chris_lowis_signature.png | Bin 30464 -> 0 bytes scripts/generate_invoices.rb | 66 ++++++++++++++++++ template/template.html | 102 +++++++++++++++++++++++++++ theme/cotech.css | 114 ------------------------------- theme/invoice_template_themed.md | 45 ------------ 7 files changed, 174 insertions(+), 169 deletions(-) delete mode 100644 img/Cotech-blue-text.png delete mode 100644 img/chris_lowis_signature.png create mode 100644 scripts/generate_invoices.rb create mode 100644 template/template.html delete mode 100644 theme/cotech.css delete mode 100644 theme/invoice_template_themed.md diff --git a/ADMINISTRATION.md b/ADMINISTRATION.md index 2312c2e..f72c39d 100644 --- a/ADMINISTRATION.md +++ b/ADMINISTRATION.md @@ -4,24 +4,20 @@ Records and documentation for the CoTech fund ## Generating receipts -Install `pandoc` and `wkhtmltopdf` using, for example homebrew on OS X +Install `wkhtmltopdf` using, for example homebrew on OS X ``` -brew install pandoc brew install Caskroom/cask/wkhtmltopdf ``` -Then in `receipts/` create a markdown file from an existing one, and run, for example +Then in the root of the project run ``` -pandoc -t html5 agile_collective_2019-2020.md -o agile_collective_2019-2020.pdf --css style.css +ruby scripts/generate_invoices.rb ``` +The invoices should be generated in `invoices/sent/2022/`. +The ruby script can be edited to change the start of the range of invoice numbers and to generate the output in a different directory. ---- - ---- - -Alternatively, to make PDF invoices/receipts with markdown files [markdown themes](https://support.typora.io/About-Themes/) can be used. `theme/cotech.css` can be used as a CSS stylesheet and `invoice_template_themed.md` as template. Images path has to point to `img/` directory at the root of the repository. Invoices in `invoices/sent/2020` were created that way. - +The data used to generate the invoices is in `members.csv`. diff --git a/img/Cotech-blue-text.png b/img/Cotech-blue-text.png deleted file mode 100644 index 0dd565ebf727b14a12728877aeaadd0a027122fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5775 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 diff --git a/img/chris_lowis_signature.png b/img/chris_lowis_signature.png deleted file mode 100644 index 1d1aa1ba22d8c87f432ae1be1731a9c93d828fc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30464 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 + + + + + Invoice <%= number %> + + + + +
+ +
+ +
+
+<%= name %>
+
+<%= address %>
+	
+
+ +

+ <%= date %> +

+ +

Invoice: CoTech Fund Contribution

+

Invoice number: <%= number %>

+ +

Dear <%= name %>

+ +

Thank you for agreeing to contribute to the CoTech fund. We have calculated your contribution as follows:

+ + + + + + + + + + + + + + + +
DescriptionMembersTotal
Contribution for 2022/23 @ £1/member/week<%= members %>£<%= total %>
+ +

If this calculation is correct, please make a payment of £<%= total %> by bank transfer to:

+ +
+	Account Name: Co-operative Technologists
+	Account Number: 20409157
+	Sort Code: 60-83-01
+    
+ +

If you have any changes to the calculation, for example if your + co-op has more or less members than last year, let me know and I'll + reissue this invoice.

+ +

In cooperation,

+

+

Chris Lowis, Treasurer

+

treasurer@coops.tech

+ + diff --git a/theme/cotech.css b/theme/cotech.css deleted file mode 100644 index f55595c..0000000 --- a/theme/cotech.css +++ /dev/null @@ -1,114 +0,0 @@ -@charset "utf-8"; - -body { -font-size: 10.5pt; -font-family: "Avenir Next", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; -hyphens: auto; -height: 270mm; /* 297 - 10 (top) - 20 (bottom) */ -line-height: 140%; -margin: 0; -padding: 0; -} - -code { -font-family: "Source Sans Code", Courier New, Courier, monospace; -margin-left: 1pt; -} - -a { -color: black; -margin-left: 1pt; -} - -table { -width: 100%; -} - -table:nth-of-type(3) { -border: 1px solid black; -padding: 5pt; -} - -table:nth-of-type(3) td:nth-of-type(2) { -text-align: center; -} - -h1 { -font-size: 13pt; -margin-top: 6pt; -margin-bottom: 0; -} - -h2 { -font-size: 10.5pt; -font-weight: normal; -margin-top: 0; -margin-bottom: 20pt; -} - -p { -width: 100%; -} - -p:first-of-type { -font-size: 9pt; -word-spacing: 1pt; -} - -/*p:first-of-type::after { -content: "\2014"; -position: absolute; -top: 89mm; / 99mm - 10mm top / -right: 0mm; - -}*/ - -p:nth-of-type(2) { -margin-top: 20mm; -} - -p:nth-of-type(3) { -text-align: left; -} - -p:nth-last-of-type(3) { -margin-top: 10mm; -} - -p:last-of-type { -text-align: justify; -font-size: 9pt; -position: absolute; -bottom: 2mm; -margin-bottom: 0; -padding-bottom: 0; -/* word-spacing: 1pt; */ -color: #444; -} - -hr { -border: 1px solid #eee; -} - -hr:last-of-type { -position: absolute; -bottom: 14mm; -width: 100%; -} - -figure { -margin: 0; -} - -img { -width: 15%; -left: 0px; -float: left; -display: block; -} - -.footer { -position: fixed; -bottom: 0px; -font-size: 8pt; -} diff --git a/theme/invoice_template_themed.md b/theme/invoice_template_themed.md deleted file mode 100644 index bf28295..0000000 --- a/theme/invoice_template_themed.md +++ /dev/null @@ -1,45 +0,0 @@ - - -![](../img/Cotech-blue-text.png) - - - - - -
-Co-op's name
-
-Address
-
-
- -19th June 2020 - - - -# Invoice: CoTech Fund Contribution -## Invoice number: 00023 - - - -| Description | Members | Total | -| --------------------------------------------------- | ------- | ------ | -| Annual subscription to CoTech fund @ £1/member/week | 1 | £52.00 | - -Please make a payment of £52.00 by bank transfer to: - -- **Account Name**: Co-operative Technologists -- **Account Number**: 20409157 -- **Sort Code**: 60-83-01 - - - -Kind regards, - -![](../img/chris_lowis_signature.png) - - - -(Chris Lowis, Treasurer) - - Chris Lowis | treasurer@coops.tech