diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1d17dae --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.venv diff --git a/factures/2018/1169.html.jinja2 b/factures/2018/1169.html.jinja2 new file mode 100644 index 0000000..5125f4e --- /dev/null +++ b/factures/2018/1169.html.jinja2 @@ -0,0 +1,11 @@ +{% extends '_layout.jinja2' %} + +{% set lines = [ + ['Soutien financier « Bronze » à PyConFr 2018', 500, 1], +] %} + +{% block address_to %} +TeMPO Consulting +20, avenue de la Paix +67000 Strasbourg +{% endblock address_to %} diff --git a/factures/2018/1169.pdf b/factures/2018/1169.pdf new file mode 100644 index 0000000..7a289bb Binary files /dev/null and b/factures/2018/1169.pdf differ diff --git a/factures/2018/1170.html.jinja2 b/factures/2018/1170.html.jinja2 new file mode 100644 index 0000000..4850ff2 --- /dev/null +++ b/factures/2018/1170.html.jinja2 @@ -0,0 +1,13 @@ +{% extends '_layout.jinja2' %} + +{% set lines = [ + ['Soutien financier « Bronze » à PyConFr 2018', 500, 1], +] %} + +{% block address_to %} +Odoo Community Association (OCA) +c/o Camptocamp SA +EPFL Innovation Park, Bat. A +1015 Lausanne +Switzerland +{% endblock address_to %} diff --git a/factures/2018/1170.pdf b/factures/2018/1170.pdf new file mode 100644 index 0000000..861b2fc Binary files /dev/null and b/factures/2018/1170.pdf differ diff --git a/factures/2018/1171.html.jinja2 b/factures/2018/1171.html.jinja2 new file mode 100644 index 0000000..36e34f4 --- /dev/null +++ b/factures/2018/1171.html.jinja2 @@ -0,0 +1,11 @@ +{% extends '_layout.jinja2' %} + +{% set lines = [ + ['Soutien financier « Argent » à PyConFr 2018', 1000, 1], +] %} + +{% block address_to %} +Sewan +2, cité Paradis +75010 PARIS +{% endblock address_to %} diff --git a/factures/2018/1171.pdf b/factures/2018/1171.pdf new file mode 100644 index 0000000..4446498 Binary files /dev/null and b/factures/2018/1171.pdf differ diff --git a/factures/2018/1172.html.jinja2 b/factures/2018/1172.html.jinja2 new file mode 100644 index 0000000..5ce0a0b --- /dev/null +++ b/factures/2018/1172.html.jinja2 @@ -0,0 +1,11 @@ +{% extends '_layout.jinja2' %} + +{% set lines = [ + ['Soutien financier « Argent » à PyConFr 2018', 1000, 1], +] %} + +{% block address_to %} +PeopleDoc +53, rue d’Hauteville +75010 PARIS +{% endblock address_to %} diff --git a/factures/2018/1172.pdf b/factures/2018/1172.pdf new file mode 100644 index 0000000..114d8c1 Binary files /dev/null and b/factures/2018/1172.pdf differ diff --git a/factures/2018/1173.html.jinja2 b/factures/2018/1173.html.jinja2 new file mode 100644 index 0000000..de32d85 --- /dev/null +++ b/factures/2018/1173.html.jinja2 @@ -0,0 +1,11 @@ +{% extends '_layout.jinja2' %} + +{% set lines = [ + ['Soutien financier « Bronze » à PyConFr 2018', 500, 1], +] %} + +{% block address_to %} +Algoo SAS +340, rue de l’Eygala +38430 Moirans +{% endblock address_to %} diff --git a/factures/2018/1173.pdf b/factures/2018/1173.pdf new file mode 100644 index 0000000..0356889 Binary files /dev/null and b/factures/2018/1173.pdf differ diff --git a/factures/2018/1174.html.jinja2 b/factures/2018/1174.html.jinja2 new file mode 100644 index 0000000..bc6ebff --- /dev/null +++ b/factures/2018/1174.html.jinja2 @@ -0,0 +1,11 @@ +{% extends '_layout.jinja2' %} + +{% set lines = [ + ['Soutien financier « Argent » à PyConFr 2018', 1000, 1], +] %} + +{% block address_to %} +Anybox +1, rue de Stockholm +75008 Paris +{% endblock address_to %} diff --git a/factures/2018/1174.pdf b/factures/2018/1174.pdf new file mode 100644 index 0000000..a1f8e6a Binary files /dev/null and b/factures/2018/1174.pdf differ diff --git a/factures/2018/AFPy-Facture-1169.odt b/factures/2018/AFPy-Facture-1169.odt deleted file mode 100644 index d095c1f..0000000 Binary files a/factures/2018/AFPy-Facture-1169.odt and /dev/null differ diff --git a/factures/2018/AFPy-Facture-1169.pdf b/factures/2018/AFPy-Facture-1169.pdf deleted file mode 100644 index 9c6d82e..0000000 Binary files a/factures/2018/AFPy-Facture-1169.pdf and /dev/null differ diff --git a/factures/2018/Makefile b/factures/2018/Makefile new file mode 120000 index 0000000..f44b341 --- /dev/null +++ b/factures/2018/Makefile @@ -0,0 +1 @@ +../commun/Makefile \ No newline at end of file diff --git a/factures/2018/_layout.jinja2 b/factures/2018/_layout.jinja2 new file mode 120000 index 0000000..a143901 --- /dev/null +++ b/factures/2018/_layout.jinja2 @@ -0,0 +1 @@ +../commun/_layout.jinja2 \ No newline at end of file diff --git a/factures/2018/suivi_sponsors_pycon_2018.rst b/factures/2018/suivi_sponsors_pycon_2018.rst index 01caaac..b4b8c66 100644 --- a/factures/2018/suivi_sponsors_pycon_2018.rst +++ b/factures/2018/suivi_sponsors_pycon_2018.rst @@ -4,7 +4,7 @@ Tableau de suivi du sponsoring PyCon 2018 +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -|Société | Contact | mail | réponse | Fact sent | Note | +| Société | Contact | Mail | Réponse | Facture | Note | +==========================+===================+======================================+=============+============+=============================+ | Alter Way | Stéphane Vincent | stephane.vincent@alterway.fr | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ @@ -20,11 +20,11 @@ Tableau de suivi du sponsoring PyCon 2018 +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Capensis | D. Vandenbroucke | dvandenbroucke@capensis.fr | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| Tempo consulting | Maurice Moretti | mm@tempo-consulting.fr | Bronze | 500 (1169) | | +| Tempo consulting | Maurice Moretti | mm@tempo-consulting.fr | Bronze | 500 (1169) | En attente de paiement | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| hackcendo | Alexandre Franke | af@hackcendo.com | | | | +| Hackcendo | Alexandre Franke | af@hackcendo.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| VODATA | Rémy Sabatier | contact@vodata.fr | | | | +| Vodata | Rémy Sabatier | contact@vodata.fr | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Akretion France | Sebastien Beau | sebastien.beau@akretion.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ @@ -35,9 +35,9 @@ Tableau de suivi du sponsoring PyCon 2018 +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Sysnove | Guillaume Subiron | guillaume@sysnove.fr | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| tinyclues | Boris Feld | lothiraldan@gmail.com | | | | +| Tinyclues | Boris Feld | lothiraldan@gmail.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| d2si | Mohini JAGANATHEN | mohini.jaganathen@d2-si.eu | | | | +| D2SI | Mohini Jaganathen | mohini.jaganathen@d2-si.eu | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Net-ng | Jean-Luc Carre | jean.luc.carre@net-ng.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ @@ -46,19 +46,19 @@ Tableau de suivi du sponsoring PyCon 2018 +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Planet work | Hadrien Devallez | h.devallez@planet-work.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| ORANGE IMPT/OLPS | Franck Guillaud | franck.guillaud@orange.com | | | | +| Orange IMPT/OLPS | Franck Guillaud | franck.guillaud@orange.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Mozilla Foundation | Rémy Hubscher | rhubscher@mozilla.com | | | BOUNCED | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Lengow | Thomas Loiret | thomas.loiret@lengow.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| Lexsi | Linda VERZELE | lverzele@lexsi.com | | | | +| Lexsi | Linda Verzele | lverzele@lexsi.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | alwaysdata | Nicolas Ferrari | nferrari@alwaysdata.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Ecreall | Michaël Launay | michaellaunay@ecreall.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| Anybox | Christ. Combelles | contact@anybox.fr | | | | +| Anybox | Christ. Combelles | contact@anybox.fr | Argent | 1000 (1174)| Payé | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Makina-Corpus | Catherine Tillous | catherine.tillous@makina-corpus.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ @@ -67,22 +67,25 @@ Tableau de suivi du sponsoring PyCon 2018 | Netsach | Pierre Alexandre | pa.schembri@netsach.com | | | | | | SCHEMBRI | | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| Bearstech | G Pasgrimaud | gpasgrimaud@bearstech.com | | | | +| Bearstech | Gaël Pasgrimaud | gpasgrimaud@bearstech.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Yaal | Arthur Ledard | arthur@yaal.fr | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| Itlink | Matthieu GIRARD | mgirard@itlink.fr | | | | +| Itlink | Matthieu Girard | mgirard@itlink.fr | | | En attente d'informations | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| Algoo | Damien Accorsi | damien.accorsi@algoo.fr | | | | +| Algoo | Damien Accorsi | damien.accorsi@algoo.fr | Bronze | 500 (1173) | En attente d'informations | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| People doc | Laureline Guerin | laureline.guerin@people-doc.com | Argent | | En attente d'informations | +| PeopleDoc | Laureline Guerin | laureline.guerin@people-doc.com | Argent | 1000 (1172)| En attente de paiement | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Toucantoco | Kevin Duchier | kevin.duchier@toucantoco.com | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ | Majerti | Feth Arezki | feth.arezki@majerti.fr | | | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| Odoo Community | Rebecca Gellatly | rebecca.gelatly@o4sb.com | Bronze | | Nouveau sponsor | -| Association | | | | | En attente d'informations | +| Odoo Community | Rebecca Gellatly | rebecca.gelatly@o4sb.com | Bronze | 500 (1170) | Nouveau sponsor | +| | | | | | En attente de paiement | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ -| **Total** | | | | 500 | | +| Sewan | Jean-Baptiste | jbaptiste.braun@gmail.com | Argent | 1000 (1171)| Nouveau sponsor | +| | Braun | | | | En attente d'informations | ++--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ +| **Total** | | | | 4500 | | +--------------------------+-------------------+--------------------------------------+-------------+------------+-----------------------------+ diff --git a/factures/README b/factures/README new file mode 100644 index 0000000..9ec9289 --- /dev/null +++ b/factures/README @@ -0,0 +1,4 @@ +Jusqu'à 2017, les factures sont stockées en ODT et en PDF. + +À partir de 2018, les factures sont stockées en HTML/Jinja2 et peuvent être +générées avec la commande "make". \ No newline at end of file diff --git a/factures/commun/Makefile b/factures/commun/Makefile new file mode 100644 index 0000000..0aea7ba --- /dev/null +++ b/factures/commun/Makefile @@ -0,0 +1,15 @@ +.PHONY: clean +all: $(addsuffix .pdf,$(basename $(basename $(wildcard *.html.jinja2)))) + +../commun/.venv: + virtualenv -p python3 $(PWD)/../commun/.venv + $(PWD)/../commun/.venv/bin/pip install jinja2-cli weasyprint + +clean: + rm -rf $(PWD)/../commun/.venv + +%.pdf: %.html ../commun/.venv + $(PWD)/../commun/.venv/bin/weasyprint $< $@ + +%.html: %.html.jinja2 ../commun/.venv + $(PWD)/../commun/.venv/bin/jinja2 $< -D number=$* -D date=$(shell date +%x) > $@ diff --git a/factures/commun/_layout.jinja2 b/factures/commun/_layout.jinja2 new file mode 100644 index 0000000..3be22dd --- /dev/null +++ b/factures/commun/_layout.jinja2 @@ -0,0 +1,86 @@ + + + + + AFPy − Facture n°{{ number }} + + + + +
+
+ {%- block address_from -%} + Association Francophone Python + 2, rue Professeur Zimmermann + 69007 LYON + FRANCE + 504 398 355 00017 + {%- endblock address_from -%} +
+
+ {%- block address_to -%} + {%- endblock address_to -%} +
+
+ +
+
Date
+
{{ date }}
+
N° de facture
+
{{ number }}
+
+ + + {% for designation, price, quantity in lines %} + {% if loop.first %} + + + + + + + + {% set total = 0 %} + {% endif %} + + + + + + + + {% set total = total + quantity * price %} + + {% if loop.last %} + + + + + + {% endif %} + {% endfor %} +
DésignationPrix unitaireQuantitéTotal
{{ designation }}{{ price }} €{{ quantity }}{{ quantity * price }} €
Total T.T.C. à payer{{ total }} €
+ + + + diff --git a/factures/commun/logo.svg b/factures/commun/logo.svg new file mode 100644 index 0000000..345df5d --- /dev/null +++ b/factures/commun/logo.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/factures/commun/style.css b/factures/commun/style.css new file mode 100644 index 0000000..e4c5bb9 --- /dev/null +++ b/factures/commun/style.css @@ -0,0 +1,115 @@ +html { + color: #222; + font-family: "Cantarell"; + font-weight: 300; + line-height: 1.4; +} + +body::before { + background: url(logo.svg) 0 50% no-repeat; + content: "afpy"; + display: block; + font-size: 28pt; + padding: 0.5cm 0.5cm 0.5cm 1.5cm; +} + +body::after { + background: url(logo.svg) 50% 50% / cover no-repeat; + bottom: -5cm; + content: ''; + height: 20cm; + opacity: 0.05; + position: absolute; + right: -5cm; + width: 20cm; +} + +address { + font-style: normal; + white-space: pre-line; +} + +header { + display: table; + margin-bottom: 3em; + width: 100%; +} + +#from, #to { + display: table-cell; + width: 50%; +} + +#from { + font-size: 0.8em; + vertical-align: top; +} + +#to { + vertical-align: bottom; +} + +table { + border-collapse: collapse; + margin: 3em 0; + width: 100%; +} + +thead { + font-size: 0.8em; +} + +thead th { + padding: 0.7em; +} + +th, td { + font-weight: inherit; + padding: 0.5em; +} + +tbody tr { + border-top: 0.2mm solid #ddd; +} + +tfoot * { + padding-top: 1.5em; +} + +tfoot th { + text-align: right; +} + +tfoot th::after { + content: ' :'; +} + +footer { + font-size: 0.8em; +} + +dl { + margin: 0; +} + +dt { + display: inline; +} + +dt::after { + content: ' :'; +} + +dd { + display: inline; + margin: 0; +} + +dd::after { + content: '\A'; + white-space: pre; +} + +p { + margin: 0.5em 0; +}