diff options
author | Magnus Hagander | 2018-12-11 07:01:31 +0000 |
---|---|---|
committer | Magnus Hagander | 2018-12-12 02:11:57 +0000 |
commit | 825c34a6ecfeb7eb6b7f799d4705a3bbf4e5f776 (patch) | |
tree | def37a1425aeebe4fdfd03a812c994ba0d171612 | |
parent | a82f1cc2635c7c258478de4d9d88303d092ecccc (diff) |
Implement system skinning, remove pgeu data
System skinning allows a "merged view" of the core code with that of a
"skin". A skin represents the local deployment, such as "PostgreSQL
Europe". Individual conferences are still skinned individually on top
of this.
As part of this, remove all PGEU website specific content, as that is
now moved to the PGEU specific skin. Also removes the cmutuel
application module as nobody outside PGEU needs this.
Update the global templates to remove mentions of PostgreSQL Europe,
and let PGEU override those templates as necessary. Front page
template just becomes an empty placeholder, and is expected to always
be overridden.
Makes several more modules configurable by setting ENABLE_NEWS,
ENABLE_MEMBERSHIP and ENABLE_ELECTIONS (we already had
ENABLE_BRAINTREE).
And finally, update the devsetup to be a bit more correct and also to
set up an uwsgi ini file to use for local testing.
Still lacking documentation and a few small parts are still PGEU
hardcoded, so some follow-up patches to come.
83 files changed, 194 insertions, 4350 deletions
@@ -2,5 +2,5 @@ *.pyc python .idea/ -template/admin/login.html.save_no_communityauth tools/devsetup/venv_dev/ +devserver-uwsgi.ini diff --git a/media/img/default_event.jpg b/media/img/default_event.jpg Binary files differdeleted file mode 100644 index ad1ac3b3..00000000 --- a/media/img/default_event.jpg +++ /dev/null diff --git a/media/img/elephant.png b/media/img/elephant.png Binary files differdeleted file mode 100644 index d7653181..00000000 --- a/media/img/elephant.png +++ /dev/null diff --git a/media/img/pgeu_logo.svg b/media/img/pgeu_logo.svg deleted file mode 100644 index cb11d19d..00000000 --- a/media/img/pgeu_logo.svg +++ /dev/null @@ -1,135 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="1200" - height="600" - id="svg2411" - sodipodi:version="0.32" - inkscape:version="0.46" - version="1.0" - sodipodi:docname="pgeu.logo.svg" - inkscape:output_extension="org.inkscape.output.svg.inkscape" - inkscape:export-filename="/home/damien/dev/pg-eu/pgeu.logo.png" - inkscape:export-xdpi="18" - inkscape:export-ydpi="18"> - <defs - id="defs2413"> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2419" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="0.35" - inkscape:cx="815.01116" - inkscape:cy="520" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - showborder="true" - borderlayer="false" - inkscape:window-width="960" - inkscape:window-height="688" - inkscape:window-x="8" - inkscape:window-y="8" /> - <metadata - id="metadata2416"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Calque 1" - inkscape:groupmode="layer" - id="layer1"> - <text - xml:space="preserve" - style="font-size:144px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:150%;writing-mode:lr-tb;text-anchor:middle;fill:#336791;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS" - x="831.42853" - y="231.42856" - id="text2432" - sodipodi:linespacing="150%"><tspan - sodipodi:role="line" - id="tspan2434" - x="831.42853" - y="231.42856">PostgreSQL</tspan><tspan - sodipodi:role="line" - x="831.42853" - y="447.42856" - id="tspan2442">Europe</tspan></text> - <text - xml:space="preserve" - style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:tb-rl;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Strait;-inkscape-font-specification:Strait" - x="494.28571" - y="-565.71429" - id="text2436" - sodipodi:linespacing="125%"><tspan - sodipodi:role="line" - id="tspan2438" - x="-565.71429" - y="494.28571"></tspan><tspan - sodipodi:role="line" - id="tspan2440" /></text> - <g - id="g2474" - transform="matrix(0.6277917,0,0,0.6277917,-1.998592,66.244398)"> - <path - d="M 371.4562,481.08317 C 369.21159,566.05914 372.0202,651.62719 379.8723,672.42328 C 387.72926,693.21936 404.54365,733.66859 462.36403,720.5522 C 510.66952,709.58611 528.2456,688.36443 535.87246,641.5226 C 541.48968,607.05925 552.31893,511.34715 553.70785,491.73692" - id="path2498" - style="fill:none;fill-rule:nonzero;stroke:#336791;stroke-width:20.78822517;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" /> - <path - d="M 302.15341,55.091187 C 302.15341,55.091187 40.382326,-58.200964 52.551882,199.43334 C 55.140066,254.24315 126.74422,614.16061 212.14341,505.4471 C 243.35088,465.69118 271.57474,434.51078 271.57474,434.51078" - id="path2500" - style="fill:none;fill-rule:nonzero;stroke:#336791;stroke-width:20.78816605;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - <path - d="M 443.54814,34.413525 C 434.48702,37.421897 589.16147,-25.460589 677.06461,93.477634 C 708.1149,135.4954 672.13293,307.16865 586.05953,442.41699" - id="path2502" - style="fill:none;fill-rule:nonzero;stroke:#336791;stroke-width:20.78822517;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" /> - <path - style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#336791;stroke-width:20.78816605;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 586.05789,442.41699 C 586.05789,442.41699 591.66702,471.65301 673.19123,453.83442 C 708.91063,446.02259 687.41415,475.7563 651.18747,493.57144 C 621.45643,508.18259 554.80016,511.92719 553.7111,491.73692 C 550.90896,439.64374 588.79357,455.46991 586.05953,442.41699 C 583.588,430.6615 566.6456,419.12394 555.4387,390.353 C 545.65478,365.24085 421.25431,172.66338 589.93778,201.26445 C 596.11736,199.9104 545.94324,31.36395 388.07934,28.623303 C 230.25107,25.882627 235.42911,234.15068 235.42911,234.15068" - id="path2504" /> - <path - d="M 327.2737,460.23217 C 305.26994,486.25901 311.74126,490.82909 267.75809,500.41882 C 223.25631,510.13213 249.40245,527.41871 266.46641,531.93558 C 287.15904,537.41861 335.0318,545.18068 367.37859,497.21995 C 377.229,482.61739 367.32026,459.31745 353.78935,453.37793 C 347.2516,450.51026 338.50974,446.9167 327.2737,460.23217 L 327.2737,460.23217 z" - id="path2506" - style="fill:none;fill-rule:nonzero;stroke:#336791;stroke-width:20.78822517;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" /> - <path - d="M 325.83291,459.77738 C 323.61585,444.47462 330.58146,426.26476 338.04624,404.96071 C 349.26445,372.99602 375.14806,341.02622 354.44248,239.63029 C 339.0089,164.07071 235.49231,223.90536 235.42747,234.15068 C 235.36427,244.39255 240.10957,286.08082 233.69822,334.62676 C 225.33238,397.97433 271.76435,451.55026 325.23164,446.06894" - id="path2508" - style="fill:none;fill-rule:nonzero;stroke:#336791;stroke-width:20.78822517;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" /> - <path - style="fill:#336791;fill-opacity:1;fill-rule:nonzero;stroke:#336791;stroke-width:6.92935324;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" - d="M 301.20209,232.61472 C 300.73533,236.11393 307.25201,245.45142 315.74916,246.69902 C 324.23171,247.9518 331.49227,240.65481 331.95254,237.15905 C 332.41279,233.65987 325.90423,229.80541 317.40383,228.55266 C 308.91645,227.29815 301.65261,229.12414 301.2037,232.61472 L 301.20209,232.61472 z" - id="path2510" /> - <path - style="fill:#336791;fill-opacity:1;fill-rule:nonzero;stroke:#336791;stroke-width:3.46467662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" - d="M 559.57464,225.48078 C 560.03492,228.97996 553.52633,238.31745 545.02758,239.56508 C 536.53855,240.81786 529.27796,233.52084 528.81285,230.02508 C 528.36391,226.5259 534.87411,222.67147 543.36478,221.4187 C 551.85542,220.16592 559.11437,221.99017 559.57464,225.48249 L 559.57464,225.48078 z" - id="path2512" /> - <path - d="M 589.93778,201.26445 C 591.3364,228.71226 584.35458,247.40778 583.47457,276.62664 C 582.17156,319.09748 602.59677,367.70865 571.82038,416.37985" - id="path2514" - style="fill:none;fill-rule:nonzero;stroke:#336791;stroke-width:20.78822517;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" /> - </g> - </g> -</svg> diff --git a/media/pdf/ega_minutes_201704_en.pdf b/media/pdf/ega_minutes_201704_en.pdf Binary files differdeleted file mode 100644 index e48fb720..00000000 --- a/media/pdf/ega_minutes_201704_en.pdf +++ /dev/null diff --git a/media/pdf/ga_minutes_2014_en.pdf b/media/pdf/ga_minutes_2014_en.pdf Binary files differdeleted file mode 100644 index 50e44951..00000000 --- a/media/pdf/ga_minutes_2014_en.pdf +++ /dev/null diff --git a/media/pdf/ga_minutes_2015_en.pdf b/media/pdf/ga_minutes_2015_en.pdf Binary files differdeleted file mode 100644 index f6c5ee22..00000000 --- a/media/pdf/ga_minutes_2015_en.pdf +++ /dev/null diff --git a/media/pdf/ga_minutes_2016_en.pdf b/media/pdf/ga_minutes_2016_en.pdf Binary files differdeleted file mode 100644 index 5698abdd..00000000 --- a/media/pdf/ga_minutes_2016_en.pdf +++ /dev/null diff --git a/media/pdf/ga_minutes_2017_en.pdf b/media/pdf/ga_minutes_2017_en.pdf Binary files differdeleted file mode 100644 index a6510f57..00000000 --- a/media/pdf/ga_minutes_2017_en.pdf +++ /dev/null diff --git a/media/pdf/ga_minutes_2018_en.pdf b/media/pdf/ga_minutes_2018_en.pdf Binary files differdeleted file mode 100644 index cd79d741..00000000 --- a/media/pdf/ga_minutes_2018_en.pdf +++ /dev/null diff --git a/media/pdf/pgeu_balance_2014.pdf b/media/pdf/pgeu_balance_2014.pdf Binary files differdeleted file mode 100644 index fd6e10b6..00000000 --- a/media/pdf/pgeu_balance_2014.pdf +++ /dev/null diff --git a/media/pdf/pgeu_balance_2015.pdf b/media/pdf/pgeu_balance_2015.pdf Binary files differdeleted file mode 100644 index 4641e872..00000000 --- a/media/pdf/pgeu_balance_2015.pdf +++ /dev/null diff --git a/media/pdf/pgeu_balance_2016.pdf b/media/pdf/pgeu_balance_2016.pdf Binary files differdeleted file mode 100644 index 989dac68..00000000 --- a/media/pdf/pgeu_balance_2016.pdf +++ /dev/null diff --git a/media/pdf/pgeu_balance_2017.pdf b/media/pdf/pgeu_balance_2017.pdf Binary files differdeleted file mode 100644 index adebcd87..00000000 --- a/media/pdf/pgeu_balance_2017.pdf +++ /dev/null diff --git a/media/pdf/pgeu_balance_2018.pdf b/media/pdf/pgeu_balance_2018.pdf Binary files differdeleted file mode 100644 index a58a7644..00000000 --- a/media/pdf/pgeu_balance_2018.pdf +++ /dev/null diff --git a/media/pdf/pgeu_results_2014.pdf b/media/pdf/pgeu_results_2014.pdf Binary files differdeleted file mode 100644 index b5422efc..00000000 --- a/media/pdf/pgeu_results_2014.pdf +++ /dev/null diff --git a/media/pdf/pgeu_results_2015.pdf b/media/pdf/pgeu_results_2015.pdf Binary files differdeleted file mode 100644 index cdaa97f1..00000000 --- a/media/pdf/pgeu_results_2015.pdf +++ /dev/null diff --git a/media/pdf/pgeu_results_2016.pdf b/media/pdf/pgeu_results_2016.pdf Binary files differdeleted file mode 100644 index fa5063a3..00000000 --- a/media/pdf/pgeu_results_2016.pdf +++ /dev/null diff --git a/media/pdf/pgeu_results_2017.pdf b/media/pdf/pgeu_results_2017.pdf Binary files differdeleted file mode 100644 index 51249241..00000000 --- a/media/pdf/pgeu_results_2017.pdf +++ /dev/null diff --git a/media/pdf/pgeu_results_2018.pdf b/media/pdf/pgeu_results_2018.pdf Binary files differdeleted file mode 100644 index 9d41c427..00000000 --- a/media/pdf/pgeu_results_2018.pdf +++ /dev/null diff --git a/media/pdf/postgresql_europe_jo.pdf b/media/pdf/postgresql_europe_jo.pdf Binary files differdeleted file mode 100644 index 15a4e4d6..00000000 --- a/media/pdf/postgresql_europe_jo.pdf +++ /dev/null diff --git a/postgresqleu/cmutuel/__init__.py b/postgresqleu/cmutuel/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/postgresqleu/cmutuel/__init__.py +++ /dev/null diff --git a/postgresqleu/cmutuel/admin.py b/postgresqleu/cmutuel/admin.py deleted file mode 100644 index b2cf7b90..00000000 --- a/postgresqleu/cmutuel/admin.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.contrib import admin - -from models import CMutuelTransaction - -class CMutuelTransactionAdmin(admin.ModelAdmin): - list_display = ('opdate', 'amount', 'description', 'balance', 'sent', ) - -admin.site.register(CMutuelTransaction, CMutuelTransactionAdmin) diff --git a/postgresqleu/cmutuel/management/__init__.py b/postgresqleu/cmutuel/management/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/postgresqleu/cmutuel/management/__init__.py +++ /dev/null diff --git a/postgresqleu/cmutuel/management/commands/__init__.py b/postgresqleu/cmutuel/management/commands/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/postgresqleu/cmutuel/management/commands/__init__.py +++ /dev/null diff --git a/postgresqleu/cmutuel/management/commands/cmscrape.py b/postgresqleu/cmutuel/management/commands/cmscrape.py deleted file mode 100755 index 1f074fad..00000000 --- a/postgresqleu/cmutuel/management/commands/cmscrape.py +++ /dev/null @@ -1,214 +0,0 @@ -# Scrape the CM pages to fetch list of transactions -# -# -# Copyright (C) 2014, PostgreSQL Europe -# -from django.core.management.base import BaseCommand, CommandError -from django.db import transaction -from django.db.models import Max, Q -from django.conf import settings - -import pycurl -import cStringIO -import urllib -import datetime -import csv -import sys -from decimal import Decimal -from HTMLParser import HTMLParser - - -from postgresqleu.mailqueue.util import send_simple_mail - -from postgresqleu.cmutuel.models import CMutuelTransaction - -class FormHtmlParser(HTMLParser): - def __init__(self): - HTMLParser.__init__(self) - self.in_form = False - self.target_url = None - - def handle_starttag(self, tag, attrs): - if tag == 'form': - for k,v in attrs: - if k == 'action': - if v.find('telechargement.cgi?'): - self.in_form = True - self.target_url = v - return - -class CurlWrapper(object): - def __init__(self): - self.curl = pycurl.Curl() - self.curl.setopt(pycurl.COOKIEFILE, '') - - def request(self, url, post, postdict=None): - self.curl.setopt(pycurl.URL, str(url)) - readstr = cStringIO.StringIO() - self.curl.setopt(pycurl.WRITEFUNCTION, readstr.write) - self.curl.setopt(pycurl.FOLLOWLOCATION, 0) - if post: - self.curl.setopt(pycurl.POST, 1) - curlstr = urllib.urlencode(postdict) - self.curl.setopt(pycurl.POSTFIELDS, curlstr) - self.curl.setopt(pycurl.POSTFIELDSIZE, len(curlstr)) - else: - self.curl.setopt(pycurl.POST, 0) - self.curl.perform() - return (self.curl, readstr) - - def get(self, url): - return self.request(url, False) - - def post(self, url, postdict): - return self.request(url, True, postdict) - - def expect_redirect(self, fetchpage, redirectto, postdata=None): - if postdata: - (c,s) = self.post(fetchpage, postdata) - else: - (c,s) = self.get(fetchpage) - if c.getinfo(pycurl.RESPONSE_CODE) != 302: - raise CommandError("Supposed to receive 302 for %s, got %s" % (fetchpage, c.getinfo(c.RESPONSE_CODE))) - if not isinstance(redirectto, list): - redirrectto = [redirectto, ] - if not c.getinfo(pycurl.REDIRECT_URL) in redirectto: - raise CommandError("Received unexpected redirect from %s to '%s' (expected %s)" % (fetchpage, c.getinfo(pycurl.REDIRECT_URL), redirectto)) - return c.getinfo(pycurl.REDIRECT_URL) - - -class Command(BaseCommand): - help = 'Scrape the CM website for list of recent transactions' - - def add_arguments(self, parser): - parser.add_argument('-q', '--quiet', action='store_true') - - def handle(self, *args, **options): - if not settings.CM_USER_ACCOUNT: - raise CommandError("Must specify CM user account in local_settings.py!") - - verbose = not options['quiet'] - - curl = CurlWrapper() - - if verbose: self.stdout.write("Logging in...") - curl.expect_redirect('https://www.creditmutuel.fr/en/authentification.html', - 'https://www.creditmutuel.fr/en/banque/pageaccueil.html', { - '_cm_user': settings.CM_USER_ACCOUNT, - '_cm_pwd': settings.CM_USER_PASSWORD, - 'flag': 'password', - }) - - # Follow a redirect chain to collect more cookies - curl.expect_redirect('https://www.creditmutuel.fr/en/banque/pageaccueil.html', - 'https://www.creditmutuel.fr/en/banque/paci_engine/engine.aspx') - got_redir = curl.expect_redirect('https://www.creditmutuel.fr/en/banque/paci_engine/engine.aspx', - ['https://www.creditmutuel.fr/en/banque/homepage_dispatcher.cgi', - 'https://www.creditmutuel.fr/en/banque/paci_engine/static_content_manager.aspx']) - if got_redir == 'https://www.creditmutuel.fr/en/banque/paci_engine/static_content_manager.aspx': - # Got the "please fill out your personal data" form. So let's bypass it - curl.expect_redirect('https://www.creditmutuel.fr/en/banque/paci_engine/static_content_manager.aspx?_productfilter=PACI&_pid=ContentManager&_fid=DoStopPaciAndRemind', - 'https://www.creditmutuel.fr/en/banque/homepage_dispatcher.cgi') - - # Download the form - if verbose: self.stdout.write("Downloading form...") - (c,s) = curl.get('https://www.creditmutuel.fr/cmidf/en/banque/compte/telechargement.cgi') - if c.getinfo(pycurl.RESPONSE_CODE) != 200: - raise CommandError("Supposed to receive 200, got %s" % c.getinfo(c.RESPONSE_CODE)) - - if verbose: self.stdout.write("Parsing form...") - parser = FormHtmlParser() - parser.feed(s.getvalue()) - - fromdate = CMutuelTransaction.objects.all().aggregate(max=Max('opdate')) - if fromdate['max']: - # Overlap with 1 week, just in case there are some old xacts. Yes, we might loose some, - # but we don't really care :) - fromdate = fromdate['max']-datetime.timedelta(days=7) - else: - # No previous one, so just pick a date... This will only happen once.. - fromdate = datetime.date(2014,1,1) - - if verbose: self.stdout.write("Fetch report since {0}".format(fromdate)) - (c,s) = curl.post("https://www.creditmutuel.fr%s" % parser.target_url, { - 'data_formats_selected':'csv', - 'data_formats_options_cmi_download':'0', - 'data_formats_options_ofx_format':'7', - 'Bool:data_formats_options_ofx_zonetiers':'false', - 'CB:data_formats_options_ofx_zonetiers':'on', - 'data_formats_options_qif_fileformat':'6', - 'ata_formats_options_qif_dateformat':'0', - 'data_formats_options_qif_amountformat':'0', - 'data_formats_options_qif_headerformat':'0', - 'Bool:data_formats_options_qif_zonetiers':'false', - 'CB:data_formats_options_qif_zonetiers':'on', - 'data_formats_options_csv_fileformat':'2', - 'data_formats_options_csv_dateformat':'0', - 'data_formats_options_csv_fieldseparator':'0', - 'data_formats_options_csv_amountcolnumber':'0', - 'data_formats_options_csv_decimalseparator':'1', - 'Bool:data_accounts_account_ischecked':'false', - 'CB:data_accounts_account_ischecked':'on', - 'data_daterange_value':'range', - '[t:dbt%3adate;]data_daterange_startdate_value':fromdate.strftime('%d/%m/%Y'), - '[t:dbt%3adate;]data_daterange_enddate_value':'', - '_FID_DoDownload.x':'57', - '_FID_DoDownload.y':'17', - 'data_accounts_selection':'1', - 'data_formats_options_cmi_show':'True', - 'data_formats_options_qif_show':'True', - 'data_formats_options_excel_show':'True', - 'data_formats_options_csv_show':'True', - }) - if c.getinfo(pycurl.RESPONSE_CODE) != 200: - raise CommandError("Supposed to receive 200, got %s" % c.getinfo(c.RESPONSE_CODE)) - - reader = csv.reader(s.getvalue().splitlines(), delimiter=';') - - # Write everything to the database - with transaction.atomic(): - for row in reader: - if row[0] == 'Operation date' or row[0] == 'Date': - # This is just a header - continue - try: - opdate = datetime.datetime.strptime(row[0], '%d/%m/%Y') - valdate = datetime.datetime.strptime(row[1], '%d/%m/%Y') - amount = Decimal(row[2]) - description = row[3] - balance = Decimal(row[4]) - - if not CMutuelTransaction.objects.filter(opdate=opdate, valdate=valdate, amount=amount, description=description).exists(): - CMutuelTransaction(opdate=opdate, - valdate=valdate, - amount=amount, - description=description, - balance=balance).save() - except Exception, e: - sys.stderr.write("Exception '{0}' when parsing row {1}".format(e, row)) - - # Now send things off if there is anything to send - with transaction.atomic(): - if CMutuelTransaction.objects.filter(sent=False).exclude( - Q(description__startswith='VIR STG ADYEN ') | - Q(description__startswith='VIR ADYEN BV ') | - Q(description__startswith='VIR ADYEN NV ') - ).exists(): - sio = cStringIO.StringIO() - sio.write("One or more new transactions have been recorded in the Credit Mutuel account:\n\n") - sio.write("%-10s %15s %s\n" % ('Date', 'Amount', 'Description')) - sio.write("-" * 50) - sio.write("\n") - for cmt in CMutuelTransaction.objects.filter(sent=False).order_by('opdate'): - # Maybe this shouldn't be hardcoded, but for now it is. - # Exclude Adyen transactions, since they are already reported separately. - # Still flag them as sent though, so they don't queue up forever. - if not (cmt.description.startswith('VIR STG ADYEN ') or cmt.description.startswith('VIR ADYEN BV ') or cmt.description.startswith('VIR ADYEN NV ')): - sio.write("%10s %15s %s\n" % (cmt.opdate, cmt.amount, cmt.description)) - - cmt.sent = True - cmt.save() - send_simple_mail(settings.INVOICE_SENDER_EMAIL, - settings.INVOICE_SENDER_EMAIL, - 'New Credit Mutuel transactions', - sio.getvalue()) diff --git a/postgresqleu/cmutuel/migrations/0001_initial.py b/postgresqleu/cmutuel/migrations/0001_initial.py deleted file mode 100644 index a2d9f4ce..00000000 --- a/postgresqleu/cmutuel/migrations/0001_initial.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='CMutuelTransaction', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('opdate', models.DateField()), - ('valdate', models.DateField()), - ('amount', models.DecimalField(max_digits=10, decimal_places=2)), - ('description', models.CharField(max_length=300)), - ('balance', models.DecimalField(max_digits=10, decimal_places=2)), - ('sent', models.BooleanField(default=False)), - ], - options={ - 'ordering': ('-opdate',), - 'verbose_name': 'CMutuel Transaction', - 'verbose_name_plural': 'CMutuel Transactions', - }, - ), - ] diff --git a/postgresqleu/cmutuel/migrations/__init__.py b/postgresqleu/cmutuel/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/postgresqleu/cmutuel/migrations/__init__.py +++ /dev/null diff --git a/postgresqleu/cmutuel/models.py b/postgresqleu/cmutuel/models.py deleted file mode 100644 index a59aefe2..00000000 --- a/postgresqleu/cmutuel/models.py +++ /dev/null @@ -1,18 +0,0 @@ -from django.db import models - -class CMutuelTransaction(models.Model): - opdate = models.DateField(null=False, blank=False) - valdate = models.DateField(null=False, blank=False) - amount = models.DecimalField(max_digits=10, decimal_places=2, null=False, blank=False) - description = models.CharField(max_length=300, null=False, blank=False) - balance = models.DecimalField(max_digits=10, decimal_places=2, null=False, blank=False) - - sent = models.BooleanField(null=False, blank=False, default=False) - - class Meta: - verbose_name='CMutuel Transaction' - verbose_name_plural='CMutuel Transactions' - ordering = ('-opdate',) - - def __unicode__(self): - return "%s: %s" % (self.opdate, self.description) diff --git a/postgresqleu/confreg/docsviews.py b/postgresqleu/confreg/docsviews.py index 21bd65c6..496d663f 100644 --- a/postgresqleu/confreg/docsviews.py +++ b/postgresqleu/confreg/docsviews.py @@ -1,5 +1,6 @@ from django.shortcuts import render from django.http import HttpResponseForbidden, Http404 +from django.conf import settings import codecs import os @@ -57,7 +58,7 @@ def docspage(request, urlname, page): if m: title = m.group(1) else: - title = 'PostgreSQL Europe Conference Administration' + title = '{0} Conference Administration'.format(settings.ORG_SHORTNAME) return render(request, 'confreg/admin_backend_docpage.html', { 'conference': conference, diff --git a/postgresqleu/confreg/jinjafunc.py b/postgresqleu/confreg/jinjafunc.py index a743b5c2..1645aab0 100644 --- a/postgresqleu/confreg/jinjafunc.py +++ b/postgresqleu/confreg/jinjafunc.py @@ -70,10 +70,12 @@ class ConfTemplateLoader(jinja2.FileSystemLoader): def __init__(self, conference, roottemplate): self.conference = conference self.roottemplate = roottemplate + pathlist = [] if conference and conference.jinjadir: - pathlist = [os.path.join(conference.jinjadir, 'templates'), JINJA_TEMPLATE_ROOT] - else: - pathlist = [JINJA_TEMPLATE_ROOT,] + pathlist.append(os.path.join(conference.jinjadir, 'templates')) + if getattr(settings, 'SYSTEM_SKIN_DIRECTORY', False): + pathlist.append(os.path.join(settings.SYSTEM_SKIN_DIRECTORY, 'template.jinja')) + pathlist.append(JINJA_TEMPLATE_ROOT) super(ConfTemplateLoader, self).__init__(pathlist) diff --git a/postgresqleu/confreg/pdfschedule.py b/postgresqleu/confreg/pdfschedule.py index a1e909b3..6d508c9e 100644 --- a/postgresqleu/confreg/pdfschedule.py +++ b/postgresqleu/confreg/pdfschedule.py @@ -4,6 +4,7 @@ from django.shortcuts import render from django import forms from django.http import HttpResponse from django.db.models import Q +from django.conf import settings from datetime import timedelta from collections import defaultdict @@ -40,8 +41,8 @@ def _setup_canvas(pagesize, orientation): ps = _get_pagesize(pagesize, orientation) (width, height) = ps canvas = Canvas(resp, pagesize=ps) - canvas.setAuthor("PostgreSQL Europe") - canvas._doc.info.producer = "PostgreSQL Europe Confreg System" + canvas.setAuthor(settings.ORG_NAME) + canvas._doc.info.producer = "{0} Confreg System".format(settings.ORG_SHORTNAME) return (width, height, canvas, resp) diff --git a/postgresqleu/settings.py b/postgresqleu/settings.py index f8528e75..52307a5c 100644 --- a/postgresqleu/settings.py +++ b/postgresqleu/settings.py @@ -1,5 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import os +import sys from exceptions import ImportError from django.conf import global_settings @@ -8,12 +10,12 @@ from django.conf import global_settings DEBUG = False +DEFAULT_EMAIL = 'webmaster@localhost' + ADMINS = ( - ('postgresql.eu webmaster', 'webmaster@postgresql.eu'), + ('webmaster', DEFAULT_EMAIL), ) -MANAGERS = ADMINS - DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', @@ -39,21 +41,15 @@ SITE_ID = 1 # to load the internationalization machinery. USE_I18N = False -# Absolute path to the directory that holds media. -# Example: "/home/media/media.lawrence.com/" -#MEDIA_ROOT = '/home/mha/djangolab/postgresqleu/media' - # URL that handles the media served from MEDIA_ROOT. Make sure to use a # trailing slash if there is a path component (optional in other cases). -# Examples: "http://media.lawrence.com", "http://example.com/media/" -#MEDIA_URL = '/media/' STATIC_URL = '/media/' STATICFILES_DIRS = ( 'media/', ) -# Make this unique, and don't share it with anybody. -SECRET_KEY = 'zya5w8sfr)i(7q^p3s50-3hk5&4=k(&z6+*1x!#lt#8h%!sizu' +# Must always be overridden in local_settings! +SECRET_KEY = '' MIDDLEWARE_CLASSES = [ 'django.middleware.common.CommonMiddleware', @@ -78,7 +74,6 @@ TEMPLATES = [{ 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'postgresqleu.util.context_processors.settings_context', - 'postgresqleu.util.context_processors.member_context', ], 'loaders': [ 'django.template.loaders.filesystem.Loader', @@ -101,43 +96,26 @@ INSTALLED_APPS = [ 'postgresqleu.countries', 'postgresqleu.paypal', 'postgresqleu.adyen', - 'postgresqleu.braintreepayment', - 'postgresqleu.trustlypayment', 'postgresqleu.newsevents', 'postgresqleu.confreg', 'postgresqleu.confsponsor', 'postgresqleu.confwiki', - 'postgresqleu.membership', - 'postgresqleu.elections', 'postgresqleu.mailqueue', 'postgresqleu.invoices', 'postgresqleu.accounting', - 'postgresqleu.cmutuel', 'postgresqleu.util', ] -INVOICE_SENDER_EMAIL="treasurer@postgresql.eu" -MEMBERSHIP_SENDER_EMAIL="webmaster@postgresql.eu" +# Emails +INVOICE_SENDER_EMAIL = DEFAULT_EMAIL +MEMBERSHIP_SENDER_EMAIL = DEFAULT_EMAIL -# Years of membership per payment -MEMBERSHIP_LENGTH=2 -# Cost for membership -MEMBERSHIP_COST=10 -# Function called to valide that country is acceptable for membership -MEMBERSHIP_COUNTRY_VALIDATOR=None # Currency parameter CURRENCY_ABBREV='EUR' CURRENCY_SYMBOL='€' CURRENCY_ISO='EUR' -# Module to build PDF invoices -INVOICE_PDF_BUILDER='postgresqleu.util.misc.pgeuinvoice' - -# Will be suffixed by " #nnn - <title>" -INVOICE_TITLE_PREFIX='PostgreSQL Europe Invoice' -INVOICE_FILENAME_PREFIX='pgeu' - # Process EU-specific VAT rules EU_VAT=False # Home country prefix for EU VAT @@ -145,26 +123,37 @@ EU_VAT_HOME_COUNTRY="FR" # On-line validate EU vat numbers EU_VAT_VALIDATE=False -# Change these when using sandbox! +##### Membership module ##### +# Years of membership per payment +MEMBERSHIP_LENGTH=2 +# Cost for membership +MEMBERSHIP_COST=10 +# Function called to valide that country is acceptable for membership +MEMBERSHIP_COUNTRY_VALIDATOR=None + +##### Invoice module ##### +INVOICE_PDF_BUILDER='postgresqleu.util.misc.pgeuinvoice' + +# Paypal sandbox configuration PAYPAL_BASEURL='https://www.paypal.com/cgi-bin/webscr' -PAYPAL_EMAIL='paypal@postgresql.eu' +PAYPAL_EMAIL=DEFAULT_EMAIL PAYPAL_PDT_TOKEN='abc123' PAYPAL_DEFAULT_SOURCEACCOUNT=1 PAYPAL_API_USER='someuser' PAYPAL_API_PASSWORD='secret' PAYPAL_API_SIGNATURE='secret' PAYPAL_SANDBOX=True -PAYPAL_REPORT_RECEIVER='paypal@postgresql.eu' -PAYPAL_DONATION_TEXT="PostgreSQL Europe" +PAYPAL_REPORT_RECEIVER=DEFAULT_EMAIL +PAYPAL_DONATION_TEXT="Paypal Donation" -# Change whether using sandbox or not +# Adyen configuration ADYEN_BASEURL='https://test.adyen.com/' ADYEN_CABASEURL='https://test-ca.adyen.com/' ADYEN_APIBASEURL='https://pal-test.adyen.com/' ADYEN_MERCHANTACCOUNT='whatever' ADYEN_SIGNKEY='foobar' ADYEN_SKINCODE='abc123' -ADYEN_NOTIFICATION_RECEIVER='somebody@somewhere.com' +ADYEN_NOTIFICATION_RECEIVER=DEFAULT_EMAIL ADYEN_NOTIFY_USER='adyennot' ADYEN_NOTIFY_PASSWORD='topsecret' ADYEN_REPORT_USER='someone' @@ -175,7 +164,7 @@ ADYEN_MERCHANTREF_PREFIX='PGEU' ADYEN_MERCHANTREF_REFUND_PREFIX='PGEUREFUND' # Account numbers used for auto-accounting -ENABLE_AUTO_ACCOUNTING=True +ENABLE_AUTO_ACCOUNTING=False ACCOUNTING_PAYPAL_INCOME_ACCOUNT=1932 ACCOUNTING_PAYPAL_FEE_ACCOUNT=6041 ACCOUNTING_PAYPAL_TRANSFER_ACCOUNT=1930 @@ -192,33 +181,32 @@ ACCOUNTING_MEMBERSHIP_ACCOUNT=3001 ACCOUNTING_DONATIONS_ACCOUNT=3601 ACCOUNTING_INVOICE_VAT_ACCOUNT=2610 -# CM balance fetching account -CM_USER_ACCOUNT=None -CM_USER_PASSWORD=None +##### Organisation configuration ##### +ORG_NAME="Not Configured Organisation" +ORG_SHORTNAME="NOTCONF" # Base URLs for generating absolute URLs -SITEBASE="https://www.postgresql.eu" +SITEBASE="http://localhost:8000" +# Set cookies to secure to explicitly force off in the local settings SESSION_COOKIE_SECURE=True +CSRF_COOKIE_SECURE=True DATETIME_FORMAT="Y-m-d H:i:s" -# Set to true in local_settings.py to enable braintree integrations +##### Enable/disable modules ##### +ENABLE_PG_COMMUNITY_AUTH=False +ENABLE_NEWS=True +ENABLE_MEMBERSHIP=False +ENABLE_ELECTIONS=False ENABLE_BRAINTREE=False -BRAINTREE_SANDBOX=False +ENABLE_TRUSTLY=False # Set to a username and password in local_settings.py to enable global http auth GLOBAL_LOGIN_USER='' GLOBAL_LOGIN_PASSWORD='' -# Set to true in local_settings.py to enable trustly integrations -ENABLE_TRUSTLY=False - -# Organization name -ORG_NAME="PostgreSQL Europe" -ORG_SHORTNAME="PGEU" - # Treasurer email address -TREASURER_EMAIL="treasurer@postgresql.eu" +TREASURER_EMAIL=DEFAULT_EMAIL # Twitter application keys TWITTER_CLIENT="" @@ -234,11 +222,69 @@ try: except ImportError, e: pass +PRELOAD_URLS=[] +if 'SYSTEM_SKIN_DIRECTORY' in globals(): + # A skin directory is configured! + # First, add it to templates + HAS_SKIN=True + + TEMPLATES[0]['DIRS'].insert(0, os.path.join(SYSTEM_SKIN_DIRECTORY, 'template/')) + + # Then, load a local settings file from there + sys.path.insert(0, os.path.join(SYSTEM_SKIN_DIRECTORY, 'code/')) + try: + from local_settings import * + except ImportError, e: + pass + # Then also load a skin settings file (URLs etc) + try: + from skin_settings import * + except ImportError, e: + pass + + if 'SKIN_APPS' in globals(): + INSTALLED_APPS.extend(SKIN_APPS) +else: + HAS_SKIN=False + + +if not SECRET_KEY: + raise Exception("SECRET_KEY must be configured!") + +# Reset admins based on confir params from skins and local +ADMINS = ( + (u'{0} webmaster'.format(ORG_NAME), DEFAULT_EMAIL), +) +MANAGERS = ADMINS + +##### Invoice module ##### +INVOICE_TITLE_PREFIX=u'{0} Invoice'.format(ORG_NAME) +INVOICE_FILENAME_PREFIX=ORG_SHORTNAME.lower() + + if GLOBAL_LOGIN_USER: MIDDLEWARE_CLASSES.append('postgresqleu.util.middleware.GlobalLoginMiddleware') +if ENABLE_PG_COMMUNITY_AUTH: + AUTHENTICATION_BACKENDS = ( + 'postgresqleu.auth.AuthBackend', + ) + LOGIN_URL="http://localhost:8002/accounts/login/" +4 +if ENABLE_ELECTIONS and not ENABLE_MEMBERSHIP: + raise Exception("Elections module requires membership module!") + +if ENABLE_MEMBERSHIP: + INSTALLED_APPS.append('postgresqleu.membership') + MIDDLEWARE_CLASSES.append('postgresqleu.util.context_processors.member_context') + +if ENABLE_ELECTIONS: + INSTALLED_APPS.append('postgresqleu.elections') + if ENABLE_BRAINTREE: + INSTALLED_APPS.append('postgresqleu.braintreepayment') + BRAINTREE_SANDBOX=False # Accounts to use for braintree transactions # Override in local_settings.py, and also configure # the public and secret keys there. @@ -248,11 +294,7 @@ if ENABLE_BRAINTREE: ACCOUNTING_BRAINTREE_FEE_ACCOUNT=6040 if ENABLE_TRUSTLY: + INSTALLED_APPS.append('postgresqleu.trustlypayment') + # Accounts to use for trustly transactions ACCOUNTING_TRUSTLY_ACCOUNT=1972 - - # Load the keys - with open('postgresqleu/trustly_public.pem', 'r') as f: - TRUSTLY_PUBLIC_KEY=f.read() - with open('postgresqleu/trustly_private.pem', 'r') as f: - TRUSTLY_PRIVATE_KEY=f.read() diff --git a/postgresqleu/trustlypayment/views.py b/postgresqleu/trustlypayment/views.py index bbf973ab..8cc5d351 100644 --- a/postgresqleu/trustlypayment/views.py +++ b/postgresqleu/trustlypayment/views.py @@ -49,7 +49,7 @@ def invoicepayment_secret(request, invoiceid, secret): r = t.deposit(enduserid, "{0}".format(invoice.id), invoice.total_amount, - 'PGEU#{0}'.format(invoice.id), + '{0}#{1}'.format(settings.ORG_SHORTNAME, invoice.id), '{0}/trustly_success/{1}/{2}/'.format(settings.SITEBASE, invoice.id, invoice.recipient_secret), '{0}/trustly_failure/{1}/{2}/'.format(settings.SITEBASE, invoice.id, invoice.recipient_secret), first, diff --git a/postgresqleu/urls.py b/postgresqleu/urls.py index 54ea8117..dadce838 100644 --- a/postgresqleu/urls.py +++ b/postgresqleu/urls.py @@ -2,6 +2,8 @@ from django.conf.urls import include, url from django.conf import settings from django.contrib import admin +import sys + import postgresqleu.static.views import postgresqleu.newsevents.views import postgresqleu.views @@ -15,9 +17,7 @@ import postgresqleu.confreg.pdfschedule import postgresqleu.confreg.volsched import postgresqleu.confreg.docsviews import postgresqleu.confwiki.views -import postgresqleu.membership.views import postgresqleu.account.views -import postgresqleu.elections.views import postgresqleu.invoices.views import postgresqleu.accounting.views import postgresqleu.paypal.views @@ -31,17 +31,19 @@ from postgresqleu.confreg.feeds import LatestEvents, ConferenceNewsFeed # from django.contrib import admin admin.autodiscover() - urlpatterns = [ +] + +if settings.HAS_SKIN: + from skin_urls import PRELOAD_URLS + urlpatterns.extend(PRELOAD_URLS) + +urlpatterns.extend([ # Frontpage and section headers url(r'^$', postgresqleu.views.index), url(r'^events/$', postgresqleu.views.eventsindex), url(r'^events/past/$', postgresqleu.views.pastevents), - url(r'^(events/services)/$', postgresqleu.static.views.static_fallback), url(r'^events/series/[^/]+-(\d+)/$', postgresqleu.views.eventseries), - url(r'^events/attendee/$', postgresqleu.views.attendee_events), - url(r'^news/archive/$', postgresqleu.newsevents.views.newsarchive), - url(r'news/[^/]+-(\d+)/$', postgresqleu.newsevents.views.newsitem), # Log in/log out url(r'^login/?$', postgresqleu.auth.login), @@ -50,11 +52,6 @@ urlpatterns = [ url(r'^accounts/logout/$', postgresqleu.auth.logout), url(r'^auth_receive/$', postgresqleu.auth.auth_receive), - # Feeds - url(r'^feeds/(?P<what>(news|user/[^/]+))/$', LatestNews()), - url(r'^feeds/conf/(?P<what>[^/]+)/$', ConferenceNewsFeed()), - url(r'^feeds/conf/(?P<confname>[^/]+)/json/$', postgresqleu.confreg.views.news_json), - # Conference management url(r'^events/(?P<confname>[^/]+)/register/(?P<whatfor>(self)/)?$', postgresqleu.confreg.views.register), url(r'^events/(?P<confname>[^/]+)/register/other/(?P<regid>(\d+)/)?$', postgresqleu.confreg.views.multireg), @@ -199,25 +196,9 @@ urlpatterns = [ url(r'^events/(register|bulkpay|feedback|schedule|sessions|talkvote|speakerprofile|callforpapers|reports)/([^/]+)/(.*)?$', postgresqleu.confreg.views.legacy_redirect), - # Membership management - url(r'^membership/$', postgresqleu.membership.views.home), - url(r'^membership/meetings/$', postgresqleu.membership.views.meetings), - url(r'^membership/meetings/(\d+)/$', postgresqleu.membership.views.meeting), - url(r'^membership/meetings/(\d+)/([a-z0-9]{64})/$', postgresqleu.membership.views.meeting_by_key), - url(r'^membership/meetings/(\d+)/proxy/$', postgresqleu.membership.views.meeting_proxy), - url(r'^membership/meetingcode/$', postgresqleu.membership.views.meetingcode), - url(r'^community/members/$', postgresqleu.membership.views.userlist), - url(r'^admin/membership/_email/$', postgresqleu.membership.views.admin_email), - # Accounts url(r'^account/$', postgresqleu.account.views.home), - # Elections - url(r'^elections/$', postgresqleu.elections.views.home), - url(r'^elections/(\d+)/$', postgresqleu.elections.views.election), - url(r'^elections/(\d+)/candidate/(\d+)/$', postgresqleu.elections.views.candidate), - url(r'^elections/(\d+)/ownvotes/$', postgresqleu.elections.views.ownvotes), - # Second generation invoice management system url(r'^invoiceadmin/$', postgresqleu.invoices.views.unpaid), url(r'^invoiceadmin/unpaid/$', postgresqleu.invoices.views.unpaid), @@ -266,7 +247,42 @@ urlpatterns = [ # Account info callbacks url(r'^accountinfo/search/$', postgresqleu.accountinfo.views.search), url(r'^accountinfo/import/$', postgresqleu.accountinfo.views.importuser), -] +]) + +if settings.ENABLE_NEWS: + urlpatterns.extend([ + url(r'^events/attendee/$', postgresqleu.views.attendee_events), + url(r'^news/archive/$', postgresqleu.newsevents.views.newsarchive), + url(r'news/[^/]+-(\d+)/$', postgresqleu.newsevents.views.newsitem), + # Feeds + url(r'^feeds/(?P<what>(news|user/[^/]+))/$', LatestNews()), + url(r'^feeds/conf/(?P<what>[^/]+)/$', ConferenceNewsFeed()), + url(r'^feeds/conf/(?P<confname>[^/]+)/json/$', postgresqleu.confreg.views.news_json), +]) + +if settings.ENABLE_MEMBERSHIP: + import postgresqleu.membership.views + urlpatterns.extend([ + # Membership management + url(r'^membership/$', postgresqleu.membership.views.home), + url(r'^membership/meetings/$', postgresqleu.membership.views.meetings), + url(r'^membership/meetings/(\d+)/$', postgresqleu.membership.views.meeting), + url(r'^membership/meetings/(\d+)/([a-z0-9]{64})/$', postgresqleu.membership.views.meeting_by_key), + url(r'^membership/meetings/(\d+)/proxy/$', postgresqleu.membership.views.meeting_proxy), + url(r'^membership/meetingcode/$', postgresqleu.membership.views.meetingcode), + url(r'^membership/members/$', postgresqleu.membership.views.userlist), + url(r'^admin/membership/_email/$', postgresqleu.membership.views.admin_email), +]) + +if settings.ENABLE_ELECTIONS: + import postgresqleu.elections.views + urlpatterns.extend([ + # Elections + url(r'^elections/$', postgresqleu.elections.views.home), + url(r'^elections/(\d+)/$', postgresqleu.elections.views.election), + url(r'^elections/(\d+)/candidate/(\d+)/$', postgresqleu.elections.views.candidate), + url(r'^elections/(\d+)/ownvotes/$', postgresqleu.elections.views.ownvotes), +]) if settings.ENABLE_TRUSTLY: import postgresqleu.trustlypayment.views @@ -295,7 +311,7 @@ urlpatterns.extend([ url(r'^admin/selectable/', include('selectable.urls')), # Admin site - url(r'^admin/', admin.site.urls), + url(r'^admin/', admin.site.urls), # Fallback - send everything nonspecific to the static handler url(r'^(.*)/$', postgresqleu.static.views.static_fallback), diff --git a/postgresqleu/util/context_processors.py b/postgresqleu/util/context_processors.py index 82ed0407..c834b8cb 100644 --- a/postgresqleu/util/context_processors.py +++ b/postgresqleu/util/context_processors.py @@ -6,8 +6,6 @@ from django.conf import settings from django.utils.functional import SimpleLazyObject -from postgresqleu.membership.models import Member - def settings_context(request=None): return { 'org_name': settings.ORG_NAME, @@ -18,6 +16,11 @@ def settings_context(request=None): 'currency_symbol': settings.CURRENCY_SYMBOL, 'is_debugging': settings.DEBUG, 'eu_vat': settings.EU_VAT, + 'modules': { + 'news': settings.ENABLE_NEWS, + 'membership': settings.ENABLE_MEMBERSHIP, + 'elections': settings.ENABLE_ELECTIONS, + } } def settings_context_unicode(request=None): @@ -29,6 +32,9 @@ def settings_context_unicode(request=None): c[k] = v.decode('utf8') return c +if settings.ENABLE_MEMBERSHIP: + from postgresqleu.membership.models import Member + def member_context(request=None): def _member(): if not request.user.is_authenticated(): diff --git a/template.jinja/base.html b/template.jinja/base.html index 26972460..599da575 100644 --- a/template.jinja/base.html +++ b/template.jinja/base.html @@ -10,7 +10,7 @@ <link rel="stylesheet" href="/media/css/pgeu.css"> - <title>{%block title%}{%endblock%} - PostgreSQL Europe</title> + <title>{%block title%}{%endblock%}</title> {%block extrahead%}{%endblock%} </head> <body> @@ -18,20 +18,13 @@ <div class="row justify-content-md-center"> <div class="col"> <nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light"> - <a class="navbar-brand p-0" href="/"> - <img class="logo" src="/media/img/elephant.png" alt="PostgreSQL Elephant Logo"> - </a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#pgNavbar" aria-controls="pgNavbar" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="pgNavbar"> <ul class="navbar-nav mr-auto"> <li class="nav-item p-2"><a href="/" title="Home">Home</a></li> - <li class="nav-item p-2"><a href="/about/" title="About">About</a></li> <li class="nav-item p-2"><a href="/events/" title="Events">Events</a></li> - <li class="nav-item p-2"><a href="/community/" title="Community">Community</a></li> - <li class="nav-item p-2"><a href="/financial/" title="Financial">Financial</a></li> - <li class="nav-item p-2"><a href="/membership/" title="Your membership">Your membership</a></li> <li class="nav-item p-2"><a href="/account/" title="Your account">Your account</a></li> </ul> </div> <!-- pgNavBar --> @@ -47,9 +40,8 @@ <footer id="footer"> <div class="container"> - <a href="/about/privacypolicy/">Privacy policy</a> | <a href="/about/contact/">Contact Us</a> | <a href="/about/trademarks/">Trademarks</a> <br/> - Copyright © 2008-{{ now|datetimeformat("%Y") }} PostgreSQL Europe + Copyright © 2008-{{ now|datetimeformat("%Y") }} {{ org_name }} </div> </footer> diff --git a/template/account/index.html b/template/account/index.html index 77b94c4e..5bce3bf4 100644 --- a/template/account/index.html +++ b/template/account/index.html @@ -12,22 +12,22 @@ receipts. </p> +{%if modules.membership%} {%if member%} <h3>Your membership</h3> <p> - Since you are a member of PostgreSQL Europe, you can view the details of your + Since you are a member of {{org_name}}, you can view the details of your <a href="/membership/">your membership</a>, including participating in meetings and elections. </p> {%else%} <h3>Become a member</h3> <p> - You are not currently a member of PostgreSQL Europe. Membership is - completely voluntary, but if you want to participate in the - organisation of advocacy around Europe, we encourage you - to <a href="/membership/">join</a>. + You are not currently a member of {{org_name}}. Membership is + voluntary, but we encourage you to <a href="/membership/">join</a>. </p> {%endif%} +{%endif%} <h3>Events</h3> <p> @@ -36,8 +36,8 @@ </p> <h4>Speaker profile</h4> <p> - Your shared PostgreSQL Europe <a href="/events/speakerprofile/">speaker profile</a> - is used for all events which are organized by PostgreSQL Europe. + Your shared {{org_name}} <a href="/events/speakerprofile/">speaker profile</a> + is used for all events which are organized by {{org_name}}. </p> {%endblock%} diff --git a/template/base.html b/template/base.html index 2a081a99..b6a9fe3b 100644 --- a/template/base.html +++ b/template/base.html @@ -10,10 +10,7 @@ <link rel="stylesheet" href="/media/css/pgeu.css"> - <link rel="alternate" type="application/rss+xml" title="PostgreSQL Europe News" href="/feeds/news/" /> - <link rel="alternate" type="application/rss+xml" title="PostgreSQL Europe Events" href="/feeds/events/" /> - - <title>{%block title%}{%endblock%} - PostgreSQL Europe</title> + <title>{%block title%}{%endblock%}</title> {%block extrahead%}{%endblock%} </head> <body> @@ -21,19 +18,13 @@ <div class="row justify-content-md-center"> <div class="col"> <nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light"> - <a class="navbar-brand p-0" href="/"> - <img class="logo" src="/media/img/elephant.png" alt="PostgreSQL Elephant Logo"> - </a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#pgNavbar" aria-controls="pgNavbar" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="pgNavbar"> <ul class="navbar-nav mr-auto"> <li class="nav-item p-2"><a href="/" title="Home">Home</a></li> - <li class="nav-item p-2"><a href="/about/" title="About">About</a></li> <li class="nav-item p-2"><a href="/events/" title="Events">Events</a></li> - <li class="nav-item p-2"><a href="/community/" title="Community">Community</a></li> - <li class="nav-item p-2"><a href="/financial/" title="Financial">Financial</a></li> <li class="nav-item p-2"><a href="/account/" title="Your account">Your account</a></li> </ul> </div> <!-- pgNavBar --> @@ -45,9 +36,7 @@ <footer id="footer"> <div class="container"> - <a href="/about/privacypolicy/">Privacy policy</a> | <a href="/about/contact/">Contact Us</a> | <a href="/about/trademarks/">Trademarks</a> | <a href="/donate/">Donate</a> - <br/> - Copyright © 2008-{% now "Y" %} PostgreSQL Europe + Copyright © 2008-{% now "Y" %} {{ org_name }} </div> </footer> diff --git a/template/events/index.html b/template/events/index.html index 3810f00b..17450873 100644 --- a/template/events/index.html +++ b/template/events/index.html @@ -3,25 +3,6 @@ {%block fullcontent%} <div class="col-md-7 contentwrap"> <h1>Events</h1> - <p> - PostgreSQL Europe hosts and supports a large number of events - around Europe. Some of these are arranged by the core PostgreSQL - Europe team, and others are run by other teams around the area, - supported by PostgreSQL Europe in different ways. - </p> - <p> - If you are interested in hosting an event in Europe and would - like some help, please check out our section - on <a href="/event/services/">Event services</a> to see in which - ways we can help you out! - </p> - <p> - As a PostgreSQL community organisation, <strong>all</strong> - PostgreSQL Europe hosted and supported events follow the PostgreSQL - <a href="https://www.postgresql.org/community/recognition/#conferences">Community - Conference Guidelines</a>, aimed at making sure there is a - fair treatment of all attendees, speakers and sponsors of the events. - </p> <h2>Upcoming events</h2> <p> The following events are currently planned to be held in the diff --git a/template/index.html b/template/index.html index e6e84ae6..ff9250e7 100644 --- a/template/index.html +++ b/template/index.html @@ -4,101 +4,11 @@ {%block maincontent%} <div class="row"> <div class="col-md-7 offset-md-2"> - <h1 class="text-center">PostgreSQL Europe</h1> + <h1 class="text-center">Welcome</h1> <p> - Welcome to PostgreSQL Europe, the "umbrella group" for PostgreSQL - User Groups in Europe and for users in regions that don't have a - local user group. Our goal is to promote the use of PostgreSQL - in Europe. We do this primarily by assisting local user groups - to promote the product locally through conferences and other - advocacy, as well as running European-wide conferences and other - activities. + Welcome to this site! It has not yet been skinned... </p> -{%if events%} - <h2 class="text-center">Upcoming events</h2> - <div id="eventCarousel" class="carousel slide col-md-10 offset-md-1" data-ride="carousel"> - <ol class="carousel-indicators"> -{%for e in events%} - <li data-target="#eventCarousel" data-slide-to="{{forloop.counter0}}"{%if forloop.first%} class="active"{%endif%}></li> -{%endfor%} - </ol> - <div class="carousel-inner"> -{%for event in events%} - <div class="carousel-item{%if forloop.first%} active{%endif%}"> - <img class="d-block w-100" src="{{event.promopicurl|default:"/media/img/default_event.jpg"}}" alt="{{event}}"> - <div class="carousel-caption eventCarouselCaption"> - <div class="info"> - <h3>{{event.conferencename}}</h3> - <h4>{{event.conferencedatestr}}</h4> - <h5>{{event.location}}</h5> - </div> - </div> -{%if event.active%} - <div class="carousel-caption eventCarouselBadge eventCarouselRegBadge d-none d-xl-block"> - <a href="/events/{{event.urlname}}/register/">Open for registration</a> - </div> -{%endif%} -{%if event.callforpapersopen%} - <div class="carousel-caption eventCarouselBadge eventCarouselCfpBadge d-none d-xl-block"> - <a href="/events/{{event.urlname}}/callforpapers/">Call for papers is open</a> - </div> -{%endif%} -{%if event.callforsponsorsopen%} - <div class="carousel-caption eventCarouselBadge eventCarouselCfsBadge d-none d-xl-block"> - <a href="/events/sponsor/signup/{{event.urlname}}/">Call for sponsors is open</a> - </div> -{%endif%} - </div> -{%endfor%} - </div> - <a class="carousel-control-prev" href="#eventCarousel" role="button" data-slide="prev"> - <span class="carousel-control-prev-icon" aria-hidden="true"></span> - <span class="sr-only">Previous</span> - </a> - <a class="carousel-control-next" href="#eventCarousel" role="button" data-slide="next"> - <span class="carousel-control-next-icon" aria-hidden="true"></span> - <span class="sr-only">Next</span> - </a> - </div> <!-- carousel --> -{%endif%} - - <div class="row" style="margin-top: 3em"> - <div class="col-md-5 offset-md-1"> - <h2 class="text-center">Latest news <a href="/feeds/news/"><i class="fa fa-rss"></i></a></h2> -{%for n in news%} - <div class="{%if forloop.counter > 2%}d-none d-lg-block{%endif%}"> - <h4 class="text-center"><a href="{{n.itemlink}}">{{n.title}}</a></h4> - <div class="text-center small"><i class="fa fa-clock-o"></i> {{n.datetime|date:"Y-m-d"}}</div> - <div class="newscontent"> - {{n.summaryhtml|safe|truncatewords_html:100}} - </div> -{%if n.summaryhtml|truncatewords_html:100 != n.summaryhtml%} - <a href="{{n.itemlink}}" class="btn btn-primary btn-sm">Read more</a> -{%endif%} - </div> -{%endfor%} - </div> - <div class="col-md-5 d-none d-lg-block"> - <h2 class="text-center">Latest tweets</h2> -<a class="twitter-timeline" href="https://twitter.com/postgresqleu?ref_src=twsrc%5Etfw">Tweets by postgresqleu</a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> - </div> - </div> - </div> - - <div class="col-md-3" id="rightbar"> - <h3>Upcoming events <a href="/feeds/events/"><i class="fa fa-rss"></i></a></h3> -{%if events%} -{%include "events/compacteventlist.inc"%} -{%else%} - <p>There are currently no scheduled upcoming events.</p> -{%endif%} - <h3>Our Event series</h3> - <ul> -{%for s in series%} -<li><a href="/events/series/{{s.name|slugify}}-{{s.id}}/">{{s.name}}</a></li> -{%endfor%} - </ul> </div> </div> {%endblock%} diff --git a/template/membership/index.html b/template/membership/index.html index c1d85bcf..21a9e81d 100644 --- a/template/membership/index.html +++ b/template/membership/index.html @@ -5,7 +5,7 @@ {%if not registration_complete%} <p> -You are not currently registered as a member of PostgreSQL Europe. You can do +You are not currently registered as a member of {{ org_name }}. You can do this using the form on this page. Please read through the <a href="/about/membership/">membership rules</a> before you register, and if you are uncertain about anything feel free to <a href="/about/contact/">contact us</a>. diff --git a/template/nav_about.html b/template/nav_about.html deleted file mode 100644 index 0c6a8c66..00000000 --- a/template/nav_about.html +++ /dev/null @@ -1,15 +0,0 @@ -{%extends "navbase.html"%} -{%block navsection%}About{%endblock%} -{%block navblock%} - <li><a href="/about/contact/">Contact us</a></li> - <li><a href="/about/membership/">Membership</a> - <ul> - <li><a href="/about/ga/">General assemblies</a></li> - </ul> - </li> - <li><a href="/about/statutes/">Statutes</a></li> - <li><a href="/about/elections/">Elections</a></li> - <li><a href="/about/board/">Board</a></li> - <li><a href="/about/privacypolicy/">Privacy policy</a></li> - <li><a href="/about/trademarks/">Trademarks</a></li> -{%endblock%} diff --git a/template/nav_account.html b/template/nav_account.html index 4b1e9c0d..69c5ab51 100644 --- a/template/nav_account.html +++ b/template/nav_account.html @@ -2,14 +2,18 @@ {%block navsection%}Your account{%endblock%} {%block navblock%} <li><a href="/invoices">Invoices</a></li> +{%if modules.membership%} {%if member%} </ul> <h2>Membership</h2> <ul> <li><a href="/membership/">Membership</a></li> +{%if modules.elections%} <li><a href="/elections/">Elections</a></li> +{%endif%} <li><a href="/membership/meetings/">Meetings</a></li> {%endif%} +{%endif%} </ul> <h2>Events</h2> <ul> diff --git a/template/nav_community.html b/template/nav_community.html deleted file mode 100644 index ac9c58d8..00000000 --- a/template/nav_community.html +++ /dev/null @@ -1,11 +0,0 @@ -{%extends "navbase.html"%} -{%block navsection%}Community{%endblock%} -{%block navblock%} -<li><a href="/community">Community</a></li> -<li><a href="/community/members">Members</a></li> -<li><a href="/elections">Elections</a></li> -<li><a href="/donate/">Donate</a> -<li><a href="/merchandise/">Merchandise</a></li> -<li><a href="/community/lists">Mailinglists</a></li> -<li class="last-child"><a href="https://wiki.postgresql.org/wiki/Category:PostgreSQL_Europe">Wiki category</a></li> -{%endblock%} diff --git a/template/nav_events.html b/template/nav_events.html index b2345c0a..d9cb9cf0 100644 --- a/template/nav_events.html +++ b/template/nav_events.html @@ -2,6 +2,4 @@ {%block navsection%}Events{%endblock%} {%block navblock%} <li><a href="/events/">Events</a></li> -<li><a href="/events/sponsor/">Event sponsorship</a></li> -<li><a href="/events/services/">Event services</a></li> {%endblock%} diff --git a/template/nav_financial.html b/template/nav_financial.html index 8cbe70a3..9af4cb57 100644 --- a/template/nav_financial.html +++ b/template/nav_financial.html @@ -1,7 +1,6 @@ {%extends "navbase.html"%} {%block navsection%}Financial{%endblock%} {%block navblock%} -<li><a href="/vat_faq/">VAT FAQ</a></li> <li><a href="/invoices/">Invoices</a></li> {%if user.is_superuser%} <li><a href="/invoiceadmin/">Invoice admin</a></li> diff --git a/template/pages/about.html b/template/pages/about.html deleted file mode 100644 index 11ecf74a..00000000 --- a/template/pages/about.html +++ /dev/null @@ -1,13 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}About{%endblock%} -{%block content%} -<h1>About PostgreSQL Europe</h1> - -<p> -PostgreSQL Europe is an "umbrella group" for all user groups in Europe. -Our ideas is that all the PostgreSQL national European groups have -somehow the same needs and must share their experiences, but also -their resources. This way, we will help each other to grow, and all -newcomers to set up their own national PostgreSQL users group. -</p> -{%endblock%} diff --git a/template/pages/about/board.html b/template/pages/about/board.html deleted file mode 100644 index e7249d58..00000000 --- a/template/pages/about/board.html +++ /dev/null @@ -1,16 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}Board of directors{%endblock%} -{%block content%} -<h1>Board of directors</h1> - -<p> -As of 2017-02-14, the board consist of the following directors: -</p> -<ul> - <li><b>President:</b> Magnus Hagander, Sweden</li> - <li><b>Vice-president:</b> Andreas Scherbaum, Germany</li> - <li><b>Treasurer:</b> Guillaume Lelarge, France</li> - <li><b>Vice-treasurer:</b> Gülçin Yıldırım, Turkey</li> - <li><b>Secretary:</b> Dave Page, United Kingdom</li> -</ul> -{%endblock%} diff --git a/template/pages/about/contact.html b/template/pages/about/contact.html deleted file mode 100644 index 8ddb77e9..00000000 --- a/template/pages/about/contact.html +++ /dev/null @@ -1,22 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}Contact{%endblock%} -{%block content%} -<h1>Contact</h1> - -<p> -To contact the board of directors, please send an email to -<b>board(at)postgresql.eu</b>. You can also contact -<a href="/about/board">one of the directors</a> directly. -</p> - -<p> -Also, if you want your communication to be public, we encourage -the use of the <a href="/community/lists">open mailinglist</a> when -possible. -</p> -<p> -PostgreSQL Europe is <a href="/vat_faq/">VAT registered</a> in France. For all invoices -please quote our VAT number: FR36823839535 -</p> - -{%endblock%} diff --git a/template/pages/about/ega/201704/financialreport.html b/template/pages/about/ega/201704/financialreport.html deleted file mode 100644 index fbf3c4d0..00000000 --- a/template/pages/about/ega/201704/financialreport.html +++ /dev/null @@ -1,338 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2017 Exceptional General Assembly - Financial report{%endblock%} -{%block content%} -<h1>2017 Exceptional General Assembly - Financial report</h1> - -<h2 >Assets</h2> - -<table> - <tr> - <td><strong>Accounts</strong></td> - <td><strong>2016-01-01</strong></td> - <td><strong>2016-12-31</strong></td> - <td><strong>Difference</strong></td> - </tr> - <tr> - <td>Crédit Mutuel checking account</td> - <td align="right"> 38,705.77</td> - <td align="right"> 77,418.89</td> - <td align="right"> 38,713.12</td> - </tr> - <tr> - <td>Crédit Mutuel saving account</td> - <td align="right"> 60,740.61</td> - <td align="right"> 61,284.35</td> - <td align="right"> 543.74</td> - </tr> - <tr> - <td>Paypal account</td> - <td align="right"> 6,399.41</td> - <td align="right"> 7,785.42</td> - <td align="right"> 1,386.01</td> - </tr> - <tr> - <td>Adyen account</td> - <td align="right"> 500.00</td> - <td align="right"> 500.00</td> - <td align="right"> 0.00</td> - </tr> - <tr> - <td>Pending creditcard payments</td> - <td align="right"> 256.45</td> - <td align="right"> 256.45</td> - <td align="right"> 0.00</td> - </tr> - <tr> - <td>Pending taxes</td> - <td align="right"></td> - <td align="right">-30,983.00</td> - <td align="right">-30,983.00</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right"><em>106,602.24</em></td> - <td align="right"><em>116,262.11</em></td> - <td align="right"><em> 9,659.87</em></td> - </tr> -</table> -<p>The <a href="/media/pdf/pgeu_balance_2017.pdf">full balance report</a> is also available.</p> - -<p> -While the overall goal of PostgreSQL Europe is to break even, we did in 2016 -see the biggest net gain since the start of operation. This is mostly due to a -lower cost level in Estonia for PGConf.EU and a still big number of sponsors. -This being said, we're beginning to pay taxes, and this lowers our net gain. -The good thing is we still have a net gain. -</p> - -<h2>Major items</h2> - -<h3>Activities</h3> -<p> -The savings account which acts as a buffer to cover unexpected costs has not -been used during 2016 since all events have generated satisfactory financial -results (exceeding or hitting budget) due to good sponsor incomes. The only -transaction during 2016 was an interest income of 543.74€. As the events grow -larger - PGConf.EU 2016 was our biggest event to date - and the number of -events increase, the importance of this buffer remains. -</p> - -<p> -Our administrative backend software which powers both our financial reporting -as well as the events was again further improved ensuring safe operation of -our events. -</p> - -<p> -According to the French tax agency, we are required to pay taxes. The French -tax agency has also decided to require that we are VAT registered. Usually, a -french company (or NPO which has taxes to pay) cannot recover any deductible -VAT if there's no mention of its intra-community VAT on the invoices for all -countries except France. For us, this means the whole year of 2016. In the -specific case of Estonia, the amount of deductible VAT is so huge that the -accountants will attempt to convince the french tax agency to deduct it. It's -a long shot but it's worth it. They won't try that on the hotel bills in -Belgium and Finland because the amounts are way too low. The year 2017 will be -different from the year 2016 because our intracommunity VAT will be on all EU -invoices. In such a case, VAT is not charged by our suppliers, and there will -be no more of this problem of VAT deduction. -</p> - -<p> -Anyway, we worked hard with the accountant firm to see how much we have to -pay. The results of this work are available at the end of this report. -</p> - -<p> -Merchandise sales are increasing year over year with 2016 being no exception. -In total, sales were up 9% from 2015 reaching a total of 5,065.26€. -</p> - -<p> -Donations were much higher than last year, thanks to the book royalties. -</p> - -<h3>Income/Expenses</h3> - -<p> - Important items are summarized here, but - the <a href="/media/pdf/pgeu_results_2017.pdf">full results report</a> - is also available. -</p> - -<table> - <tr> - <td><strong>Items</strong></td> - <td align="right"><strong>Income</strong></td> - <td align="right"><strong>Expenses</strong></td> - <td align="right"><strong>Final results</strong></td> - </tr> - <tr> - <td>Membership</td> - <td align="right">600.00</td> - <td align="right">0</td> - <td align="right">600.00</td> - </tr> - <tr> - <td>Donations</td> - <td align="right">5,631.30</td> - <td align="right">0.00</td> - <td align="right">5,631.30</td> - </tr> - <tr> - <td>Conferences</td> - <td align="right">173,969.00</td> - <td align="right">-128,609.49</td> - <td align="right">45,359.51</td> - </tr> - <tr> - <td>Merchandise</td> - <td align="right">5,065.26</td> - <td align="right">-7,182.31</td> - <td align="right">-2,117.05</td> - </tr> - <tr> - <td>Financial</td> - <td align="right">543,74</td> - <td align="right">-2,811.90</td> - <td align="right">-2,268.16</td> - </tr> - <tr> - <td>Insurance</td> - <td align="right">0.00</td> - <td align="right">-553.68</td> - <td align="right">-553.68</td> - </tr> - <tr> - <td>Taxes</td> - <td align="right">0.00</td> - <td align="right">-30,983.00</td> - <td align="right">-30,983.00</td> - </tr> - <tr> - <td>Other</td> - <td align="right">0.00</td> - <td align="right">-4,987.57</td> - <td align="right">-4,987.57</td> - </tr> - <tr> - <td><em>Total</em></td> - <td></td> - <td></td> - <td align="right"><em>10,681.35</em></td> - </tr> -</table> - -<p> -Once again, we gain a lot this year because of a cheaper location, and bigger events, though the net gain is reduced by our taxes. -</p> - -<p> -The financial results for our events can be seen broken down per conference in the table below. -</p> - -<table> - <tr> - <td><strong>Event</strong></td> - <td align="right"><strong>Income</strong></td> - <td align="right"><strong>Expenses</strong></td> - <td align="right"><strong>Final results</strong></td> - </tr> - <tr> - <td>FOSDEM/PGDay 2016</td> - <td align="right">5,370.00</td> - <td align="right">776.07</td> - <td align="right">4,593.93</td> - </tr> - <tr> - <td>Nordic PGDay 2016</td> - <td align="right">7,920.00</td> - <td align="right">9,671.05</td> - <td align="right">-1,751.05</td> - </tr> - <tr> - <td>PGDay Paris 2016</td> - <td align="right">6,070.00</td> - <td align="right">2,169.56</td> - <td align="right">3,900.44</td> - </tr> - <tr> - <td>PGConf.EU 2016</td> - <td align="right">155,629.00</td> - <td align="right">108,329.46</td> - <td align="right">47,299.54</td> - </tr> -</table> - -<p> -FOSDEM, Nordic PGDay, and PGConf.EU 2016 are events held early in the year and -thus have transactions on both this and next year's report. Complete sums for -FOSDEM 2016 as well as Nordic PGDay 2016 are listed below broken down per year. -</p> - -<table> - <tr> - <td colspan="2"><strong>FOSDEM PGDay 2016</strong></td> - </tr> - <tr> - <td>Final Result 2015</td> - <td align="right">-8,763.69</td> - </tr> - <tr> - <td>Final Result 2016</td> - <td align="right">4,593.93</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right">-4,169.76</td> - </tr> - - <tr> - <td colspan="2"><strong>Nordic PGDay 2016</strong></td> - </tr> - <tr> - <td>Final Result 2015</td> - <td align="right">2,400.00</td> - </tr> - <tr> - <td>Final Result 2016</td> - <td align="right">-1,751.05</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right">648.95</td> - </tr> - - <tr> - <td colspan="2"><strong>PGConf.EU 2016</strong></td> - </tr> - <tr> - <td>Final Result 2015</td> - <td align="right">-565.50</td> - </tr> - <tr> - <td>Final Result 2016</td> - <td align="right">47,299.54</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right">46,734.04</td> - </tr> -</table> - -<p>Our taxes are broken down in the table below.</p> - -<table> - <tr> - <td><strong>Taxes</strong></td> - <td align="right"><strong>Due</strong></td> - <td align="right"><strong>Deductible</strong></td> - </tr> - <tr> - <td>On net gain</td> - <td align="right">6,014.00</td> - <td align="right">0.00</td> - </tr> - <tr> - <td>EU VAT</td> - <td align="right">1,451.00</td> - <td align="right">1,451.00</td> - </tr> - <tr> - <td>French VAT</td> - <td align="right">10,680.00</td> - <td align="right">974.00</td> - </tr> - <tr> - <td>Belgium VAT</td> - <td align="right">642.00</td> - <td align="right">0.00</td> - </tr> - <tr> - <td>Finnish VAT</td> - <td align="right">658.00</td> - <td align="right">0.00</td> - </tr> - <tr> - <td>Estonian VAT</td> - <td align="right">13,963.00</td> - <td align="right">13,415.00</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right">33,408.00</td> - <td align="right">15,840.00</td> - </tr> -</table> - -<p> -The total amount of taxes we need to pay is 17,568 Euros, except we're not -sure we can get the VAT back from Estonia. So, all we can say for now is that -we owe 30,983 Euros, and we may get back 13,415 Euros from the Estonian VAT. -</p> - -<p> -Even if we can't get it back, the net total gain of 2016 is 10,681.35 Euros. -</p> - -{%endblock%} diff --git a/template/pages/about/ega/201704/minutes.html b/template/pages/about/ega/201704/minutes.html deleted file mode 100644 index ae26f049..00000000 --- a/template/pages/about/ega/201704/minutes.html +++ /dev/null @@ -1,72 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2017 General Assembly - Minutes{%endblock%} -{%block content%} -<h1>2017 EXCEPTIONAL GENERAL ASSEMBLY MINUTES</h1> - -<p> -Association PostgreSQL Europe<br/> -13 rue du Square Carpeaux<br/> -75018 PARIS<br/> -</p> - -<h2>People attending the meeting</h2> - -<ul> - <li>Andreas Scherbaum (ads)</li> - <li>Christoph Moench-Tegeder (cmt_)</li> - <li>Daniel Gustafsson (dege)</li> - <li>Eric Veldhuyzen ([Terra])</li> - <li>Guillaume Lelarge (gleu)</li> - <li>Julien Rouhaud (rjuju), proxy form</li> - <li>Magnus Hagander (magnush)</li> - <li>Markus Wanner (markus_wanner)</li> - <li>Robert Ivens (Possible)</li> - <li>Stephanie Janine Schoning (stefanie_janine)</li> - <li>Tobias Bussmann (TobiasBussmann)</li> -</ul> - -<p>The first GA, which happened on April, 3rd, 2017, didn't meet the quorum. These minutes is for the second GA meeting. As such, no quorum is needed. Thus, the meeting is valid.</p> - -<p>Magnus Hagander is the president and Guillaume Lelarge is the secretary of the GA meeting.</p> - -<p>Meeting starts at 21:03 (2017-04-10), on the IRC network freenode.net, channel #pgeu-ega2017. Language is English, the report is available in English and French.</p> - -<p>The agenda is:</p> -<ul> - <li>financial report for 2016.</li> -</ul> - -<h2>Financial report</h2> - -<p>Guillaume Lelarge gave a brief summarization of the Financial report.</p> - -<p> -Several questions were asked: -</p> -<ul> - <li>The taxes in Estonia are already paid, question is if we can get anything back, right? - <ul><li>That's exactly it.</li></ul></li> - <li>We also have to pay the other side of the VAT equation don't we? as in we have to pay the VAT that we supposedly charged? - <ul><li>Yes.</li></ul></li> - <li>I was under the impression that the 13963 was already paid to the hotel? - <ul><li>No, that's the VAT that people paid to us, that we have to pay to the tax agency.</li></ul></li> - <li>So, that's the conference fee? - <ul><li>Yes, it's fictional VAT on the conference fees.</li></ul></li> - <li>"Donations were much higher than last year, thanks to the book royalties." Which books? - <ul><li>Mostly Packt Publishing's.</li></ul></li> - <li>Does that mean the the conference fee for 2017 will go up because there has the tax to be included? - <ul><li>We don't 100% know yet. In theory, no because we should also be able to deduct our expenses, in which case it should not change. But we're going to have to wait for the outcome of this claiming back of the estonian VAT to figure that out. If we're unable to claim the VAT back on our conference expenses, then yes, we're going to have to raise prices to cover the difference. If we can reasonably expect to be able to claim them back, we won't have to.</li></ul></li> -</ul> - -<p>Votes: 10 voted Yes out of 10 present in the channel.</p> - -<p>Thus, the financial report is approved.</p> - -<p>Meeting ends at 21:26.</p> - -<ul> -<li>Magnus Hagander, President</li> -<li>Guillaume Lelarge, Treasurer</li> -</ul> - -{%endblock%} diff --git a/template/pages/about/elections.html b/template/pages/about/elections.html deleted file mode 100644 index 7414088c..00000000 --- a/template/pages/about/elections.html +++ /dev/null @@ -1,85 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}Elections{%endblock%} -{%block content%} -<h1>Elections</h1> - -<p> -Elections will normally be held every year, around the beginning of February. -The board will announce the exact dates for each year by email to the -pgeu-general mailinglist. -</p> - -<h2>Timeline</h2> -<p> -The general timeline for elections is as follows: -</p> -<ul> - <li>T-3 weeks: Nominations open</li> - <li>T-1 week: Nominations close</li> - <li>T: Presentation of candidates published, voting opens</li> - <li>T+2 weeks: Voting closes, results announced</li> -</ul> - -<h2>Nominations</h2> -<p> -In order to be elected, a candidate must be nominated during the nomination -period. Any member can nominate any number of other members, including him or -herself. This nomination must be seconded by one other member. The nominee -must also accept this nomination before the nomination period has expired. -</p> -<p> -Each nominee must also provide a short presentation of him/herself, including -any information he/she considers relevant for voters to know. This must be -provided to the election officials before the end of the nomination period. -</p> -<p> -These presentations will be collected by the election officials and published -to the mailinglist when the voting begins. Specifically, the nominees are not -allowed to publish it themselves to the mailinglist or on a personal website, -blog or similar. Failure to comply with this will lead to disqualification from -the elections. -</p> - - -<h2>Who can vote</h2> -<p> -All members of PostgreSQL Europe can vote, provided they have been a -confirmed member for at least four weeks before the start of the elections. -</p> - -<h2>Voting</h2> -<ul> - <li>Voting will take place using a web application deployed on - <a href="https://www.postgresql.eu/elections">www.postgresql.eu</a></li> - <li>Each voter will vote for <i>all</i> candidates, ranking them in order - of preference. The score of the votes is linear with 1 representing - the last choice, each step increasing the score by 1.</li> - <li>Each candidate gets a score based on the sum of all votes for the candidate.</li> - <li>The winner(s) of the election will be the top entry/entries, depending on - how many positions are up for election.</li> - <li>In the event of a tie, the tied candidates will be asked if one will accept - stepping down. If none agrees to this, a re-election will be held including - only these candidates. This re-election will commence as soon as possible - and run for a period of <b>one</b> week.</li> -</ul> - -<h2>Vote secrecy</h2> -<ul> - <li>A central record will be kept of all votes, including who voted for who.</li> - <li>The non-aggregate information will <i>only</i> be made available to the - election officers, and only in the event of suspicion of incorrect - voting or counting.</li> - <li>Specifically, this information will <i>never</i> be made public.</li> - <li>The non-aggregate information is not encrypted on the server, and may as such - be seen by a member of the postgresql.org sysadmin team during the course of - their normal duties.</li> -</ul> - -<h2>Election results</h2> -<ul> - <li>Election results will be published as soon as possible, at the latest - 7 days after the close of the voting.</li> - <li>Aggregate vote counts will be published for all candidates.</li> -</ul> - -{%endblock%} diff --git a/template/pages/about/ga.html b/template/pages/about/ga.html deleted file mode 100644 index c149fd98..00000000 --- a/template/pages/about/ga.html +++ /dev/null @@ -1,95 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}General Assemblies{%endblock%} -{%block content%} -<h1>General Assemblies</h1> - -<h2>2018 General Assembly</h2> -<p> -The 2018 General Assembly will be held on IRC. -</p> - -<p> -You can read the various related documents: -</p> -<ul> - <li><a href="/about/ga/2018/activitiesreport">Activities report</a>,</li> - <li><a href="/about/ga/2018/financialreport">Financial report</a>,</li> - <li><a href="/about/ga/2018/minutes">Minutes</a>,</li> - <li><a href="/media/pdf/ga_minutes_2018_en.pdf">Minutes (PDF format, countersigned)</a>.</li> -</ul> - -<h2>2017 Exceptional General Assembly</h2> -<p> -The 2017 Exceptional General Assembly has been held on IRC. -</p> - -<p> -You can read the various related documents: -</p> -<ul> - <li><a href="/about/ega/201704/financialreport">Financial report</a>,</li> - <li><a href="/about/ega/201704/minutes">Minutes</a>,</li> - <li><a href="/media/pdf/ega_minutes_201704_en.pdf">Minutes (PDF format, countersigned)</a>.</li> -</ul> - -<h2>2017 General Assembly</h2> -<p> -The 2017 General Assembly has been held on IRC. -</p> - -<p> -You can read the various related documents: -</p> -<ul> - <li><a href="/about/ga/2017/activitiesreport">Activities report</a>,</li> - <li><a href="/about/ga/2017/financialreport">Financial report</a>,</li> - <li><a href="/about/ga/2017/minutes">Minutes</a>,</li> - <li><a href="/media/pdf/ga_minutes_2017_en.pdf">Minutes (PDF format, countersigned)</a>.</li> -</ul> - -<h2>2016 General Assembly</h2> -<p> -The 2016 General Assembly has been held on IRC. -</p> - -<p> -You can read the various related documents: -</p> -<ul> - <li><a href="/about/ga/2016/activitiesreport">Activities report</a>,</li> - <li><a href="/about/ga/2016/financialreport">Financial report</a>,</li> - <li><a href="/about/ga/2016/minutes">Minutes</a>,</li> - <li><a href="/media/pdf/ga_minutes_2016_en.pdf">Minutes (PDF format, countersigned)</a>.</li> -</ul> - -<h2>2015 General Assembly</h2> -<p> -The 2015 General Assembly has been held on IRC. -</p> - -<p> -You can read the various related documents: -</p> -<ul> - <li><a href="/about/ga/2015/activitiesreport">Activities report</a>,</li> - <li><a href="/about/ga/2015/financialreport">Financial report</a>,</li> - <li><a href="/about/ga/2015/minutes">Minutes</a>,</li> - <li><a href="/media/pdf/ga_minutes_2015_en.pdf">Minutes (PDF format, countersigned)</a>.</li> -</ul> - -<h2>2014 General Assembly</h2> -<p> -The 2014 General Assembly has been held on IRC. -</p> - -<p> -You can read the various related documents: -</p> -<ul> - <li><a href="/about/ga/2014/activitiesreport">Activities report</a>,</li> - <li><a href="/about/ga/2014/financialreport">Financial report</a>,</li> - <li><a href="/about/ga/2014/minutes">Minutes</a>,</li> - <li><a href="/media/pdf/ga_minutes_2014_en.pdf">Minutes (PDF format, countersigned)</a>.</li> -</ul> - -{%endblock%} diff --git a/template/pages/about/ga/2014/activitiesreport.html b/template/pages/about/ga/2014/activitiesreport.html deleted file mode 100644 index e804b314..00000000 --- a/template/pages/about/ga/2014/activitiesreport.html +++ /dev/null @@ -1,38 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2014 General Assembly - Activities report{%endblock%} -{%block content%} -<h1>2014 General Assembly - Activities report</h1> - -<h2>What has been done</h2> - -<h3>Financial/Administration</h3> - -<p>See the <a href="/about/ga/2014/financialreport/">Financial report</a>, section "Activities".</p> - -<h3>FOSDEM+PGDay</h3> - -<p>That was the first time we had a PGDay before FOSDEM. It was quite successful: one track, one day, 7 talks, 50 registrations.</p> - -<p>The FOSDEM event itself was successful as well: lots of people visited our booth, lots of people asked questions, bought merchandise, and attended the 8 sessions we had in the devroom.</p> - -<h3>PGConf.eu</h3> - -<p>The venue was much appreciated by our approximately 250 attendees, as were the talks.</p> - -<p>The feedback shows more of the details, and is posted at: <a href="http://blog.hagander.net/archives/216-PGConf.EU-2013-feedback-results.html">http://blog.hagander.net/archives/216-PGConf.EU-2013-feedback-results.html</a>.</p> - -<h3>PGConf.de 2013</h3> - -<p>The venue was the same as in 2011 (there was no pgconf.de 2012), although it's getting too small now. We had way more than 100 visitors and once again we had to close the registration. Talks were great and we received very good feedback. Visitors ask for additional days and also a separate training day.</p> - -<h2>Futures events</h2> - -<p>We have pretty much the same set as last year... but we have a new event coming up, so far.</p> - -<p>pgday/FOSDEM is almost upon us, at the end of January in Brussels, Belgium. Registration is opened and the schedule has been published. Don't forget to join!</p> - -<p>The new event is the Nordic PGDay in Stockholm, Sweden. The call of paper is ongoing, and early bird registration is open. Please submit a talk, and join us!</p> - -<p>We also started the work for next years PGConf.EU event. There is not much news on it yet, except that we are targeting the same timeframe as previous years, in October/November. We will publish more information as soon as we have it.</p> - -{%endblock%} diff --git a/template/pages/about/ga/2014/financialreport.html b/template/pages/about/ga/2014/financialreport.html deleted file mode 100644 index 9605b3e5..00000000 --- a/template/pages/about/ga/2014/financialreport.html +++ /dev/null @@ -1,118 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2014 General Assembly - Financial report{%endblock%} -{%block content%} -<h1>2014 General Assembly - Financial report</h1> - -<h2 >Assets</h2> - -<table> - <tr> - <td><strong>Accounts</strong></td> - <td><strong>2013-01-01</strong></td> - <td><strong>2013-12-31</strong></td> - <td><strong>Difference</strong></td> - </tr> - <tr> - <td>BNP checking account</td> - <td align="right">59,092.83</td> - <td align="right">57.14</td> - <td align="right">−59,035.69</td> - </tr> - <tr> - <td>Crédit Mutuel checking account</td> - <td align="right"></td> - <td align="right">17,279.18</td> - <td align="right">+17,279.18</td> - </tr> - <tr> - <td>Crédit Mutuel saving account</td> - <td align="right"></td> - <td align="right">60,020.00</td> - <td align="right">+60,020.00</td> - </tr> - <tr> - <td>Paypal account</td> - <td align="right">1,246.72</td> - <td align="right">4,700.25</td> - <td align="right">+3,453.53</td> - </tr> - <tr> - <td>Adyen account</td> - <td align="right"></td> - <td align="right">500.00</td> - <td align="right">+500.00</td> - </tr> - <tr> - <td>Total</td> - <td align="right">60,339.55</td> - <td align="right">82,556.57</td> - <td align="right">+22,217.02</td> - </tr> -</table> - -<p>The <a href="/media/pdf/pgeu_balance_2014.pdf">full balance report</a> is also available.</p> - -<h2>Major items</h2> - -<h3>Activities</h3> - -<p>PostgreSQL Europe bank was the BNP since the beginning of the organization. Unfortunately, they were hard to work with: no English website, a quite-hard-to-reach manager, quite expensive, and more. So we worked on finding another bank. We finally chose Crédit Mutuel: multilanguage website, lots of interesting features on their webapp to deal with the account, a manager quick at answering emails and phone calls, and a smaller fee. We opened an account there in April, and transferred our existing funds. In November, we asked BNP to close the account, which is still ongoing, but should be done early in February.</p> - -<p>The Crédit Mutual bank manager offered us to open a saving account, which we did. This accounts give us a better interest rate, while still giving us easy access to the funds when needed. We keep enough money on the checking account to cover all except the largest transactions, which are the payments to the PGConf.eu venues and typically happen during the summer.</p> - -<p>We have now a new policy to deal with the Paypal account. We usually have between 5,000 and 10,000 Euro in it. When it gets to 10k, 5k is transfered to the Crédit Mutuel checking account. We don't need more than 5k in the Paypal account. We pay some things with it, but not much, and no big payments.</p> - -<p>We have also started working with Adyen as a creditcard payment processor. This gives us significantly lower fees than Paypal, and also takes care of the complaints we've had from many members and conference attendees that don't want to work with Paypal. We keep Paypal as an option, of course, for those that prefer it.</p> - -<p>Finally, we coded an accounting webapp. It's completely integrated with PostgreSQL Europe website. Paypal and Adyen payments are automatically taken into account. This makes it possible for us to do more detailed analysis and reporting of our finances.</p> - -<h3>Income/Expenses</h3> - -<p>Important items are summarized here, but the <a href="/media/pdf/pgeu_results_2014.pdf">full results report</a> is also available.</p> - - <table> - <tr> - <td><strong>Items</strong></td> - <td><strong>Income</strong></td> - <td><strong>Expenses</strong></td> - <td><strong>Final results</strong></td> - </tr> - <tr> - <td>Membership</td> - <td align="right">390</td> - <td align="right">0</td> - <td align="right">390</td> - </tr> - <tr> - <td>Donations and book royalties</td> - <td align="right">4255</td> - <td align="right">0</td> - <td align="right">4255</td> - </tr> - <tr> - <td>FOSDEM 2013</td> - <td align="right">2967</td> - <td align="right">830</td> - <td align="right">2137</td> - </tr> - <tr> - <td>pgconf.eu 2013</td> - <td align="right">86238</td> - <td align="right">66336</td> - <td align="right">19902</td> - </tr> - <tr> - <td>pgconf.de 2013</td> - <td align="right">12220</td> - <td align="right">7112</td> - <td align="right">5108</td> - </tr> - </table> - -<p>Memberships are a really small part of our incomes. Even donations are doing better. On events, sponsorships and attendance fees are mostly equal (47k and 51k), and we are clearly dependent on both to cover our expenses. Likewise, our largest expenses are the conference venues, by far.</p> - -<h2>Conclusion</h2> - -<p>2013 has seen a lot of work on the financial part of the organization. We moved to another bank, opened a saving account, got some real capacities regarding payments with debit/credit card, and coded an accounting webapp. That being said, there are still a lot of work ahead of us.</p> - -{%endblock%} diff --git a/template/pages/about/ga/2014/minutes.html b/template/pages/about/ga/2014/minutes.html deleted file mode 100644 index b7783fb9..00000000 --- a/template/pages/about/ga/2014/minutes.html +++ /dev/null @@ -1,127 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2014 General Assembly - Activities report{%endblock%} -{%block content%} -<h1>2014 GENERAL ASSEMBLY MINUTES</h1> - -<p> -Association PostgreSQL Europe<br/> -13 rue du Square Carpeaux<br/> -75018 PARIS<br/> -</p> - -<h2>People attending the meeting</h2> - -<ul> - <li>Andreas Scherbaum</li> - <li>David Page</li> - <li>Jonathan S. Katz</li> - <li>Markus Winand</li> - <li>Stefan Kaltenbrunner</li> - <li>Patryk Kordylewski</li> - <li>Roland Sonnenschein</li> - <li>Sven Schoradt</li> - <li>Magnus Hagander</li> - <li>Harald Armin Massa</li> - <li>Tomas Vondra</li> - <li>Eric Veldhuyzen</li> - <li>Stefanie Janine Stölting</li> - <li>Pavel Golub</li> - <li>Tobias Bussmann</li> - <li>Guillaume Lelarge</li> - <li>Damien Clochard, represented by Guillaume Lelarge</li> - <li>Heikki Linnakangas</li> - <li>Gunnar "Nick" Bluth</li> - <li>Bruno Friedmann</li> -</ul> - -<p> -The first GA, which happened on January, 22nd, 2013, didn't meet the quorum. These minutes is for the second GA meeting. As such, no quorum is needed. Thus, the meeting is valid.</p> - -<p>Magnus Hagander is the president of the GA meeting, Guillaume Lelarge is the secretary.</p> - -<p>Meeting starts at 09:04 (2014-01-29), on the IRC network freenode.net, channel #pgeu-ga. Language is english, the report is available in english and french.</p> - -<p> -The agenda is: -<ul> - <li>activities report for 2013,</li> - <li>financial report for 2013,</li> - <li>2014 potential activities.</li> -</ul> - -<h2>Activities report</h2> - -<p>Magnus Hagander gave a brief summarization of the Activities report.</p> - -<p>No question asked.</p> - -<p>Votes: 19 voted Yes out of 20 present in the channel. The last one didn't vote.</p> - -<p>Thus, the activities report is approved.</p> - -<h2>Financial report</h2> - -<p>Guillaume Lelarge gave a brief summarization of the Financial report.</p> - -<p>Many questions were asked:</p> - -<ul> - <li>What is the interest rate they are giving on the savings account? - <ul><li>2%</li></ul> - </li> - <li>Was there a particular need to roll a new one? (in reference to the new accounting system) - <ul><li>Yes, it's tied into the conference management system, and payment processors.</li></ul> - </li> - <li>Is the sourcecode public? - <ul><li>Yes, http://git.postgresql.org/gitweb/?p=pgeu-website.git;a=summary</li></ul> - <li>We made profit in 2013; are there tax consequences of that? - <ul><li>As a non profit, there isn't. We haven't made enough money to make that happen.</li></ul> - </li> - <li>What are the books royalties? - <ul><li>We get royalty from Packt Publishing whenever those books are bought using referral links on www.postgresql.org. We also get donations from Network Theory who publish a printed version of our documentation, and we book those as book royalties</li></ul> - </li> - <li>How is the relation between .org and .eu in that case? as in who approved the money flow in that direction? - <ul><li>The core team approved it. postgresql.org doesn't have a dedicated NPO - it uses SPI for some things, but that's US based, whilst Packt are EU.</li></ul> - </li> - <li>Did all the "donations" come through the website? were there any reasons given for why people donated independently of the conference? - <ul><li>From paypal, no reason given</li></ul> - </li> - <li>Are there only 39 members? - <ul><li>No, 66</li></ul> - </li> - <li>We are allowed to have a buffer to cover future expenses? - <ul><li>Yes, we can have a buffer, but we can't make a profit</li></ul> - </li> -</ul> - -<p>You'll notice both pgconf.eu and pgconf.de made fairly significant profits. Magnus Hagander also explained that this wasn't actually intentional. Our goal at this point is to not loose money on the conference, and to make a small profit on pgconf.eu to cover other events. And this is a requirement for our association - we're a non-profit association after all. We ended up at these numbers because we simply got significantly more sponsors signing up to both conferences than either one had in the budget.</p> - -<p>Votes: 21 voted Yes out of 22 present in the channel. The last one didn't vote.</p> - -<p>Thus, the financial report is approved.</p> - -<h2>Next year's activities</h2> - -<p>We already have several events scheduled.</p> - -<p>FOSDEM PGday is in 2 days. It is sold out.</p> - -<p>Nordicpgday happens in stockholm in march. This is organized the same way as pgconf.de, meaning that it's formally organized by PostgreSQL Europe, but it's run by a separate team (which includes Magnus Hagander and Heikki linnakangas) to help with paperwork etc. The call for papers is open and you should all submit! The aim is 50-100 people. We have already sold over 30 tickets, even though we don't have a schedule yet.</p> - -<p>We are already working on PGConf.EU 2014 in that venues are being investigated. As soon as we have paperwork, we will announce the location and the date, but the date will be *approximately* the same time of the year as last year.</p> - -<p>We also know of the swiss pgday which is arranged in europe, but not directly by PostgreSQL Europe. But we definitely support their efforts, and will be available to help them out if they should need. It's too early to set a target attendees goal in detail, but we're definitely aiming to get back up to 300.</p> - -<p>Votes: 18 voted Yes out of 22 present in the channel. The last two didn't vote.</p> - -<h2>Conclusion</h2> - -<p>Meeting ends at 22:08. - -<ul> -<li>Magnus Hagander, President</li> -<li>Guillaume Lelarge, Treasurer</li> -<li>Dave Page, Secretary</li> -</ul> - -{%endblock%} diff --git a/template/pages/about/ga/2015/activitiesreport.html b/template/pages/about/ga/2015/activitiesreport.html deleted file mode 100644 index b8eb1224..00000000 --- a/template/pages/about/ga/2015/activitiesreport.html +++ /dev/null @@ -1,42 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2015 General Assembly - Activities report{%endblock%} -{%block content%} -<h1>2015 General Assembly - Activities report</h1> - -<h2>What has been done</h2> - -<h3>Financial/Administration</h3> - -<p>See the <a href="/about/ga/2015/financialreport/">Financial report</a>, section "Activities".</p> - -<h3>FOSDEM+PGDay</h3> - -<p>That was the second time we ran a PGDay before FOSDEM in Brussels, Belgium. It remains a popular event: one track, one day, 7 talks, 69 attendees. The event sold out, and we were unfortunately not able to accommodate all people on the reserve list, but the reserve list ended up being very short in the end.</p> - -<p>The FOSDEM event itself was successful as well: lots of people visited our booth on Saturday and Sunday, lots of people asked questions, bought merchandise, and attended the 7 sessions we had in the devroom.</p> - -<h3>Nordic PGDay</h3> - -<p>This was the first year for the Nordic PGDay, this year held in Stockholm, Sweden. It was a really popular event, with quite a lot of attendees (108 accepted attendees, and another 23 people on the waiting list that we were unable to find space for due to the size of the venue) for the 7 talks.</p> - -<p>The feedback shows more of the details, and is posted at: <a href="http://blog.hagander.net/archives/218-Nordic-PGDay-2014-wrap-up-of-the-wrap-up.html">http://blog.hagander.net/archives/218-Nordic-PGDay-2014-wrap-up-of-the-wrap-up.html</a>.</p> - -<h3>PGConf.eu</h3> - -<p>We had a record number of attendees this year: 318! This is, as far as we know, the biggest dedicated PostgreSQL conference to date. On top of this, we had another 24 people on the waiting list. The venue was much appreciated, as were the talks.</p> - -<p>The feedback shows more of the details, and is posted at: <a href="http://blog.hagander.net/archives/223-PGConf.EU-2014-feedback-is-in.html">http://blog.hagander.net/archives/223-PGConf.EU-2014-feedback-is-in.html</a>.</p> - -<h2>Future events</h2> - -<p>FOSDEM PGDay is almost upon us, at the end of January in Brussels, Belgium. Registration is opened and the schedule has been published. Don't forget to register and join us for both the PGDay and the devroom + booth at FOSDEM!</p> - -<p>Nordic PGDay comes back, this time in Copenhagen, Denmark, on March, 11th. The call of paper is ongoing, deadline is January, 11th. Registration will open shortly. Please submit a talk, and join us!</p> - -<p>We decided during the preparations of PGConf.EU 2014 that we'll also try to find a venue for 2015, in order to facilitate planning and increase our options since fewer venues would be sold out. We were enough successful to sign the contract before the end of PGConf.EU 2014, and could announce it at the end of the event. So, in 2015, PGConf.EU 2015 will happen in Vienna, Austria, on October 27th-30th. More details will follow soon, but mark your calendars already!</p> - -<p>Our rejoining event is PGConf.DE, which is back after a years absence. Time and location will be published soon.</p> - -<p>There are a few other small events under discussion, and as always we invite our members who are interested in working on a regional PGDay to contact us if we can be of any assistance at all, whether just in answering questions, or through organizational or financial aid.</p> - -{%endblock%} diff --git a/template/pages/about/ga/2015/financialreport.html b/template/pages/about/ga/2015/financialreport.html deleted file mode 100644 index 888ea9fe..00000000 --- a/template/pages/about/ga/2015/financialreport.html +++ /dev/null @@ -1,161 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2015 General Assembly - Financial report{%endblock%} -{%block content%} -<h1>2015 General Assembly - Financial report</h1> - -<h2 >Assets</h2> - -<table> - <tr> - <td><strong>Accounts</strong></td> - <td><strong>2014-01-01</strong></td> - <td><strong>2014-12-31</strong></td> - <td><strong>Difference</strong></td> - </tr> - <tr> - <td>BNP checking account</td> - <td align="right">57.14</td> - <td align="right"></td> - <td align="right">−57.14</td> - </tr> - <tr> - <td>Crédit Mutuel checking account</td> - <td align="right">17,279.18</td> - <td align="right">41,866.45</td> - <td align="right">+24,587.27</td> - </tr> - <tr> - <td>Crédit Mutuel saving account</td> - <td align="right">60,020.00</td> - <td align="right">60,052.89</td> - <td align="right">+32.89</td> - </tr> - <tr> - <td>Paypal account</td> - <td align="right">4,700.25</td> - <td align="right">5,869.03</td> - <td align="right">+1,168.78</td> - </tr> - <tr> - <td>Adyen account</td> - <td align="right">500.00</td> - <td align="right">558.85</td> - <td align="right">+58.85</td> - </tr> - <tr> - <td>Pending creditcard payments</td> - <td align="right">150.00</td> - <td align="right">60.00</td> - <td align="right">-90.00</td> - </tr> - <tr> - <td>Total</td> - <td align="right">82,556.57</td> - <td align="right">108,407.22</td> - <td align="right">+25,600.65</td> - </tr> -</table> - -<p>The <a href="/media/pdf/pgeu_balance_2015.pdf">full balance report</a> is also available.</p> - -<h2>Major items</h2> - -<h3>Activities</h3> - -<p>The transition to the Credit Mutuel bank account went smoothly at the beginning of 2014. The BNP account is now closed.</p> - -<p>The savings account only serves as a "in-case-of-trouble" account. As everything went right this year (for example, we had plenty of sponsors for each event, making them all hit or exceed budget), we had no need to use it. The only operation that happened was the interest income (32.89 euro). We expect the same to happen this year. We believe it's still important for the organization to have this buffer account, as our financial exposure for the large conference (PGConf.EU) each year is substantial, and as the event is growing, so is the exposure.</p> - -<p>The contract with Adyen, our creditcard payment processor, has worked perfectly. It helped us a lot on the events, for the attendee fee payments, and for the goodies payments. The fees charged are substantially lower than Paypal, and the number of attendees to our events who had issues with payments are much lower. For these reasons, we will continue to work with them as our primary payment provider.</p> - -<p>Adyen also provides us with two handheld "shuttle" devices that allows us to take Point-of-Sales payments through Visa and Mastercard. This is primarily done for merchandise at PGConf.EU and FOSDEM, and has been a big success primarily at PGConf.EU (at FOSDEM, many visitors still expect nobody to accept payment cards, and therefor usually bring cash. Our fees are low, and as this rids our booth staff of the problem of carrying hundreds or thousands of euros on bus/train/flight home to deposit in the bank, it is something we will continue to encourage our visitors to use.</p> - -<p>Paypal is still used as a secondary online payment system, for those who prefer to use it, or those who have trouble paying through the Adyen system.</p> - -<p>The accounting and event webapps got some improvements during the year, automating more of our work, and providing better insight into the financials, something that has become increasingly important as we process larger events.</p> - -<h3>Income/Expenses</h3> - -<p>Important items are summarized here, but the <a href="/media/pdf/pgeu_results_2015.pdf">full results report</a> is also available.</p> - -<table> - <tr> - <td><strong>Items</strong></td> - <td><strong>Income</strong></td> - <td><strong>Expenses</strong></td> - <td><strong>Final results</strong></td> - </tr> - <tr> - <td>Membership</td> - <td align="right">490</td> - <td align="right">0</td> - <td align="right">490</td> - </tr> - <tr> - <td>Donations</td> - <td align="right">6255</td> - <td align="right">0</td> - <td align="right">6255</td> - </tr> - <tr> - <td>FOSDEM 2014 (incomplete)</td> - <td align="right">2400</td> - <td align="right">1943</td> - <td align="right">457</td> - </tr> - <tr> - <td>FOSDEM 2015 (incomplete)</td> - <td align="right">2500</td> - <td align="right">4848</td> - <td align="right">-2348</td> - </tr> - <tr> - <td>Nordic PGDay 2014</td> - <td align="right">13080</td> - <td align="right">12567</td> - <td align="right">513</td> - </tr> - <tr> - <td>Nordic PGDay 2015 (incomplete)</td> - <td align="right">2800</td> - <td align="right">0</td> - <td align="right">2800</td> - </tr> - <tr> - <td>pgconf.eu 2014</td> - <td align="right">120577</td> - <td align="right">99390</td> - <td align="right">21187</td> - </tr> -</table> - -<p>Note that the FOSDEM events are split across years, so some of the transactions for FOSDEM 2014 happened in 2013, and some for FOSDEM 2015 and Nordic PGDay 2015 have already happened in 2014, therefor the listed numbers are not complete for the events.</p> - -<p>The complete sums for FOSDEM 2014, including both years, are:</p> - -<table> - <tr> - <td><strong>Income</strong></td> - <td align="right">3950.00</td> - </tr> - <tr> - <td><strong>Expenses</strong></td> - <td align="right">-5968.84</td> - </tr> - <tr> - <td><strong>Final result</strong></td> - <td align="right"><strong>-2019.74</strong></td> - </tr> -</table> - -<p>This year again, memberships are a really small part of our incomes. Donations are still doing better, even much better than last year (approximately a 50% increase). On events, sponsorships and attendance fees are mostly equal (70k and 71k), and we are clearly dependent on both to cover our expenses. Likewise, our largest expenses are the conference venues, by far.</p> - -<p>Nordic PGDay was an interesting event because incomes and expenses are quite the same. This is something we should attempt for all our events.</p> - -<p>We again made quite a large profit on PGConf.EU 2014 this year. This was partially because of an unexpectedly large raise in the number of high level sponsors, but also because of an administrative mistake whereby we forgot to order an "upgrade" to the service at the venue once we had figure out that we had enough money to pay for it (we normally sign a contract with a lower level of service, and then increase it once sponsorship has been secured).</p> - -<h2>Conclusion</h2> - -<p>2014 continued the trend of 2013: lots of work on the financial part of the organization. We now need to move forward, and help promoting PostgreSQL in many other ways. Ideas welcomed!</p> - -{%endblock%} diff --git a/template/pages/about/ga/2015/minutes.html b/template/pages/about/ga/2015/minutes.html deleted file mode 100644 index 3c99414b..00000000 --- a/template/pages/about/ga/2015/minutes.html +++ /dev/null @@ -1,110 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2015 General Assembly - Minutes{%endblock%} -{%block content%} -<h1>2015 GENERAL ASSEMBLY MINUTES</h1> - -<p> -Association PostgreSQL Europe<br/> -13 rue du Square Carpeaux<br/> -75018 PARIS<br/> -</p> - -<h2>People attending the meeting</h2> - -<ul> - <li>Andreas Karlsson</li> - <li>Andreas Kretschmer</li> - <li>Bruno Friedmann</li> - <li>Damien Clochard</li> - <li>Daniel Gustaffson</li> - <li>Guillaume Lelarge</li> - <li>Harald Armin Massa</li> - <li>Johannes Graen</li> - <li>Magnus Hagander</li> - <li>Markus Wanner</li> - <li>Patryk Kordylewski</li> - <li>Robert Ivens</li> - <li>Sven Schoradt</li> - <li>Tobias Bussmann</li> - <li>Tomas Vondra</li> - <li>Stefanie Janine Stölting</li> -</ul> - -<p>The first GA, which happened on January, 19th, 2015, didn't meet the quorum. These minutes is for the second GA meeting. As such, no quorum is needed. Thus, the meeting is valid.</p> - -<p>Magnus Hagander is the president of the GA meeting, Guillaume Lelarge is the secretary.</p> - -<p>Meeting starts at 21:05 (2015-01-26), on the IRC network freenode.net, channel #pgeu-ga. Language is english, the report is available in english and french.</p> - -<p> -The agenda is: -<ul> - <li>activities report for 2014,</li> - <li>financial report for 2014,</li> - <li>2015 potential activities.</li> -</ul> - -<h2>Activities report</h2> - -<p>Magnus Hagander gave a brief summarization of the Activities report.</p> - -<p>No question asked.</p> - -<p>Votes: 16 voted Yes out of 17 present in the channel. The last one didn't vote.</p> - -<p>Thus, the activities report is approved.</p> - -<h2>Financial report</h2> - -<p>Guillaume Lelarge gave a brief summarization of the Financial report.</p> - -<p>Several questions were asked:</p> - -<ul> - <li>Fosdem costs us because of lower attendees? or the new venue? - <ul><li>Because of the venue and because we don't take on a lot of sponsorship. The venue is always the costier part of any event.</li></ul> - </li> - <li>Is FOSDEM PGDay considered as a "prestige" event? Meaning you're OK loosing money on it? - <ul><li>It has been our consideration before that we are OK to loose money on that one assuming (1) it's not too much, and (2) pgconfeu made enough profit that we don't end up draining our reserves.</li></ul> - </li> - <li>Did you say how much money the association has right now? - <ul><li>It's in the report at <a href="https://www.postgresql.eu/about/ga/2015/financialreport/">https://www.postgresql.eu/about/ga/2015/financialreport/</a>. It was about 108k euro, so that means we can "screw up completely" with one pgconfeu and still not end up in the red, but we can only do that once.</li></ul> - <li>There are no problem for a non profit with that amount of money? - <ul><li>As long as we use it every year, nope.</li></ul> - </li> -</ul> - -<p>A new vote has been added to the agenda: Should the board be asked to investigate options for an external accountant to review finances yearly?</p> - -<p>Votes: 11 voted Yes, 3 voted No, out of 17 present in the channel. The three last ones didn't vote.</p> - -<p>Thus, the board is instructed to investigate options for an external accountant.</p> - -<p>Votes on the financial report: 15 voted Yes out of 17 present in the channel. The two last ones didn't vote.</p> - -<p>Thus, the financial report is approved.</p> - -<h2>Next year's activities</h2> - -<p>Magnus Hagander gave a brief summarization of next year's activities (see the Activities report).</p> - -<p>We already have several events scheduled.</p> - -<p>One question was asked:</p> - -<ul> - <li>Wasn't an event in Moskau announced at pgconf.eu? is that organized locally? - <ul><li>There is a moscow event. It's not held in cooperation with PostgreSQL Europe. And it's run by a commercial company.</li></ul> - </li> -</ul> - -<p>No votes.</p> - -<p>Meeting ends at 21:51.</p> - -<ul> -<li>Magnus Hagander, President</li> -<li>Guillaume Lelarge, Treasurer</li> -</ul> - -{%endblock%} diff --git a/template/pages/about/ga/2016/activitiesreport.html b/template/pages/about/ga/2016/activitiesreport.html deleted file mode 100644 index 83bda4dd..00000000 --- a/template/pages/about/ga/2016/activitiesreport.html +++ /dev/null @@ -1,95 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2016 General Assembly - Activities report{%endblock%} -{%block content%} -<h1>2016 General Assembly - Activities report</h1> - -<h2>What has been done</h2> - -<h3>Financial/Administration</h3> - -<p>See the <a href="/about/ga/2016/financialreport/">Financial report</a>, section "Activities".</p> - -<h3>Events</h3> -<p> -2015 saw an increase in events which were either organized by, or with -the support from, PostgreSQL Europe. In total, we had 781 registered -attendees at this year's events which we are very happy about. -</p> - -<h3>FOSDEM/PGDay</h3> -<p> -The third annual one-track PGDay just before FOSDEM again became a -successful event with 91 attendees. During FOSDEM, we had lots of -interest at our booth and all talks in our devroom ended up completely -full with far from everyone who wanted to attend being able to get in. -</p> - -<h3>Nordic PGDay</h3> -<p> -The second iteration of Nordic PGDay followed the same concept as the -first year, a single-day single-track conference. This year, it was -held in Copenhagen, Denmark, with 95 attendees and 7 talks with -speakers from 6 countries. -</p> - -<h3>pgDay Paris</h3> -<p> -The Paris usergroup organizers decided to run a PGDay in Paris -supported by PostgreSQL Europe. The conference followed the well -proven one-day one-track model and attracted 84 attendees. -</p> - -<h3>PGConf.EU</h3> -<p> -For the second year in a row, PGConf.EU broke its attendance record, -this year with a wide margin. The conference, which was held in -Vienna, Austria, had 401 attendees. The event was a success with -overwhelmingly positive feedback. Merchandise sales during the -conference also beat previous years records cementing this as an -important avenue of PostgreSQL advocacy. -</p> - -<h3>PGConf.DE</h3> -<p> -After a year of absence, PGConf.DE reappeared in Hamburg with a full -day of training followed by a single-day three-track conference with -38 talks. The conference had 110 attendees and got very positive -feedback. -</p> - - -<h3>PGDay Belfort</h3> -<p> -PostgreSQL Europe supported the local organizers of this new regional -event in Belfort, France, which unfortunately was canceled due to a -lack of registered attendees. -</p> - -<h3>Upcoming events</h3> -<p> -FOSDEM/PGDay will as last year be held in Brussels at the end of -January. Registration is open and the schedule for both our devroom -and PGDay has been published. -</p> - -<p> -Nordic PGDay continues to visit the major cities in the Nordic -region and will this year be held in Helsinki, Finland, on March -17. Registration is currently open, and the schedule will be published -shortly. -</p> - -<p> -PGConf.EU will of course come back again. So far, the location hasn't -been disclosed but will be announced soon. -</p> - -<p> -As always, we invite our members who are interested in working on a -regional PGDay to contact us if we can be of any assistance at all, -whether just in answering questions, or through organisational or -financial aid. More information can be found at -<a href="/events/">https://www.postgresql.eu/events/</a>. -</p> - -{%endblock%} diff --git a/template/pages/about/ga/2016/financialreport.html b/template/pages/about/ga/2016/financialreport.html deleted file mode 100644 index 185eaff9..00000000 --- a/template/pages/about/ga/2016/financialreport.html +++ /dev/null @@ -1,248 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2016 General Assembly - Financial report{%endblock%} -{%block content%} -<h1>2016 General Assembly - Financial report</h1> - -<h2 >Assets</h2> - -<table> - <tr> - <td><strong>Accounts</strong></td> - <td><strong>2015-01-01</strong></td> - <td><strong>2015-12-31</strong></td> - <td><strong>Difference</strong></td> - </tr> - <tr> - <td>Crédit Mutuel checking account</td> - <td align="right">41,866.45</td> - <td align="right"> 38,705.77 </td> - <td align="right"> -3,160.68 </td> - </tr> - <tr> - <td>Crédit Mutuel saving account</td> - <td align="right"> 60,052.89 </td> - <td align="right"> 60,740.61 </td> - <td align="right"> 687.72 </td> - </tr> - <tr> - <td>Paypal account</td> - <td align="right"> 5,869.03 </td> - <td align="right"> 6,399.41 </td> - <td align="right"> 530.38 </td> - </tr> - <tr> - <td>Adyen account</td> - <td align="right"> 558.85 </td> - <td align="right"> 500.00 </td> - <td align="right"> -58.85 </td> - </tr> - <tr> - <td>Pending creditcard payments</td> - <td align="right"> 60.00 </td> - <td align="right"> 256.45 </td> - <td align="right"> 196.45 </td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right"><em> 108,407.22</em></td> - <td align="right"><em>106,602.24</em></td> - <td align="right"><em>-1,804.98</em></td> - </tr> -</table> -<p>The <a href="/media/pdf/pgeu_balance_2016.pdf">full balance report</a> is also available.</p> - -<p> -While the overall goal of PostgreSQL Europe is to break even we did in -2015 see the first net loss since the start of operation. It is -however a small loss compared to the total income compared to our -expenditure, PostgreSQL Europe is still very much in good financial -health. The costs of arranging PGConf.EU were substantially higher due -to the increased cost level of Vienna compared to Madrid as well as -the larger scale of the event. The registration price was however not -raised substantially (it was raised from 200€ to 240€) in order to -make the event affordable for everyone. This contributed to the minor -loss on the yearly result. -</p> - - -<h2>Major items</h2> - -<h3>Activities</h3> -<p> - The savings account which acts as a buffer to cover unexpected costs - has not been used during 2015 since all events have generated - satisfactory financial results (exceeding or hitting budget) due to - good sponsor incomes. The only transaction during 2015 was an - interest income of 687.72€. As the events grow larger - PGConf.EU - 2015 was our biggest event to date - and the number of events - increase, the importance of this buffer remains. -</p> - -<p> - At Nordic PGDay 2015, we launched an online self serve portal for - event sponsorship with credit card payment possibility for the entry - level sponsorship. This was then used for all events during the year - streamlining the sponsor signup process. -</p> - -<p> - Our administrative backend software which powers both our financial - reporting as well as the events was again further improved ensuring - safe operation of our events. -</p> - -<p> - We have found an accountant firm to work with, but we haven't yet - finished the initial process so we don't have any more details at - this point. -</p> - -<p> - IBAN transfers are now accepted for conference payments. -</p> - -<p> - Merchandise sales are increasing year over year with 2015 being no - exception. In total, sales were up 13% from 2014 reaching a total of - 4,608.00€. -</p> - - -<h3>Income/Expenses</h3> - -<p> - Important items are summarized here, but - the <a href="/media/pdf/pgeu_results_2016.pdf">full results report</a> - is also available. -</p> - -<table> - <tr> - <td><strong>Items</strong></td> - <td align="right"><strong>Income</strong></td> - <td align="right"><strong>Expenses</strong></td> - <td align="right"><strong>Final results</strong></td> - </tr> - <tr> - <td>Membership</td> - <td align="right"> 610.00 </td> - <td align="right">0</td> - <td align="right"> 610.00 </td> - </tr> - <tr> - <td>Donations</td> - <td align="right"> 1,808.98 </td> - <td align="right">0</td> - <td align="right"> 1,808.98 </td> - </tr> - <tr> - <td>Conferences</td> - <td align="right"> 206,397.00 </td> - <td align="right"> -207,276.95 </td> - <td align="right"> -881.95 </td> - </tr> - <tr> - <td>Merchandise</td> - <td align="right"> 4,608.00 </td> - <td align="right"> -4,010.63 </td> - <td align="right"> 597.37 </td> - </tr> - <tr> - <td>Financial</td> - <td align="right"> 687.72 </td> - <td align="right"> -3,580.31 </td> - <td align="right"> -2,892.59 </td> - </tr> - <tr> - <td>Insurance</td> - <td align="right">0</td> - <td align="right"> -266.28 </td> - <td align="right"> -266.28 </td> - </tr> - <tr> - <td>Other</td> - <td align="right">0</td> - <td align="right"> -782.61 </td> - <td align="right"> -782.61 </td> - </tr> - <tr> - <td><em>Total</em></td> - <td></td> - <td></td> - <td align="right"><em>-1,804.98</em></td> - </tr> -</table> - -<p> - The financial results for our events can be seen broken down per conference in the table below. -</p> - -<table> - <tr> - <td><strong>Event</strong></td> - <td align="right"><strong>Income</strong></td> - <td align="right"><strong>Expenses</strong></td> - <td align="right"><strong>Final results</strong></td> - </tr> - <tr> - <td>PGDay Paris 2015</td> - <td align="right"> 10,974.00 </td> - <td align="right">-7,689,11 </td> - <td align="right"> 3,284.89 </td> - </tr> - <tr> - <td>PGConf.EU 2015</td> - <td align="right">150,823.00</td> - <td align="right">-149,874.34</td> - <td align="right">948.66</td> - </tr> - <tr> - <td>PGConf.DE 2015</td> - <td align="right">30,100.00</td> - <td align="right">25,351.81</td> - <td align="right">4,748.19</td> - </tr> -</table> - -<p> - Both FOSDEM and Nordic PGDay are events held early in the year and - thus have transactions on both this and next year's report. Complete - sums for FOSDEM 2015 as well as Nordic PGDay 2015 are listed below - broken down per year. -</p> - -<table> - <tr> - <td colspan="2"><strong>FOSDEM PGDay 2015</strong></td> - </tr> - <tr> - <td>Final Result 2014</td> - <td align="right"> -2,348.29 </td> - </tr> - <tr> - <td>Final Result 2015</td> - <td align="right"> -572.11</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right"> -2,920.40 </td> - </tr> - - <tr> - <td colspan="2"><strong>Nordic PGDay 2015</strong></td> - </tr> - <tr> - <td>Final Result 2014</td> - <td align="right"> 2,800.00 </td> - </tr> - <tr> - <td>Final Result 2015</td> - <td align="right"> -1,975.68 </td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right"> 824.32 </td> - </tr> -</table> - -{%endblock%} diff --git a/template/pages/about/ga/2016/minutes.html b/template/pages/about/ga/2016/minutes.html deleted file mode 100644 index 093e64d5..00000000 --- a/template/pages/about/ga/2016/minutes.html +++ /dev/null @@ -1,139 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2016 General Assembly - Minutes{%endblock%} -{%block content%} -<h1>2016 GENERAL ASSEMBLY MINUTES</h1> - -<p> -Association PostgreSQL Europe<br/> -13 rue du Square Carpeaux<br/> -75018 PARIS<br/> -</p> - -<h2>People attending the meeting</h2> - -<ul> - <li>Andreas Wenk (awenkhh)</li> - <li>Ari Heikkinen (heiari)</li> - <li>Christoph Moench-Tegeder (cmt_)</li> - <li>Claes (claes)</li> - <li>Daniel Gustafsson (dege)</li> - <li>Danilo Endesfelder (Danilo_E)</li> - <li>Dave Page (pgsnake)</li> - <li>Devrim Gündüz (devrimgunduz)</li> - <li>Eric Veldhuyzen ([Terra])</li> - <li>Gianni Ciolli (gciolli)</li> - <li>Guillaume Lelarge (gleu)</li> - <li>Gunnar "Nick" Bluth (nickbuth)</li> - <li>Hannu Valtonen (Ormod_)</li> - <li>Harald Armin Massa (ghum)</li> - <li>Jean-Paul Argudo (jpa)</li> - <li>Jimmy Angelakos (vyruss)</li> - <li>Johannes Graën (gio)</li> - <li>Julien Rouhaud (rjuju)</li> - <li>Jürgen (juergen)</li> - <li>Magnus Hagander (mha)</li> - <li>Marco Nenciarini (mnencia)</li> - <li>Markus Wanner (markus_wanner)</li> - <li>Mathias Brossard (mathiasb77)</li> - <li>Michael Kefeder (htd)</li> - <li>Patryk Kordylewski (patryk)</li> - <li>Pavel Golub (pavlo)</li> - <li>Robert Ivens (Possible)</li> - <li>Stéphane Schildknecht (SAS)</li> - <li>Svenne Krap (svenneK)</li> - <li>Tobias Bussmann (TobiasBussmann)</li> - <li>Vik Fearing (xocolatl)</li> - <li>Virginie (vijourdan)</li> -</ul> - -<p>The first GA, which happened on January, 18th, 2016, didn't meet the quorum. These minutes is for the second GA meeting. As such, no quorum is needed. Thus, the meeting is valid.</p> - -<p>Guillaume Lelarge is the president and secretary of the GA meeting.</p> - -<p>Meeting starts at 21:02 (2016-01-25), on the IRC network freenode.net, channel #pgeu-ga2016-2. Language is english, the report is available in english and french.</p> - -<p> -The agenda is: -</p> -<ul> - <li>activities report for 2015,</li> - <li>financial report for 2015,</li> - <li>2016 potential activities.</li> -</ul> - -<h2>Activities report</h2> - -<p>Dave Page gave a brief summarization of the Activities report.</p> - -<p>Several questions were asked:</p> - -<ul> - <li>Does PGEU finance the developer meeting for senior PostgreSQL hackers? Does PGEU need sponsoring for this? - <ul><li>Yes, we're financing it. No, we don't need sponsorship. It's a very small additional cost compared to running the conference.</li></ul> - </li> - <li>Is pgconf.eu 2016's location secret at the moment? - <ul><li>Yes, we're expecting to reveal it during FOSDEM if the contract has been signed.</li></ul> - </li> -</ul> - -<p>Votes: 29 voted Yes out of 30 present in the channel. The last one didn't vote.</p> - -<p>Thus, the activities report is approved.</p> - -<h2>Financial report</h2> - -<p>Guillaume Lelarge gave a brief summarization of the Financial report.</p> - -<p>Several questions were asked:</p> - -<ul> - <li>What is the "Financial" item on the list? - <ul><li>Banking fees and alike</li></ul> - </li> - <li>I do not see any expenses for the tax guys? - <ul><li>No contract yet, so no expenses. But yes, we do expect to have a cost for that showing up for next year. We don't know yet exactly how much.</li></ul> - </li> - <li>Anyone got an idea what french accountants charge? - <ul><li>No, we'll see when we get a quote.</li></ul> - </li> -</ul> - -<p>Votes: 29 voted Yes out of 30 present in the channel. The last one didn't vote.</p> - -<p>Thus, the financial report is approved.</p> - -<h2>Next year's activities</h2> - -<p>Magnus Hagander gave a brief summarization of next year's activities (see the Activities report).</p> - -<p>Vik Fearing said that a pgday.paris event is probably on its way (nothing finalized yet).</p> - -<p>We already have several events scheduled.</p> - -<p>One question was asked:</p> - -<ul> - <li>Was pgconf.eu this year particularly expensive/cheaper compared to the average cost of a similar event in the EU? - <ul><li>It was significantly more expensive, Vienna is by far the most expensive city we've ever been to. We try very hard to find good venues that have easy access to the city, but are not overly expensive. We're at a size where it's actually very difficult.</li></ul> - </li> - <li>My understanding is that the ticket prices are raised to the occasion so we approximately break even, correct? - <ul><li>Correct, we try to adjust ticket prices and sponsor prices with that target.</li></ul> - </li> - <li>Does the board plan or think about investing in other areas, like marketing or others? - <ul><li>Other than goodies, we have no direct plans for marketing efforts. However, we are very much open to suggestions and projects that others want to take on, and are happy to work to provide funding and help around that.</li></ul> - </li> - <li>What about the code of conduct topic? is this something pg.eu does, or is it more the pg core team or some other group? - <ul><li>PGEU has a code of conduct for its events. The general code of conduct currently on pgsql-general has nothing to do with PGEU. We could consider having one for pgeu-general mailinglist, but in that case I'd say it's easier to just adopt whatever the "main project" comes up with and be done.</li></ul> - </li> -</ul> - -<p>No votes.</p> - -<p>Meeting ends at 21:53.</p> - -<ul> -<li>Magnus Hagander, President</li> -<li>Guillaume Lelarge, Treasurer</li> -</ul> - -{%endblock%} diff --git a/template/pages/about/ga/2017/activitiesreport.html b/template/pages/about/ga/2017/activitiesreport.html deleted file mode 100644 index cc07f12b..00000000 --- a/template/pages/about/ga/2017/activitiesreport.html +++ /dev/null @@ -1,91 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2017 General Assembly - Activities report{%endblock%} -{%block content%} -<h1>2017 General Assembly - Activities report</h1> - -<h2>What has been done</h2> - -<h3>Financial/Administration</h3> - -<p>See the <a href="/about/ga/2017/financialreport/">Financial report</a>, section "Activities".</p> - -<h3>Events</h3> -<p> -2016 saw a good number of events which were either organized by, or with the -support from, PostgreSQL Europe, though no PGConf.DE this year. In total, we -had 682 registered attendees at this year's events which we are very happy -about. -</p> - -<h3>FOSDEM/PGDay</h3> -<p> -The fourth annual one-track PGDay just before FOSDEM again is now a successful -and well established event with 102 attendees. During FOSDEM, we had lots of -interest at our booth and all talks in our devroom ended up completely full -with far from everyone who wanted to attend being able to get in. -</p> - -<h3>Nordic PGDay</h3> -<p> -The third iteration of Nordic PGDay followed the same concept as the two -previous years, a single-day single-track conference. This year, it was held -in Helsinki, Finland, with 93 attendees and 7 talks. -</p> - -<h3>pgDay Paris</h3> -<p> -The Paris usergroup organizers decided to run a PGDay in Paris supported by -PostgreSQL Europe. The conference followed the well proven one-day one-track -model and attracted 74 attendees. -</p> - -<h3>PGConf.EU</h3> -<p> -For the third year in a row, PGConf.EU broke its attendance record, this year -with a wide margin. The conference, which was held in Tallin, Estonia, had 413 -attendees. The event was a success with overwhelmingly positive feedback. -</p> - -<h2>Other events</h2> -<p> -We were part of some other events. We sponsored the PostgreSQL booth at -HighLoad++. We also sent them some merchandise. We sent merchandise to some -PostgreSQL meetups.</p> - -<p> -We sponsored the <a href="http://www.pgmag.org/">PostgreSQL magazine</a>. We -also gave some at PGConf.EU 2016, and gave some for a french meetup. -</p> - -<h3>Upcoming events</h3> -<p> -FOSDEM/PGDay will as last year be held in Brussels at the beginning of -February. Registration is open and the schedule for both our devroom and PGDay -has been published. -</p> - -<p> -Nordic PGDay continues to visit the major cities in the nordic region and will -this year be held in Stockholm, Sweden, on March 21. Registration will open -shortly. <a href="https://2017.nordicpgday.org/cfp/">CfP is already opened</a>. -</p> - -<p> -PGDay.Paris is back again, and <a -href="http://www.pgday.paris/2017/callforpapers/">its CfP is open</a>. -</p> - -<p> -PGConf.EU will of course come back again, in Warsaw (Poland). We're still -working on the details. More informations will come later. -</p> - -<p> -As always, we invite our members who are interested in working on a regional -PGDay to contact us if we can be of any assistance at all, whether just in -answering questions, or through organisational or financial aid. More -information can be found at <a -href="/events/">https://www.postgresql.eu/events/</a>. -</p> - -{%endblock%} diff --git a/template/pages/about/ga/2017/financialreport.html b/template/pages/about/ga/2017/financialreport.html deleted file mode 100644 index c8ec58e8..00000000 --- a/template/pages/about/ga/2017/financialreport.html +++ /dev/null @@ -1,266 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2017 General Assembly - Financial report{%endblock%} -{%block content%} -<h1>2017 General Assembly - Financial report</h1> - -<h2 >Assets</h2> - -<table> - <tr> - <td><strong>Accounts</strong></td> - <td><strong>2016-01-01</strong></td> - <td><strong>2016-12-31</strong></td> - <td><strong>Difference</strong></td> - </tr> - <tr> - <td>Crédit Mutuel checking account</td> - <td align="right"> 38,705.77</td> - <td align="right"> 77,418.89</td> - <td align="right"> 38,713.12</td> - </tr> - <tr> - <td>Crédit Mutuel saving account</td> - <td align="right"> 60,740.61</td> - <td align="right"> 61,284.35</td> - <td align="right"> 543.74</td> - </tr> - <tr> - <td>Paypal account</td> - <td align="right"> 6,399.41</td> - <td align="right"> 7,785.42</td> - <td align="right"> 1,386.01</td> - </tr> - <tr> - <td>Adyen account</td> - <td align="right"> 500.00</td> - <td align="right"> 500.00</td> - <td align="right"> 0.00</td> - </tr> - <tr> - <td>Pending creditcard payments</td> - <td align="right"> 256.45</td> - <td align="right"> 256.45</td> - <td align="right"> 0.00</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right"><em>106,602.24</em></td> - <td align="right"><em>147,245.11</em></td> - <td align="right"><em> 40,642.87</em></td> - </tr> -</table> -<p>The <a href="/media/pdf/pgeu_balance_2017.pdf">full balance report</a> is also available.</p> - -<p> -While the overall goal of PostgreSQL Europe is to break even, we did in 2016 -see the biggest net gain since the start of operation. This is mostly due to -a lower cost level in Estonia for PGConf.EU and a still big number of sponsors. -</p> - -<h2>Major items</h2> - -<h3>Activities</h3> -<p> -The savings account which acts as a buffer to cover unexpected costs has not -been used during 2016 since all events have generated satisfactory financial -results (exceeding or hitting budget) due to good sponsor incomes. The only -transaction during 2016 was an interest income of 543.74€. As the events grow -larger - PGConf.EU 2016 was our biggest event to date - and the number of -events increase, the importance of this buffer remains. -</p> - -<p> -Our administrative backend software which powers both our financial reporting -as well as the events was again further improved ensuring safe operation of -our events. -</p> - -<p> -According to the french tax agency, we are required to pay taxes. We are -working hard with the accountant firm to see how much we have to pay. Work -is ongoing for 2016. We dont know yet how much, so this financial report -is a partial report. -</p> - -<p> -The French tax agency has also decided to require that we are VAT registered. -</p> - -<p> -Merchandise sales are increasing year over year with 2016 being no exception. -In total, sales were up 9% from 2015 reaching a total of 5,065.26€. -</p> - -<p> -Donations were much higher than last year, thanks to the book royalties. -</p> - -<h3>Income/Expenses</h3> - -<p> - Important items are summarized here, but - the <a href="/media/pdf/pgeu_results_2017.pdf">full results report</a> - is also available. -</p> - -<table> - <tr> - <td><strong>Items</strong></td> - <td align="right"><strong>Income</strong></td> - <td align="right"><strong>Expenses</strong></td> - <td align="right"><strong>Final results</strong></td> - </tr> - <tr> - <td>Membership</td> - <td align="right">600.00</td> - <td align="right">0</td> - <td align="right">600.00</td> - </tr> - <tr> - <td>Donations</td> - <td align="right">5,631.30</td> - <td align="right">0.00</td> - <td align="right">5,631.30</td> - </tr> - <tr> - <td>Conferences</td> - <td align="right">173,969.00</td> - <td align="right">-128,609.49</td> - <td align="right">45,359.51</td> - </tr> - <tr> - <td>Merchandise</td> - <td align="right">5,065.26</td> - <td align="right">-7,182.31</td> - <td align="right">-2,117.05</td> - </tr> - <tr> - <td>Financial</td> - <td align="right">543,74</td> - <td align="right">-2,811.90</td> - <td align="right">-2,268.16</td> - </tr> - <tr> - <td>Insurance</td> - <td align="right">0.00</td> - <td align="right">-553.68</td> - <td align="right">-553.68</td> - </tr> - <tr> - <td>Taxes</td> - <td align="right">0.00</td> - <td align="right"><em>pending</em></td> - <td align="right"><em>pending</em></td> - </tr> - <tr> - <td>Other</td> - <td align="right">0.00</td> - <td align="right">-4,987.57</td> - <td align="right">-4,987.57</td> - </tr> - <tr> - <td><em>Total</em></td> - <td></td> - <td></td> - <td align="right"><em>41,664.35</em></td> - </tr> -</table> - -<p> -Once again, we gain a lot this year because of a cheaper location, and bigger events. The amount of taxes is yet to be determined. -</p> - -<p> -The financial results for our events can be seen broken down per conference in the table below. -</p> - -<table> - <tr> - <td><strong>Event</strong></td> - <td align="right"><strong>Income</strong></td> - <td align="right"><strong>Expenses</strong></td> - <td align="right"><strong>Final results</strong></td> - </tr> - <tr> - <td>FOSDEM/PGDay 2016</td> - <td align="right">5,370.00</td> - <td align="right">776.07</td> - <td align="right">4,593.93</td> - </tr> - <tr> - <td>Nordic PGDay 2016</td> - <td align="right">7,920.00</td> - <td align="right">9,671.05</td> - <td align="right">-1,751.05</td> - </tr> - <tr> - <td>PGDay Paris 2016</td> - <td align="right">6,070.00</td> - <td align="right">2,169.56</td> - <td align="right">3,900.44</td> - </tr> - <tr> - <td>PGConf.EU 2016</td> - <td align="right">155,629.00</td> - <td align="right">108,329.46</td> - <td align="right">47,299.54</td> - </tr> -</table> - -<p> -FOSDEM, Nordic PGDay, and PGConf.EU 2016 are events held early in the year and -thus have transactions on both this and next year's report. Complete sums for -FOSDEM 2016 as well as Nordic PGDay 2016 are listed below broken down per year. -</p> - -<table> - <tr> - <td colspan="2"><strong>FOSDEM PGDay 2016</strong></td> - </tr> - <tr> - <td>Final Result 2015</td> - <td align="right">-8,763.69</td> - </tr> - <tr> - <td>Final Result 2016</td> - <td align="right">4,593.93</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right">-4,169.76</td> - </tr> - - <tr> - <td colspan="2"><strong>Nordic PGDay 2016</strong></td> - </tr> - <tr> - <td>Final Result 2015</td> - <td align="right">2,400.00</td> - </tr> - <tr> - <td>Final Result 2016</td> - <td align="right">-1,751.05</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right">648.95</td> - </tr> - - <tr> - <td colspan="2"><strong>PGConf.EU 2016</strong></td> - </tr> - <tr> - <td>Final Result 2015</td> - <td align="right">-565.50</td> - </tr> - <tr> - <td>Final Result 2016</td> - <td align="right">47,299.54</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right">46,734.04</td> - </tr> -</table> - -{%endblock%} diff --git a/template/pages/about/ga/2017/minutes.html b/template/pages/about/ga/2017/minutes.html deleted file mode 100644 index 48c5e4f2..00000000 --- a/template/pages/about/ga/2017/minutes.html +++ /dev/null @@ -1,134 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2017 General Assembly - Minutes{%endblock%} -{%block content%} -<h1>2017 GENERAL ASSEMBLY MINUTES</h1> - -<p> -Association PostgreSQL Europe<br/> -13 rue du Square Carpeaux<br/> -75018 PARIS<br/> -</p> - -<h2>People attending the meeting</h2> - -<ul> - <li>Andreas Scherbaum (ads)</li> - <li>Andreas Kretschmer (akretschmer)</li> - <li>Boriss Mejias (bmejias)</li> - <li>Claes Jakobsson (claes)</li> - <li>Christoph Moench-Tegeder (cmt_)</li> - <li>Damien Clochard (daamien)</li> - <li>Danilo Endesfelder (DaniloE)</li> - <li>Daniel Gustafsson (dege)</li> - <li>Devrim Gunduz (devrimgunduz)</li> - <li>Gianni Ciolli (gciolli)</li> - <li>Harald Armin Massa (ghum)</li> - <li>Johannes Graën (gio)</li> - <li>Guillaume Lelarge (gleu)</li> - <li>Ilya Kosmodemiansky (hydrobiont)</li> - <li>Jeltz (jeltz)</li> - <li>Jean-Paul Argudo (jpa)</li> - <li>Jürgen (juergen_1)</li> - <li>Magnus Hagander (magnush)</li> - <li>Markus Wanner (markus_wanner)</li> - <li>Stefan Kaltenbrunner (mastermind)</li> - <li>Marc Balmer (mbalmer)</li> - <li>Gunnar "Nick" Bluth (nickbluth)</li> - <li>(oolaniyi)</li> - <li>Pasha Golub (pasha_golub)</li> - <li>Patryk Kordylewski (patryk)</li> - <li>Dave Page (pgsnake)</li> - <li>Robert Ivens (Possible)</li> - <li>Julien Rouhaud (rjuju)</li> - <li>Stéphane Schildknecht (SAS)</li> - <li>Stephanie Janine Schoning (stefanie_janine)</li> - <li>Eric Veldhuyzen ([Terra])</li> - <li>(tigerfoot)</li> - <li>Tobias Bussmann (TobiasBussmann)</li> - <li>Jimmy Angelakos (vyruss)</li> - <li>Vik Fearing (xocolatl)</li> -</ul> - -<p>The first GA, which happened on January, 16th, 2017, didn't meet the quorum. These minutes is for the second GA meeting. As such, no quorum is needed. Thus, the meeting is valid.</p> - -<p>Magnus Hagander is the president and Guillaume Lelarge is the secretary of the GA meeting.</p> - -<p>Meeting starts at 21:01 (2017-01-23), on the IRC network freenode.net, channel #pgeu-ga2016-2. Language is english, the report is available in english and french.</p> - -<p>The agenda is:</p> -<ul> - <li>activities report for 2016,</li> - <li>financial report for 2016,</li> - <li>2017 potential activities.</li> -</ul> - -<h2>Activities report</h2> - -<p>Magnus Hagander gave a brief summarization of the Activities report.</p> - -<p>Several questions were asked:</p> -<ul> - <li>About the room at FOSDEM which is "sorry we're full", can't we ask a bigger one to the FOSDEM organization team?</li> - <ul><li>We ask for a bigger room every year. This year (2016, as the report is about), we actually got a bigger room, though it still wasn't big enough.</li></ul> - <li>Can we get our room to be on saturday instead of sunday?</li> - <ul><li>Having a room on Saturday means fewer talks than Sunday because of the large opening keynotes. Anyway, too late for this year.</li></ul> -</ul> - -<p>Votes: 29 voted Yes out of 36 present in the channel. 7 didn't vote.</p> - -<p>Thus, the activities report is approved.</p> - -<h2>Financial report</h2> - -<p>Guillaume Lelarge gave a brief summarization of the Financial report.</p> - -<p> -Several questions were asked: -</p> -<ul> - <li>Would it be difficult to become VAT registered?</li> - <ul><li>We already are (since last December)</li></ul> - <li>Did we hire an accountant because we make too much profit?</li> - <ul><li>Unfortunately, no. It's not about profits, it's about turnover.</li></ul> - <li>Do we have retroactive VAT on 2016 or was it introduced during the exercise?</li> - <ul><li>It is retroactive, though just for 2016. We got our VAT registration in December, so it's still 11 months.</li></ul> - <li>Did the board considered hire a (partial|full)time job to promote PG around EU?</li> - <ul><li>We certainly don't have the money to hire a full-time person, and we are absolutely not employing someone. But we could hire a consultant. To completely answer the question, no, we have not considered it. We are definitely interested in hearing suggestions though. If someone can come up with a complete proposal, it is absolutely something to discuss and possibly spend some money on.</li></ul> - <li>Why is there no yearly breakdown for PGday Paris like there is for the other events?</li> - <ul><li>This event had no transactions outside the year. The other events that have a yearly breakdown had some expenses or income on a different year. pgday.paris 2016 had all expenses and income in 2016.</li></ul> - <li>Are we stocked up in merchandising stuff? Or are we expected to lose money on that?</li> - <ul><li>Our current stockpile of merchandise isn't particularly high and will probably be sold out during FOSDEM. The Nordic and Paris events will probably want merchandise. So we'll restock but we first need to know what merchandise these events will need and how much.</li></ul> -</ul> - -<p>One more quick note even though it's actually from 2017. Some of you may have noticed that, as of January 3rd (that's why it's very close to 2016), we have another payment provider for all our conferences and such.</p> - -<p>No votes since the financial report is partial. The board will call for an extraordinary GA once we have all the numbers. An email will be announced the same way as for the general GA. We hope and think this will happen before summer, but worst case it could be even later than that.</p> - -<h2>Next year's activities</h2> - -<p>Magnus Hagander gave a brief summarization of next year's activities (see the Activities report).</p> - -<p>Some questions were asked:</p> -<ul> - <li>How about p2d2 in Prague? Or is it local community?</li> - <ul><li>This isn't handled by PostgreSQL Europe.</li></ul> - <li>Are the CfPs closed already?</li> - <ul><li>Yes for all except pgconf.eu</li></ul> - <li>Will the UK continue to count as Europe for a few more years?</li> - <ul><li>It will still be Europe, just not EU. There's a difference.</li></ul> - <li>What about local small Meetups?</li> - <ul><li>Yes, it's worth pointing out that pgday.paris and Nordic PGDay are supported by PGEU but arranged by local communities, so if you have a local meetup you want to support, contact us.</li></ul> - <li>Could you (all of you) actively promote video recordings of those events?</li> - <ul><li>It's not cheap, both in money and manpower. Manpower is probably the biggest issue - even once recorded, someone still needs to do the editing and uploading etc. The other side of that is that we don't want people to not attend because they can view online instead.</li></ul> -</ul> - -<p>No votes.</p> - -<p>Meeting ends at 21:50.</p> - -<ul> -<li>Magnus Hagander, President</li> -<li>Guillaume Lelarge, Treasurer</li> -</ul> - -{%endblock%} diff --git a/template/pages/about/ga/2018/activitiesreport.html b/template/pages/about/ga/2018/activitiesreport.html deleted file mode 100644 index 06cda1c2..00000000 --- a/template/pages/about/ga/2018/activitiesreport.html +++ /dev/null @@ -1,123 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2018 General Assembly - Activities report{%endblock%} -{%block content%} -<h1>2018 General Assembly - Activities report</h1> - -<h2>What has been done</h2> - -<h3>Financial/Administration</h3> - -<p>See the <a href="/about/ga/2018/financialreport/">Financial report</a>, section "Activities".</p> - -<h3>2017 Events</h3> -<p> -2017 saw a good number of events which were either organized by, or with the -support from PostgreSQL Europe. In total, we had 875 registered attendees at -this year's events which we are very happy about. -</p> - -<h3>FOSDEM/PGDay</h3> -<p> -The fifth annual one-track PGDay just before FOSDEM is now a successful and -well established event with 111 attendees. During FOSDEM, we had lots of -interest at our booth and all talks in our devroom ended up completely full -with far from everyone who wanted to attend being able to get in. -</p> - -<h3>Nordic PGDay</h3> -<p> -The fourth iteration of Nordic PGDay followed the same concept as the two -previous years, a single-day single-track conference. In 2017, it was held in -Stockholm, Sweden, with 120 attendees and 7 talks. -</p> - -<h3>pgDay Paris</h3> -<p> -The second iteration of PGDay Paris supported by PostgreSQL Europe followed -the well proven one-day one-track model and attracted 112 attendees. -</p> - -<h3>PGConf.EU</h3> -<p> -For the fourth year in a row, PGConf.EU broke its attendance record, this year -with a wide margin. The conference, which was held in Warsaw, Poland, had 437 -attendees. The event was a success with overwhelmingly positive feedback. -</p> - -<h3>2018 Events</h3> -<p> -We are in the middle of 2018, and some events already took place. These events -were organized by, or with the support from PostgreSQL Europe. In total, we -already had 585 registered attendees at this year's events. This of course is -great. -</p> - -<h3>FOSDEM/PGDay</h3> -<p> -The sixth annual one-track PGDay just before FOSDEM and the FOSDEM -booth/devroom have been quite successful. All talks in our devroom ended up -completely full with far from everyone who wanted to attend being able to get -in. -</p> - -<h3>Nordic PGDay</h3> -<p> -In 2018, Nordic PGDay was held in Oslo, Norway, with 109 attendees and 7 -talks. -</p> - -<h3>pgDay Paris</h3> -<p> -In 2018, PGDay Paris attracted 151 attendees. -</p> - -<h3>PGConf.DE</h3> -<p> -We didn't have it last year, but it came back with 181 attendees. Another huge -success. -</p> - -<h3>Upcoming events</h3> -<p> -PGConf.EU will of course come back again, this year in Lisbon (Portugal). -We're still working on the details. More information will come later. -</p> - -<p> -As always, we invite our members who are interested in working on a regional -PGDay to contact us if we can be of any assistance at all, whether just in -answering questions, or through organisational or financial aid. More -information can be found at <a -href="/events/">https://www.postgresql.eu/events/</a>. -</p> - -<h3>Legal</h3> - -<h4>Sponsorship contracts</h4> - -<p> -We have template-ised the sponsorship contracts that we use for events so they -can be easily generated using LaTeX. Periodically we have these contracts -reviewed by legal counsel to ensure that changes made over time are -appropriate. A review was carried out in October 2017, from which the only -suggestion was that we have the liability limitation clause reviewed by a -French lawyer as it is currently written in an English style. This has not yet -been done. -</p> - -<h4>Trademarks</h4> - -<p> -On 7th February 2018 the board posted an article detailing a number of -initiatives in progress to protect the reputation of the PostgreSQL Europe -events. What was not shared at that time (because applications were in- -progress) was that we were trademarking a number of terms, specifically, -"PostgreSQL Conference", "Postgres Conference", "PGDay" and "PGConf". These -trademarks have now been registered by EUIPO following their Fast Track -process. A policy has been drawn up and published that allows events to use -these trademarks provided they follow the <a -href="https://www.postgresql.org/community/recognition/#conferences">PostgreSQL -Community Event Guidelines</a>. -</p> - -{%endblock%} diff --git a/template/pages/about/ga/2018/financialreport.html b/template/pages/about/ga/2018/financialreport.html deleted file mode 100644 index f406ded1..00000000 --- a/template/pages/about/ga/2018/financialreport.html +++ /dev/null @@ -1,288 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2018 General Assembly - Financial report{%endblock%} -{%block content%} -<h1>2018 General Assembly - Financial report</h1> - -<h2 >Assets</h2> - -<table> - <tr> - <td><strong>Accounts</strong></td> - <td><strong>2017-01-01</strong></td> - <td><strong>2017-12-31</strong></td> - <td><strong>Difference</strong></td> - </tr> - <tr> - <td>Crédit Mutuel checking account</td> - <td align="right"> 77,418.89</td> - <td align="right"> 92,009.73</td> - <td align="right"> 14,590.84</td> - </tr> - <tr> - <td>Crédit Mutuel saving account - 1</td> - <td align="right"> 61,284.35</td> - <td align="right"> 61,743.98</td> - <td align="right"> 459.63</td> - </tr> - <tr> - <td>Crédit Mutuel saving account - 2</td> - <td align="right"> 0.00</td> - <td align="right"> 10,000.00</td> - <td align="right"> 10,000.00</td> - </tr> - <tr> - <td>Paypal account</td> - <td align="right"> 7,785.42</td> - <td align="right"> 5,918.82</td> - <td align="right">-1,866.60</td> - </tr> - <tr> - <td>Adyen account</td> - <td align="right"> 500.00</td> - <td align="right"> 1,000.00</td> - <td align="right"> 500.00</td> - </tr> - <tr> - <td>Adyen account</td> - <td align="right"> 2.00</td> - <td align="right"> 1,532.00</td> - <td align="right"> 1,530.00</td> - </tr> - <tr> - <td>Pending creditcard payments</td> - <td align="right"> 78.64</td> - <td align="right"> 249.38</td> - <td align="right"> 170.74</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right"><em>147,069.30</em></td> - <td align="right"><em>172,453.91</em></td> - <td align="right"><em> 25,384.61</em></td> - </tr> -</table> -<p>The <a href="/media/pdf/pgeu_balance_2018.pdf">full balance report</a> is also available.</p> - -<p> -While the overall goal of PostgreSQL Europe is to break even, we did again see -a net gain in 2017. It's lower than last year, because of the taxes we now -pay. -</p> - -<h2>Major items</h2> - -<h3>Activities</h3> -<p> -We now have two savings accounts. They both act as a buffer to cover -unexpected costs. The first one has not been used during 2017 since all events -have generated satisfactory financial results (exceeding or hitting budget) -due to good sponsor incomes. The only transaction in the account during 2017 -was an interest income of 459.63€. As the events grow larger - PGConf.EU 2017 -was our biggest event to date - and the number of events increase, the -importance of this buffer remains. -</p> - -<p> -Our administrative backend software, which powers both our financial reporting -as well as the events, was again further improved ensuring safe operation of -our events. -</p> - -<p> -For the first time in PostgreSQL Europe history, we had to deal with taxes and -VAT. It didn't come without issues. -</p> - -<p> -In 2017, we charged VAT for some companies when we shouldn't have. For other -companies, we haven't charged VAT when we should have. For the latter, we -didn't ask them to pay. For the former, we reimbursed each company that gave -us their bank information for us to transfer them the money. On the 14 -companies, only 5 gave us their bank informations and got reimbursed. -</p> - -<p> -In 2018, we charged VAT for american companies when we shouldn't have. All -companies (5) have been reimbursed. -</p> - -<p> -We should now have no more issues on VAT. -</p> - -<h3>Income/Expenses</h3> - -<p> - Important items are summarized here, but - the <a href="/media/pdf/pgeu_results_2018.pdf">full results report</a> - is also available. -</p> - -<table> - <tr> - <td><strong>Items</strong></td> - <td align="right"><strong>Income</strong></td> - <td align="right"><strong>Expenses</strong></td> - <td align="right"><strong>Final results</strong></td> - </tr> - <tr> - <td>Membership</td> - <td align="right">640.00</td> - <td align="right">0</td> - <td align="right">640.00</td> - </tr> - <tr> - <td>Donations</td> - <td align="right">3,708.29</td> - <td align="right">0.00</td> - <td align="right">3,708.29</td> - </tr> - <tr> - <td>Conferences</td> - <td align="right">204,406.86</td> - <td align="right">-157,424.96</td> - <td align="right">46,981.90</td> - </tr> - <tr> - <td>Merchandise</td> - <td align="right">5,137.57</td> - <td align="right">-7,659.17</td> - <td align="right">-2,521.60</td> - </tr> - <tr> - <td>Financial</td> - <td align="right">459.63</td> - <td align="right">-11,649.68</td> - <td align="right">-11,190.05</td> - </tr> - <tr> - <td>Insurance</td> - <td align="right">0.00</td> - <td align="right">-520.65</td> - <td align="right">-520.65</td> - </tr> - <tr> - <td>Taxes</td> - <td align="right">0.00</td> - <td align="right">-31,440.00</td> - <td align="right">-31,440.00</td> - </tr> - <tr> - <td>Other</td> - <td align="right">0.00</td> - <td align="right">-4,987.57</td> - <td align="right">-4,987.57</td> - </tr> - <tr> - <td><em>Total</em></td> - <td></td> - <td></td> - <td align="right"><em>670.32</em></td> - </tr> -</table> - -<p> -[0] _Other_ includes consumables etc. -</p> - -<p> -For once, we don't gain a lot. This mostly due to the payment of taxes and the -payments to the accounting company. -</p> - -<p> -The financial results for our events can be seen broken down per conference in -the table below. -</p> - -<table> - <tr> - <td><strong>Event</strong></td> - <td align="right"><strong>Income</strong></td> - <td align="right"><strong>Expenses</strong></td> - <td align="right"><strong>Final results</strong></td> - </tr> - <tr> - <td>FOSDEM/PGDay 2017</td> - <td align="right">3,239.28</td> - <td align="right">2,853.33</td> - <td align="right">385.95</td> - </tr> - <tr> - <td>Nordic PGDay 2017</td> - <td align="right">14,160.00</td> - <td align="right">13,443.84</td> - <td align="right">716.16</td> - </tr> - <tr> - <td>PGDay Paris 2017</td> - <td align="right">11,929.30</td> - <td align="right">9,618.92</td> - <td align="right">2,310.38</td> - </tr> - <tr> - <td>PGConf.EU 2017</td> - <td align="right">154,456.44</td> - <td align="right">117,322.14</td> - <td align="right">37,134.30</td> - </tr> -</table> - -<p> -FOSDEM, PGDay Paris, and PGConf.EU 2017 are events held early in the year and -thus have transactions on both this and next year's report. Complete sums for -FOSDEM 2017, PGDay Paris 2017, and PGConf.EU 2017 are listed below broken down -per year. -</p> - -<table> - <tr> - <td colspan="2"><strong>FOSDEM PGDay 2017</strong></td> - </tr> - <tr> - <td>Final Result 2016</td> - <td align="right">-8,121.20</td> - </tr> - <tr> - <td>Final Result 2017</td> - <td align="right">385.95</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right">-7,735.25</td> - </tr> - - <tr> - <td colspan="2"><strong>Nordic PGDay 2017</strong></td> - </tr> - <tr> - <td>Final Result 2016</td> - <td align="right">-1,200.00</td> - </tr> - <tr> - <td>Final Result 2017</td> - <td align="right">2,310.38</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right">1,110.38</td> - </tr> - - <tr> - <td colspan="2"><strong>PGConf.EU 2017</strong></td> - </tr> - <tr> - <td>Final Result 2016</td> - <td align="right">-116.40</td> - </tr> - <tr> - <td>Final Result 2017</td> - <td align="right">37,134.30</td> - </tr> - <tr> - <td><em>Total</em></td> - <td align="right">37,017.90</td> - </tr> -</table> - -{%endblock%} diff --git a/template/pages/about/ga/2018/minutes.html b/template/pages/about/ga/2018/minutes.html deleted file mode 100644 index cd68c028..00000000 --- a/template/pages/about/ga/2018/minutes.html +++ /dev/null @@ -1,199 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}2018 General Assembly - Minutes{%endblock%} -{%block content%} -<h1>2018 GENERAL ASSEMBLY MINUTES</h1> - -<p> -Association PostgreSQL Europe<br/> -13 rue du Square Carpeaux<br/> -75018 PARIS<br/> -</p> - -<h2>People attending the meeting</h2> - -<ul> - <li>Andreas Karlsson (kandreas)</li> - <li>Andreas Scherbaum (ads)</li> - <li>Balázs Bárány (BBarany)</li> - <li>Bruno Friedmann (tigerfoot)</li> - <li>Charles Clavadetscher (cclavadetscher)</li> - <li>Christian Elmerot (Chreo)</li> - <li>Christoph Moench-Tegeder (cmt_)</li> - <li>Daniel Gustafsson (dege)</li> - <li>Dave Page (pgSnake)</li> - <li>Eric Veldhuyzen ([Terra])</li> - <li>Greg (thestark)</li> - <li>Guillaume Lelarge (gleu)</li> - <li>Gunnar "Nick" Bluth (nickbluth)</li> - <li>Harald Armin Massa (ghum)</li> - <li>Ilya Kosmodemiansky (hydrobiont)</li> - <li>Jean-Christophe ARNU (jca)</li> - <li>Jonathan S. Katz (jkatz05)</li> - <li>Julien Rouhaud (rjuju)</li> - <li>Jürgen Purtz (JuergenPu)</li> - <li>Lætitia Avrot (laetitia)</li> - <li>Magnus Hagander (magnush)</li> - <li>Michael (mr_)</li> - <li>Pavel Golub (pasha_golub)</li> - <li>Robert Ivens (Possible)</li> - <li>Stefanie Janine Stölting (stefanie_)</li> - <li>Stefan Kaltenbrunner (mastermind)</li> - <li>Stéphane Schildknecht (SAS)</li> - <li>Tobias Bussmann (TobiasBussmann)</li> - <li>Vik Fearing (xocolatl)</li> -</ul> - -<p>The first GA, which happened on June, 4th, 2018, didn't meet the quorum. These minutes is for the second GA meeting. As such, no quorum is needed. Thus, the meeting is valid.</p> - -<p>Magnus Hagander is the president and Guillaume Lelarge is the secretary of the GA meeting.</p> - -<p>Meeting starts at 21:01 (2018-06-11), on the IRC network freenode.net, channel #pgeu-ga2018. Language is english, the report is available in english and french.</p> - -<p>The agenda is:</p> - -<ul> - <li>activities report for 2017,</li> - <li>financial report for 2017,</li> - <li>Statute changes,</li> - <li>2017 activities (and some early in 2018).</li> -</ul> - -<h2>Activities report</h2> - -<p>Magnus Hagander gave a brief summarization of the Activities report.</p> - -<p>Several questions were asked:</p> - -<ul> - <li>Are the trademarks only Europe or does pgconf.us have any concerns? - <ul><li>The trademarks are only registered in Europe.</li></ul> - </li> - <li>Is the June time frame for the GA will now be the rule? - <ul><li>Yes, that is what we can expect. We would like the process to be faster, but it's not been so far. We don't get any advance notice from the accountants on how long it will take, but only that we can be sure it won't be january/february like before.</li></ul> - </li> -</ul> - -<p>Votes: 19 voted Yes out of 22 present in the channel. 3 didn't vote.</p> - -<p>Thus, the activities report is approved.</p> - -<h2>Financial report</h2> - -<p>Guillaume Lelarge gave a brief summarization of the Financial report.</p> - -<p> -Several questions were asked: -</p> - -<ul> - <li>Is the tax situation now final? I mean that PG EU is now a non-profit organization which pays taxes and must include VAT for events. - <ul><li>Yes, the french agency made this decision, and there's no way, at least to our knowledge, to change that.</li></ul> - </li> - <li>What was the reason for that decision? - <ul><li>Basically, we had a turnover over a certain amount of euros. It's actually a general EU directive that's making countries add VAT to non profits in a lot of scenarios. It's differently implemented in different places, but it's a cross-EU movement. Then we also have income tax on it, which I believe is just a french rule. But it's really the VAT that's causing all the work.</li></ul> - </li> -</ul> - -<p>Votes: 19 voted Yes out of 22 present in the channel. 3 didn't vote.</p> - -<p>Thus, the financial report is approved.</p> - -<h2>Statutes changes</h2> - -<p>Dave Page gave a brief summarization of the statutes changes the board wants to make.</p> - -<p>There are 3 changes proposed, to resolve 2 potential problems. The first two changes are linked. They are intended to ensure that we do not get into a situation where we have a turnover of directors of more than 50% in any single election. If we do so, then we potentially lose a lot of experience and institutional knowledge, and put undue pressure on the remaining directors. The first change is to fix the number of directors. Currently, this can be determined by the board, but, in the future, it would require a member vote to add or remove director positions. The second change is to increase the term of service for directors from 2 to 3 years. This number ties in with the proposed fixed number of directors in that it ensures < 50% turnover every year.</p> - -<p>Some questions were asked:</p> - -<ul> - <li>What is the new election schedule? If it's still 2+3, then there is still the possibility of a large turnover. - <ul><li>It is expected that one or more directors will step down early in order to enable staggering of elections under the new term. That will be a matter for the board to figure out at the time, but isn't something that would be written into the statutes.</li></ul> - </li> - <li>So it would be 2+2+1 over the three years? - <ul><li>Yes.</li></ul> - </li> - <li>Can't people step down whenever they want anyways? - <ul><li>Yes, but that's not a regular turnover.</li></ul> - </li> - <li>How was the number 5 chosen? - <ul><li>It's the number of directors that we have now, and seems to be working well. With too few, there aren't enough hands. With too many, it can be harder to reach consensus. We've also seen similar organisations with lots of directors, many of whom just end up being silent most of the time.</li></ul> - </li> -</ul> - -<p>Votes: 17 voted Yes out of 22 present in the channel. 1 voted No. 4 didn't vote.</p> - -<p>One more question was asked:</p> - -<ul> - <li>May we ask why you (Guillaume Lelarge) voted against? since you're a board member and all... - <ul><li>Guillaume Lelarge: I'm against fixing the number of directors. Otherwise, I'm fine with the rest.</li></ul> - </li> -</ul> - -<p>Dave Page says that it's worth noting that whilst the board will act as one once a decision is made, here (and in board meetings), everyone is entitled to their opinion.</p> - -<p>We realise that there is currently a possibility for the Association to be "taken over" by a hostile company. They could potentially pay for a lot of members, and then vote in their own people over 2 elections. The third proposed change prevents that happening by ensuring that the board of directors cannot have more than 50% of directors be from the same company (or group company). We'd like to point out that this rule (the 50% one now suggested by Dave Page) is something that other parts of the PostgreSQL community has in an informal matter, such as the -core team. This basically just formalizes what has been a common practice before, and that is a bigger risk in an organisation like ours.</p> - -<ul> - <li>50% of 5 is 2.5, right. Does that mean 2 people from the same company? Isn't one more than enough? - <ul><li>Yes, it means maximum 2 of the same company, the point being that no company can get majority. If we require 5 board members from 5 different companies, we don't think we would continue as an organisation for very long. It would make it too hard to find new directors.</li></ul> - </li> - <li>So in the current statutes, the president has the final vote on a tie, how does that interact with the 50% rule? - <ul><li>There can be no tie in the event of 5 directors (except when one director is absent or does not vote).</li></ul> - </li> - <li>How many directors on -core ? - <ul><li>Core team currently has 5 members, though they aren't directors (it's not a formal org).</li></ul> - </li> - <li>Oh, what happens when people change companies? Do they have to step down of they break the rule? - <ul><li>We can, and should, of course not prevent directors from switching company. However, if they do switch in a way that breaks the 2-from-5 rule, they have to step down. It's written in the new statutes.</li></ul> - </li> -</ul> - -<p>Votes: 16 voted Yes out of 22 present in the channel. 4 voted No. 2 didn't vote.</p> - -<p>We also repeat the invitation to those that voted no, to propose what they would like to see the changes be, if they would like to see different changes instead of this. You can do this either to the board, and we will prepare something together with you, or you can propose it directly to the next GA if you prefer.</p> - -<h2>2017 activities, and the first 2018 activities</h2> - -<p>Magnus Hagander gave a brief summarization of next year's activities (see the Activities report).</p> - -<p>Some questions were asked:</p> - -<ul> - <li>I (Vik Fearing) would add that pgDay Paris is also planned - <ul><li>Strictly speaking, pgday.paris has not been approved by the board for running again next year, but we were just going to mention that one and nordic pgday as very likely to run but not formally decided yet.</li></ul> - </li> - <li>And PGday Amsterdam? - <ul><li>pgday.amsterdam is not run by PGEU. pgday.amsterday is an EnterpriseDB event, though it is intended as a community event, unlike PG Vision.</li></ul> - </li> - <li>What will PGEU do if the events are moved away? - <ul><li>It will still basically be PGEU that does it. They will just do it through a subsidary, for accounting purposes. It will still 100% be PGEU control and work.</li></ul> - </li> - <li>OK, but what else does PGEU actually do? - <ul><li>Memberships. Attendance at non-PGEU events (like the fosdem devroom and booth, and representation at other events).</li></ul> - </li> - <li>Will the subsidiary have its own board? - <ul><li>These are details that are simply not known yet. Note that this is not something that is actually decided, we are still investigating the options. Most likely, it will be another GA for making a decision on the topic once we are ready.</li></ul> - </li> - <li>This year GA shows pretty clear, that there were a lot of issues which needed to be addressed, but were postponed for various reasons (trademarks, changes to statutes etc). Does that show that board should have some sort of TODO-list like postgres itself, to give a clue to members if they could help? - <ul><li>Nothing was postponed. The actual work was done on trademarks and drafting statute changes on time.</li></ul> - </li> - <li>Anyway, if the board is open to discussion from the membership about the events thing, is there an appropriate public forum for it? - <ul><li>The board definitely is. At this point, I would invite you to address the board directly in that question. Of course, it will all come into a public proposal at some point, at which point it will be open for public discussion. I (Magnus Hagander) personally think it's too early to draw it up in a public discussion yet, we simply don't know enough yet. But if you explicitly want to do it in public discussion you are of course allowed to do so (this is an open org after all). In that case, the correct venue is the pgeu-general mailinglist. In fact, if there are other people also interested in discussing this particular question, we could set up a working group specifically for it, that is not just the board. It would be better than flooding the -eu list with a long thread. So if anybody else wants to be part of this working group, please contact the board directly.</li></ul> - </li> - <li>What is the board planning to do about quorum for the first meeting? - <ul><li>The board currently has no plans on that one, and it's not a board question. this is something that would be proposed by somebody (either the board or a member) for next year's GA.</li></ul> - </li> -</ul> - -<p>No votes.</p> - -<p>Meeting ends at 22:41.</p> - -<ul> -<li>Magnus Hagander, President</li> -<li>Guillaume Lelarge, Treasurer</li> -</ul> - -{%endblock%} diff --git a/template/pages/about/membership.html b/template/pages/about/membership.html deleted file mode 100644 index 43691b3f..00000000 --- a/template/pages/about/membership.html +++ /dev/null @@ -1,36 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}Membership{%endblock%} -{%block content%} -<h1>Membership</h1> - -<p> -All persons living in Europe -(the <a href="http://en.wikipedia.org/wiki/Europe">geographical</a> region, -not restricted to the European Union), specifically including <i>all</i> of -Turkey and Russia, not just the parts limited to geographical Europe, can -apply for membership. -<p> - -<p> -The <a href="/about/board">board</a> will normally -<a href="/about/statutes">approve</a> all membership requests from within -this region, but reserves the right to reject a request if deemed necessary. -The board also reserves the right to grant special exceptions to the rule and -approve a membership request from outside Europe. -</p> - -<p> -A member will be required to pay a bi-annual membership fee to become and remain -a member. This fee is currently <i>€10 for each 2-year period</i>. This fee -can be changed at any time by a decision of the board, in which case all existing -memberships will continue to be valid based on their current payment up until -the next renewal, at which point the new fee will take effect. -</p> - -<p> -Membership is registered on the -<a href="/membership/">PostgreSQL Europe website</a>, -and must be paid through one of the methods provided on this website. -</p> - -{%endblock%} diff --git a/template/pages/about/privacypolicy.html b/template/pages/about/privacypolicy.html deleted file mode 100644 index 88154df9..00000000 --- a/template/pages/about/privacypolicy.html +++ /dev/null @@ -1,67 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}Privacy policy{%endblock%} -{%block content%} -<h1>Privacy policy</h1> - -<p> -We store information such as your email address, name and locality only if you decide -to send us such information by using one of our systems. In particular, we collect -and store the following data, based on which parts of our site you use: -</p> - -<h2>Membership</h2> -<p> - When signing up as a member, we will store your email address, full name and country. - If you choose to have your membership listed publicly, this information is listed - on our website. If not, the data is never shared with anybody, except if required - by law. We store this information permanently so that we can communicate with members - regarding association events such as elections, and send reminders about membership - expiry etc. -</p> -<p> - If you have voted in our elections, we store your vote so that you can review it - in the future, and for auditing purposes. -</p> - -<h2>Event registrations</h2> -<p> - If you have registered for an event (including conferences) managed - by PostgreSQL Europe, we will collect and store the personal data - required to perform this. This includes your name, email, address, - country, company association and may include things like selected - tshirt size and dietary requirements. -</p> -<p> - Unless you explicitly requested to, this data is not shared with any other organizations - except as required to perform the event (for example, we must give the catering - venue information about dietary requirements) or as required by law. -</p> -<p> - Once an event has completed, sensitive personal data such as dietary requirements, - phone numbers and addresses are purged. We retain your email address and name so that - we are able to communicate with you about future events. At any time you can opt out - of such communications using our <a href="/events/optout/">opt-out</a> interface. -</p> - -<h2>Invoices and payments</h2> -<p> - If you have performed a payment of one of our invoices, we will keep a copy of this - invoice as well as the related accounting records for accounting and compliance reasons. - Your name and address as entered on the invoice will be part of this, as well as your - email address. We will also permanently store a record of the payment transaction in - the form of a payment reference, but we never store (short or long term) a - creditcard number, bank account number, or other payment related personal data. -</p> -<p> - This data is shared with our accountants as required for them to review our finances, - and to process our taxes. -</p> - -<h2>Logs</h2> -<p> - Our systems will store logs for each web request that happens, in order to facilitate - tracking down issues. These logs are automatically deleted after a maximum of 12 weeks. - Personal data other than IP addresses is never stored in these logs. -</p> - -{%endblock%} diff --git a/template/pages/about/statutes.html b/template/pages/about/statutes.html deleted file mode 100644 index 4cc1f0c0..00000000 --- a/template/pages/about/statutes.html +++ /dev/null @@ -1,352 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}Statutes{%endblock%} -{%block content%} -<h1>Statutes</h1> - -<h2>Article 1 - Constitution</h2> - -<p> - An association, governed by the French law of July 1, 1901 and the - French decree of August 16, 1901, is instituted between the - undersigned and any individuals or legal entities adhering to the - present statutes. -</p> - -<p> - The association shall be called : "PostgreSQL Europe". -</p> - -<h2>Article 2 - Objectives</h2> -<p> - The association has as its objectives the promotion, the support for - deployment and the development of the open-source software PostgreSQL and - its derivatives (and related projects) in Europe. -</p> - -<h2>Article 3 - Registered Office</h2> -<p> - The registered office of the association is at Carpeaux Diem, 13 rue du - square carpeaux, 75018 Paris, France. -</p> -<p> - This registered office can be transferred by simple decision of the - Board of Directors. -</p> - -<h2>Article 4 - Duration</h2> -<p> - The duration of the association is unlimited. -</p> - -<h2>Article 5 - Members of the association</h2> -<p> - The association is composed of: -</p> -<ul> - <li>Active members;</li> - <li>Honorary members;</li> -</ul> -<p> - Any individual resident in Europe can be an active member of the - association, - provided he/she pays the recurring membership fee. The Board of Directors - may restrict - an individual from being a member, or allow a non-European resident - to become one at their discretion. -</p> -<p> - Honorary members are those who have rendered services to the - association. They are appointed by decision of the Board of - Directors, to be validated by the following General Assembly. -</p> - - -<h2>Article 6 - Loss of membership</h2> -<p> - Membership is lost by -</p> -<ul> - <li>sending a letter of resignation to the Board of Directors;</li> - <li>death;</li> - <li>being excluded by decision of the Board of Directors for some serious - reason, after having been given an opportunity to offer explanations to - the Board; - </li> - <li>failing to pay the membership or renewal fee.</li> -</ul> - - -<h2>Article 7 - General Assembly</h2> -<p> - The supreme body of the association is the General Assembly of the - active members, which meets in ordinary session once a year. - Furthermore the General Assembly meets as often as necessary in - extraordinary session when convened by the President of the association, at - the request of the majority of the Board of Directors, or at the request of - at least 25% of active members. -</p> -<p> - The General Assembly can be arranged, as chosen by the Board of - Directors, either in the form of a gathering of people or in the form - of a remote meeting. Meetings by teleconference, mailing list or Internet - Relay Chat - (IRC) are valid. -</p> -<p> - The General Assembly will vote on issues using a Web based system over the - internet. Each active member has one vote, and there is no tiering or - exclusion. -</p> -<p> - The activities report and the financial report, as well as any - information relating to the agenda will be sent to members by email or - otherwise at least - 7 days before the meeting. -</p> -<p> - Any member of the association may place an item on the agenda; any item for - the agenda must be received by the Secretary no later than 8 days before the - meeting. The General Assembly deliberates on all the items on the agenda as - amended. -</p> -<p> - The decisions of the General Assembly shall be taken by a majority of active - members participating. - In the event of a tie, the sitting President shall have a deciding vote. -</p> -<p> - For the General Assembly to be validly constituted a quorum of 30% of the - total number of members must be present or represented. If the General - Assembly is expected to deliberate on the continued existence of the - association, the quorum must be 50%. In the absence of a quorum, a new - General Assembly will be held after at least 7 days and within 30 days, and - it will then deliberate without quorum. -</p> -<p> - The General Assembly elects the Board of Directors. -</p> - - -<h2>Article 8 - Board of Directors</h2> -<p> - The Board of Directors ensures that the decisions taken by the General - Assembly are executed. -</p> -<p> - The association is managed by its Board of Directors, composed of 5 members, - elected by the General Assembly from among the active members. In the event - that the number of Directors falls below that number, the Board must co-opt - a replacement member without undue delay. -</p> -<p> - Members of the Board of Directors are elected for 3 years. Retiring - directors - are eligible for re-election. -</p> -<p> - In the event of a vacancy, the Board of Directors provides for - temporary replacement of its members by cooption. Cooptions - have to be ratified by the next General Assembly to become - permanent. A coopted member's mandate comes to an end at the end of the - mandate of the - member he replaces. -</p> -<p> - The number of Directors employed by a single company or different companies - with the same ultimate ownership or under the same ultimate control must be - less than 50% of the total number of Board Members. In the event that a - Director steps down causing this rule to be breached, a replacement Director - must be co-opted without undue delay. In the event that a Director accepts a - new position with a company causing this rule to be breached, he or she must - step down and a replacement co-opted without undue delay. In the event that - the appointment of a Director following a Board election would cause this - rule to be breached, the first runner-up who would not cause the rule to be - breached must be appointed instead. No binding contracts, agreements, or - payments over 10,000€ (except where previously contractually agreed) may be - approved whilst in breach of this rule. -</p> -<p> - The decisions of the Board of Directors shall be taken by a simple majority - of present or represented members. In the event of a tie for any action, the - President shall have - a deciding vote. -</p> -<p> - The Board of Directors must approve any contract signed between the - association and individuals or legal entities. -</p> -<p> - Any member of the Board of Directors can be removed at any time by the - General Assembly, meeting in ordinary or extraordinary session. - A member of the Board of Directors can be removed by the Board after three - unexplained absences from meetings of the Board of Directors. -</p> -<p> - Any members of the association, or any non-members, may attend meetings of - the Board of Directors at the Board's request, if the Board of Directors - considers their presence is required. These persons have only an advisory - capacity, and therefore do not participate in the voting. -</p> -<p> - The first Board of Directors is composed of : -</p> -<ul> - <li>Jean-Paul ARGUDO, born January 08th, 1974 in Avignon (France), of French - nationality, DBA - </li> - <li>Gabriele BARTOLINI, born April 27th, 1975 in Prato (Italy), of Italian - nationality, employee - </li> - <li>Magnus Hagander, born February 19th, 1976 in Sollentuna (Sweden), of - Swedish nationality, employee - </li> - <li>Andreas Scherbaum, born April 6th, 1976 in Schönebeck (Germany), of - German nationality, independant worker - </li> -</ul> - - -<h2>Article 9 - Executive Committee</h2> -<p> - The Executive Committee is responsible for the management and administration - of the association. -</p> -<p> - The Board of Directors elects from among its members an Executive Committee - composed of : -</p> -<ul> - <li>A President;</li> - <li>A Treasurer;</li> - <li>A Secretary.</li> -</ul> -<p> - The members of the Executive Committee are elected for a term of one year, - renewable. -</p> -<p> - The outgoing Executive Committee continues to carry out its duties until the - election - of a new Executive Committee. -</p> -<p> - At any time the Board of Directors can be called by any of its members - to hold an election of a new Executive Committee. -</p> -<p> - The decisions of the Executive Committee are made by a simple majority. In - the event of a tie for any action, the President shall have a deciding vote. -</p> -<p> - In the event of a vacancy on the Executive Committee, for whatever reason, - the outgoing member shall be replaced at the next meeting of the Board of - Directors. The end of the replacement's mandate shall be the same as that of - the outgoing member. -</p> -<p> - The President shall manage the association, and call and preside over the - General Assemblies. - The President directs and also calls meetings of the Board of Directors and - Executive Committee. -</p> -<p> - Only the President has the power to sign any document committing the - association. He may grant partial delegations of authority to any member of - the Executive Committee or any other person, to empower them to sign - documents and manage the accounts of the association. -</p> -<p> - The president represents the association in all acts of civil life, and is - vested with the necessary powers. He concludes any agreement with - individuals or legal persons, provided that he has the authorization of the - Board of Directors. In this capacity, he signs contracts on behalf - of the association. The president is entitled to conduct any dealings with - any public body, particularly in tax matters, and to open any bank or post - office account. He acts in legal matters on behalf of the - association, with the permission of the Executive Committee, whether to make - claims on behalf of the association or to defend it. -</p> -<p> - In case of absence or illness, he is replaced by the Treasurer, or failing - him, one of the other members of the Executive Committee. -</p> -<p> - The Treasurer is responsible for keeping the association's accounts under - his own control. He collects revenues and makes payments, subject to - authorization by the President. He presents an annual statement of accounts - to the General Assembly. In his absence, the treasurer is replaced by - another member of the Board of Directors appointed by the President. -</p> -<p> - The Secretary is responsible in particular for keeping the minutes of the - Board of Directors meetings and to keep the register required by law. In his - absence, he is replaced by a member of the Board of Directors appointed by - the President. -</p> -<p> - The first Executive Committee is composed of: -</p> -<ul> - <li>Magnus HAGANDER, President;</li> - <li>Jean-Paul ARGUDO, Treasurer;</li> - <li>Andreas SCHERBAUM, Secretary</li> -</ul> - -<h2>Article 10-Free mandate</h2> -<p> - Members of the association shall not receive any compensation for performing - their duties. However they can obtain the payment of expenses incurred on - behalf of the association, provided these expenses are justified and - approved by the Executive Committee -</p> - -<h2>Article 11 - Resources and subscriptions</h2> -<p> - The resources of the association come from membership contributions, - donations, grants, participation of associate members, as well as potential - products of its activity. -</p> - -<h2>Article 12 - Use of the logo of the Association</h2> -<p> - Members of the association may refer to their membership in the association, - provided that they respect the association's aims and ethics. -</p> - - -<h2>Article 13 - Representation and benefits</h2> -<p> - Any act or service to be performed for the benefit of third parties on - behalf of the association by one of its members must be authorized by the - President. If an act or service on behalf of the association is paid, any - monies received must be paid to the Treasurer, who is the sole person - authorised to receive money for the association. -</p> -<p> - The remuneration of services performed on behalf of the association must be - authorised by the president, or any person authorized by him. -</p> - -<h2>Article 14 - Statutes</h2> -<p> - No modification of or addition to these statutes shall be made except by a - majority of not less than 2/3 of members voting at a meeting of the General - Assembly of the association -</p> - - -<h2>Article 15 - Dissolution</h2> -<p> - The dissolution of the association may be pronounced only by an - extraordinary General Assembly, called specifically for this purpose. -</p> -<p> - To do this, a majority of 2/3 of the voters must be obtained. One or more - liquidators will be appointed by the General Assembly, who will give the - assets of the Association to one or more non-profit organizations pursuing - similar goals. -</p> -<p> - Paris, France, June 11th, 2018. -</p> -{%endblock%} diff --git a/template/pages/about/trademarks.html b/template/pages/about/trademarks.html deleted file mode 100644 index debd6f16..00000000 --- a/template/pages/about/trademarks.html +++ /dev/null @@ -1,44 +0,0 @@ -{%extends "nav_about.html"%} -{%block title%}Trademarks{%endblock%} -{%block content%} -<h1>Trademarks</h1> - -<p> -The following phrases are registered trademarks owned by PostgreSQL Europe: -</p> -<ul> - <li>PGConf</li> - <li>PGDay</li> - <li>Postgres Conference</li> - <li>PostgreSQL Conference</li> -</ul> - -<p> -PostgreSQL Europe allows these trademarks to be used at zero cost under the - following conditions: -</p> - -<ol> - <li>The mark or marks must be used in relation to a conference or event - intended to promote, educate on and generally further the - <a href="https://www.postgresql.org/">PostgreSQL Database project</a>, - and the community supporting it.</li> - <li>Events must comply with the - <a href="https://www.postgresql.org/community/recognition/#conferences"> - Community Conference Recognition</a> guidelines, as published on - the PostgreSQL website.</li> - <li>Event websites and any printed programmes, proceedings or prospectuses - should include an acknowledgement of the marks used. For example; - <i>"PGConf" and "PostgreSQL Conference" are registered trademarks of - PostgreSQL Europe.</i></li> -</ol> - -<p>A notification of the use of any of the marks and the purpose would be - appreciated to <b>board(at)postgresql.eu</b>. This will help us understand - the usage of the marks and give an opportunity for further publicity and - engagement around your event. -</p> - -<p>This policy may be updated at any time. In that event, a notice will be sent - to the pgeu-general@postgresql.org mailing list.</p> -{%endblock%} diff --git a/template/pages/community.html b/template/pages/community.html deleted file mode 100644 index b3d4c4ae..00000000 --- a/template/pages/community.html +++ /dev/null @@ -1,28 +0,0 @@ -{%extends "nav_community.html"%} -{%block title%}Community{%endblock%} -{%block content%} -<h1>Community</h1> - -<p> -PostgreSQL Europe is made up of it's member and the greater European -community. We encourage everybody, both our members and other -PostgreSQL interested parties around Europe, to participate in all our -activities! -</p> - -<p> -If you want to arrange a local activity, or otherwise promote -PostgreSQL locally there are many things we can do to help. For -example, we can help -provide <a href="/community/goodies/">goodies</a>, help -with <a href="/events/services/">event management software</a>, and many more -things. Don't hesitate to <a href="/about/contact/">reach out</a> to -us if you have any questions or ideas! -</p> - -<p> - All our coordination is normally done through - the <a href="/community/lists/">mailinglists</a>, where we - encourage open discussions! -</p> -{%endblock%} diff --git a/template/pages/community/lists.html b/template/pages/community/lists.html deleted file mode 100644 index 5f709e14..00000000 --- a/template/pages/community/lists.html +++ /dev/null @@ -1,25 +0,0 @@ -{%extends "nav_community.html"%} -{%block title%}Mailinglists{%endblock%} -{%block content%} -<h1>Mailinglists</h1> - -<p> -The work and events of PostgreSQL Europe are, just like the global -PostgreSQL project, coordinated using mailinglists. Mailinglist -services are provided by the postgresql.org project. -</p> - -<p> -The following public list is available for subscription: -</p> - -<dl> - <dt><a href="https://www.postgresql.org/list/pgeu-general/">pgeu-general</a></dt> - <dd>All discussions about PostgreSQL Europe</dd> -</dl> - -<p> -More lists may be added in the future if need arises. -</p> - -{%endblock%} diff --git a/template/pages/donate.html b/template/pages/donate.html deleted file mode 100644 index 8f15c3cb..00000000 --- a/template/pages/donate.html +++ /dev/null @@ -1,53 +0,0 @@ -{%extends "nav_community.html"%} -{%block title%}Donate{%endblock%} -{%block content%} -<h1>Donate</h1> - -<p> -PostgreSQL Europe appreciates all donations from individuals and -companies in, or outside of, Europe. Large or small, everything -is appreciated. For those who wish to pay a bit more and get some -more in return, we also have sponsorship opportunities for the -<a href="/events/">events we organize</a>. -</p> - -<h2>What will my donation be used for?</h2> -<p> -All donations received by PostgreSQL Europe will be used to help promote -PostgreSQL in and around Europe. This includes, but is not limited to: -</p> -<ul> - <li>Arranging the PGConf.EU and FOSDEM PGDay European PostgreSQL conferences</li> - <li>Assisting and arranging local PostgreSQL events</li> - <li>Promotional merchandise (t-shirts, elephants, pins, flyers etc)</li> -</ul> - -<h2>Donate now!</h2> -<p> -PostgreSQL Europe is a registered non-profit organisation in France. -This may mean your donation is tax-deductible in your country. -</p> - -<h3>Donating using Paypal</h3> -<p> -To donate to PostgreSQL Europe using Paypal, send money to <i>paypal@postgresql.eu</i>, -or use the below button. You can also use this method if you want to donate -using your credit card. -</p> -<!-- form generated by paypal --> -<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top"> -<input type="hidden" name="cmd" value="_s-xclick"> -<input type="hidden" name="hosted_button_id" value="HS58CP82YUXFS"> -<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> -<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1"> -</form> -<!-- end paypal form --> - -<h3>Donating using bank transfer</h3> -<p> - If you wish to make a donation using a bank transfer, please contact - us at <i>treasurer@postgresql.eu</i> and we will provide you with the - information required to make a transfer. -</p> - -{%endblock%} diff --git a/template/pages/eventarchive.html b/template/pages/eventarchive.html deleted file mode 100644 index bcbba16c..00000000 --- a/template/pages/eventarchive.html +++ /dev/null @@ -1,15 +0,0 @@ -{%extends "nav_events.html"%} -{%block title%}Events Archive{%endblock%} -{%block content%} -<h1>Events Archive</h1> - -<p>This pages contains a list of previous events for reference.</p> - -<ul> -{%for event in events %} -<li><a href="/events/{{event.id}}">{{event.title}}</a> ({{event.pretty_date}})</li> -{%endfor%} -</ul> - -{%endblock%} - diff --git a/template/pages/events/services.html b/template/pages/events/services.html deleted file mode 100644 index 27cdb3f8..00000000 --- a/template/pages/events/services.html +++ /dev/null @@ -1,64 +0,0 @@ -{%extends "nav_events.html"%} -{%block title%}Event Services{%endblock%} -{%block content%} -<h1>Event services</h1> - -<p> -As part of our work on the annual PostgreSQL Conference Europe, we have -real-world experience on how to set up and run events. We have built a web -application that helps us to work quickly with registrations, talk submissions, -sponsors, and more. We offer that to any community organisation who wants to -build an event around PostgreSQL. We regret we're unable to assist with events -organised solely by a single PostgreSQL commercial organisation. -</p> - -<p> -For legal reasons any events that we provide support for must publicly -acknowledge our support (typically on their website), and must be considered to -be "organised by PostgreSQL Europe". -</p> - -<p> -We have many ways to help. First one is with our event webapp. It can deal -with: -</p> -<ul> - <li>registrations,</li> - <li>sponsor registration, and benefit management,</li> - <li>sessions (proposals, votes),</li> - <li>schedule,</li> - <li>payments (sponsors and attendees, discount code, batch payments are - available), and invoices,</li> - <li>feedback,</li> - <li>reporting and statistics.</li> -</ul> - -<p> -Due to their legal nature, our partnership contracts must be used. They've been -hand written in Plain English and reviewed by a lawyer. A few edits will be -needed to put the event's name, days, location, and state sponsor costs and -benefits. All changes must be agreed to by the PostgreSQL Europe Board. -</p> - -<p> -PostgreSQL Europe requires that the organization complies with these rules: -</p> -<ul> - <li>the organization should supply a working budget - <ul> - <li>we expect the event to break even, or make a modest profit,</li> - </ul> - </li> - <li>the talk committee should be fully disclosed on its website,</li> - <li>no company should have 50% or more members on the talk committee,</li> - <li>all members on the talk committee have an equal vote,</li> - <li>the organisation must not sign any legal agreements or similar paperwork - with the exception of delivery receipts from couriers etc. - <ul> - <li>any such paperwork must be signed by an authorised officer of - PostgreSQL Europe.</li> - </ul> - </li> -</ul> - -{%endblock%} diff --git a/template/pages/financial.html b/template/pages/financial.html deleted file mode 100644 index 42f4911d..00000000 --- a/template/pages/financial.html +++ /dev/null @@ -1,11 +0,0 @@ -{%extends "nav_financial.html"%} -{%block title%}Financial{%endblock%} -{%block content%} -<h1>Financial information</h1> -<p> - If you have been issued any invoices by PostgreSQL Europe, you will - be able to find them <a href="/invoices/">here</a>. Note that only - invoices connected with your logged in account will be visible on - this page! -</p> -{%endblock%} diff --git a/template/pages/merchandise.html b/template/pages/merchandise.html deleted file mode 100644 index 4f042085..00000000 --- a/template/pages/merchandise.html +++ /dev/null @@ -1,45 +0,0 @@ -{%extends "nav_community.html"%} -{%block title%}Merchandise{%endblock%} -{%block content%} -<h1>Merchandise</h1> - -<p> -We sell merchandise, such as shirts and plush elephants, exclusively at our -PostgreSQL Europe arranged events. -</p> - -<p> -We also have an <a href="http://postgresqleu.spreadshirt.net/" target="_blank"> -online store</a> with a small selection of merchandise for purchase. -</p> - -<h2>Merchandise for Events</h2> - -<p> -If you're organizing a booth or a complete event, we can send you merchandise -material, especially: -</p> - -<ul> - <li>Stickers (white, black, glowing)</li> - <li>Lanyards</li> -</ul> - -<p> -They all are free of charge. -</p> - -<p> -If you're organizing a larger event, we can provide more, such as elephants, -mugs, umbrellas, though that won't be for free. -</p> - -<p> -Keep in mind that they all are subject to availability, and that we might need some time to deliver them. -</p> - -<p> -<a href="/about/contact">Contact us</a> for more details. -</p> - -{%endblock%} diff --git a/template/pages/vat_faq.html b/template/pages/vat_faq.html deleted file mode 100644 index 9f42e8b6..00000000 --- a/template/pages/vat_faq.html +++ /dev/null @@ -1,110 +0,0 @@ -{%extends "nav_financial.html"%} -{%block title%}VAT FAQ{%endblock%} -{%block content%} -<h1>VAT FAQ</h1> - -<p> -Since the VAT registration of PostgreSQL Europe we have received -a lot of questions about how this works for us (as a French non-profit -the rules appear to be slightly different than for many regular -companies, and companies in other countries). This page attempts -to summarize some of the more frequent questions, along with the -responses we have received from our accounting firm and from -the French tax authorities. -</p> - -<p> -Please note that we issue our invoices and process VAT directly -per the instructions we have receivied from the authorities, and -as such we cannot actually <i>change</i> how it's processed, but -we will do our best to explain the situation. -</p> - -<ul> - <li><a href="#why">Why have you registered for VAT?</a></li> - <li><a href="#private">How does this affect me as a private attendee?</a></li> - <li><a href="#company_attendee">We are a VAT registered European company, how do we get our VAT number on the attendee invoice?</a></li> - <li><a href="#still_vat">We added our VAT numbers, but you are still charging VAT?</a></li> - <li><a href="#vat_sponsor_invoices">How is VAT charged on sponsorship invoices?</a></li> - <li><a href="#attendee_vat">Why are you charging X% VAT on an attendee invoice?</a></li> - <li><a href="#sponsor_vat">Why are you charging 20% VAT on sponsorship invoice?</a></li> - <li><a href="#change_invoice">We have already paid our invoice, can you please change some details?</a></li> -</ul> - -<a name="why"></a><h3>Why have you registered for VAT?</h3> -<p> - This is not something that is within our control. Basically - the authorities requires VAT registration once you have a - certain amount of money in your bank account, and due to the - expanded size of our events, we have reached this point. -</p> - -<a name="private"></a><h3>How does this affect me as a private attendee?</h3> -<p> - As long as you are paying as a private person, and not a VAT - registered business, there is no difference. We have adapted - our prices so that the new prices <i>including VAT</i> are - the same as our previous non-VAT prices. -</p> - -<a name="company_attendee"></a><h3>We are a VAT registered European company, how do we get our - VAT number on the attendee invoice?</h3> -<p> - Please make sure you include the VAT number as part of the - <i>invoice address</i>. Anything you write in the invoice - address field will be copied directly to the invoice. If you - did not do this, you can cancel your own invoice and re-issue - it as long as it has not been paid. -</p> - -<a name="still_vat"></a><h3>We added our VAT numbers, but you are still charging VAT on our attendee invoice?</h3> -<p> - This is correct. We have been instructed by the authorities that we - should charge VAT on all the attendee invoices, regardless of - whether they include a VAT number or not. As a VAT registered - business, you should be able to claim this VAT back separately with - the tax authorities. We realize this does not match the advice given - to many of our attendees by others, but we have double checked this - multiple times with the authorities and they have been very clear - that this is how we have to do it. -</p> -<p> - We do not issue reverse charge VAT invoices for attendees. -</p> - -<a name="vat_sponsor_invoices"></a><h3>How is VAT charged on sponsorship invoices?</h3> -<p> - If your organization has a valid European VAT number, enter it - on the sponsorship signup form. If this is done, and it is not a - French VAT number, we will issue a reverse charge invoice. If you do - not have a VAT number or if you are located in France or outside - the European Union, sponsorship invoices will include 20% VAT. -</p> - -<a name="attendee_vat"></a><h3>Why are you charging X% VAT on an attendee invoice?</h3> -<p> - Attendee invoices are charged the VAT rate of the country that - the event is held in. -</p> - -<a name="sponsor_vat"></a><h3>Why are you charging 20% VAT on sponsorship invoice?</h3> -<p> - Sponsorship invoices are charged 20% French VAT, regardless of where - the event is held. -</p> -<p> - This is also per the explicit instructions - from our accountants and the tax authorities, even if it can in - some ways seem strange. -</p> - -<a name="change_invoice"></a><h3>We have already paid our invoice, can you please change some details?</h3> -<p> - Once an invoice has been paid, there is nothing we can change - on it. This includes adding or removing a VAT number as well as - modifying an address or adding/removing a company name. Invoice - contents can only be changed before the invoice has been paid, by - canceling it and issuing a new one with the correct details. -</p> - -{%endblock%} diff --git a/tools/devsetup/dev_requirements.txt b/tools/devsetup/dev_requirements.txt index 10583901..8115c04f 100644 --- a/tools/devsetup/dev_requirements.txt +++ b/tools/devsetup/dev_requirements.txt @@ -2,7 +2,7 @@ Django==1.11.11 Jinja2==2.7.3 Markdown==2.6.5 MarkupSafe==0.23 -Pillow==2.6.1 +Pillow==4.0.0 argparse cryptography django-markdown==0.8.4 @@ -11,10 +11,11 @@ flup httplib2 psycopg2 pycrypto -reportlab==3.1.8 +reportlab==3.3.0 wsgiref pytz python-dateutil requests +requests-oauthlib==0.7.0 file-magic qrencode diff --git a/tools/devsetup/dev_setup.sh b/tools/devsetup/dev_setup.sh index 04ac8559..2c5eeda6 100755 --- a/tools/devsetup/dev_setup.sh +++ b/tools/devsetup/dev_setup.sh @@ -15,7 +15,7 @@ echo Verifying postgres connection... psql -w "host=$PGH port=$PGP dbname=$PGD user=$PGU" -c "SELECT 1" >/dev/null echo Verifying that pgcrypto is installed in the pgcrypto schema... -psql -w "host=$PGH port=$PGP dbname=$PGD user=$PGU" -c "SELECT pgcrypto.gen_random_uuid()" >/dev/null +psql -w "host=$PGH port=$PGP dbname=$PGD user=$PGU" -c "CREATE SCHEMA IF NOT EXISTS pgcrypto; CREATE EXTENSION IF NOT EXISTS pgcrypto SCHEMA pgcrypto; SELECT pgcrypto.gen_random_uuid()" # Start from script directory to be safe! cd "${0%/*}" @@ -45,13 +45,16 @@ EOF ln -s tools/devsetup/venv_dev/bin/python . ./python manage.py migrate +cat tools/devsetup/devserver-uwsgi.ini.tmpl | sed -e "s#%DJANGO%#$(pwd)/tools/devsetup/venv_dev#g" > devserver-uwsgi.ini + echo echo Creating a django superuser, and setting password! ./python manage.py createsuperuser -mv -f template/admin/login.html template/admin/login.html.save_no_communityauth - echo All ready to go. To start the development server, go to pwd echo and run: +echo uwsgi --ini devserver-uwsgi.ini +echo +echo or for a slightly more limited version: echo ./python manage.py runserver |