Commit 544423d7 authored by Praibait's avatar Praibait

Merge branch 'master' into InterfacePot

Mise au gout du jour de la branche pot
parents 8c751f3b 253bb0fa
# Custom #
###################
*~
\#*\#
.\#*
photos/*
photos
# garbage
......
......@@ -100,12 +100,8 @@ trusted_ips = ["127.0.0.1"]
#: Comptes qui ne peuvent se connecter que depuis certaines IPs
limited_accounts = {
3508 : ["138.231.143.192", "2a06:e042:100:4:d250:99ff:fe5a:6364",], # compte "note" seulement depuis kfet.crans.org
3932 : ["138.231.139.177", "2a06:e042:100:4:2c0:9fff:fe5a:479f", # compte "tna" seulement depuis bdeportable.crans.org
"138.231.150.81", "2a06:e042:100:c04:6e6:76ff:fe42:4868", # sasus.wifi.crans.org ordi bernie'
"138.231.150.233", "2a06:e042:100:c04:dd31:6ec8:9c10:ef92"], # tatane-pc.wifi.crans.org
4792 : ["138.231.146.94", "2a06:e042:100:c04:c2f8:daff:fe7f:93da", # compte "pr2015" seulement depuis pr2015.wifi.crans.org
"138.231.137.177","2a06:e042:100:4:ba70:f4ff:fe94:bdcf"], # pr2015.crans.org
3508 : ["138.231.143.192", "2a06:e042:100:4:d250:99ff:fe5a:6364", # compte "note" seulement depuis kfet.crans.org
"138.231.141.159", "2a06:e042:100:4:52e5:49ff:fea6:70b2",], # ou video-kfet.crans.org
}
### Mots de passe
......
......@@ -29,12 +29,13 @@ def get_data(args):
"""Récupère les données intéressantes dans la BDD"""
params = {"idbdepr" : args.idbdepr, "debut" : args.debut, "fin" : args.fin}
req_consos = """
SELECT description, sum(quantite*CAST(valide AS int)) AS quantite, ROUND(sum(montant*quantite*CAST(valide AS int))/100.0, 2) AS montant
SELECT description, sum(quantite) AS quantite, ROUND(sum(montant*quantite*CAST(valide AS int))/100.0, 2) AS montant
FROM transactions
WHERE %s
AND date >= %%(debut)s
AND date <= %%(fin)s
AND type = 'bouton'
AND valide
GROUP BY description
ORDER BY quantite DESC
;"""
......
......@@ -72,8 +72,12 @@ def send_mail(emetteur, destinataires, objet, message, cc=[], replyto=[]):
print "Sending mail :"
print mail
s = smtplib.SMTP('localhost')
s.sendmail(emetteur, destinataires, mail.as_string())
s.quit()
try:
s.sendmail(emetteur, destinataires, mail.as_string())
except:
raise
finally:
s.quit()
def getcursor(db=config.database_mails):
"""Renvoie une connexion à la base mails (ou une autre) et un curseur"""
......@@ -100,8 +104,11 @@ def postmail():
message = cur.fetchone()
if message != None:
# On l'envoie
send_mail(message["emetteur"].decode("utf-8"), message["destinataires"].decode("utf-8").split(", "),
try:
send_mail(message["emetteur"].decode("utf-8"), message["destinataires"].decode("utf-8").split(", "),
message["subject"].decode("utf-8"), message["body"].decode("utf-8"), message["cc"].decode("utf-8").split(", "), message["replyto"].decode("utf-8").split(", "))
except:
print "Erreur SMTP avec le mail à destination de ", message["destinataires"].decode("utf-8"), "(", sys.exc_info()[0], ")"
# On le stocke dans les messages envoyés
cur.execute("""INSERT INTO sent (queue_date, emetteur, destinataires, subject, body, cc, replyto)
VALUES (%(queue_date)s, %(emetteur)s, %(destinataires)s, %(subject)s, %(body)s, %(cc)s, %(replyto)s);""",
......@@ -287,4 +294,4 @@ if __name__ == "__main__":
if "-v" in sys.argv or "--debug" in sys.argv or "--verbose" in sys.argv:
DEBUG = True
if "--flush" in sys.argv:
postqueue()
postqueue(n=5)
#!/usr/bin/python
#-*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
from datetime import datetime, timedelta
from jinja2 import Environment, PackageLoader
import psycopg2, psycopg2.extras
if '/home/note/note-kfet-2015-serveur/mail/' not in sys.path:
sys.path.append('/home/note/note-kfet-2015-serveur/mail/')
from mail import queue_mail
sys.path.append('../serveur')
import BaseFonctions
emetteur = 'La Tresorerie du BdE <tresorerie.bde@lists.crans.org>'
objet = '[Note] Négatif sur la Note Kfet'
reply_to = ['tresorerie.bde@lists.crans.org',]
if __name__ == '__main__':
# Chargement du template de mail
env = Environment(loader=PackageLoader('mail', 'templates'))
template = env.get_template('template_recouvrement')
# Préparation de la connexion à la base de données
con, cur = BaseFonctions.getcursor()
cur.execute("""
SELECT comptes.idbde, comptes.nom, comptes.prenom, comptes.solde, comptes.mail
FROM (
(
SELECT DISTINCT comptes.idbde
FROM comptes
JOIN adhesions ON adhesions.idbde = comptes.idbde
WHERE comptes.solde < -500
AND adhesions.annee IN (2014, 2015)
AND comptes.type = 'personne'
)
EXCEPT
(
SELECT DISTINCT comptes.idbde
FROM comptes
JOIN adhesions ON adhesions.idbde = comptes.idbde
WHERE adhesions.annee = 2016
)
) AS resultats
JOIN comptes ON comptes.idbde = resultats.idbde
ORDER BY idbde
""")
for user in cur.fetchall():
# Récupération des inscriptions dans la base
body = template.render(user=user)
queue_mail(emetteur, [user["mail"],], objet, body, cc=[], replyto=reply_to)
Bonjour {{ user.prenom.title() }} {{ user.nom.title() }},
Ce mail t'est envoyé car ta note est actuellement en négatif de {{ user.solde / 100 }} €.
La passation approchant, nous souhaiterions que le prochain BdE puisse partir sur de bonnes bases et c'est pourquoi nous aimerions remettre ta note à zéro.
Tu peux nous aider en passant à la Kfet aux horaires d'ouverture (12h-14h / 18-24h), en déléguant un(e) ami(e) afin de le faire à ta place (pense à nous prévenir par mail à tresorerie.bde@lists.crans.org) ou simplement en faisant un virement bancaire au BdE (Titulaire: BDE ENS CACHAN; IBAN: FR76 3000 3038 9400 0372 8066 214; BIC: SOGEFRPP).
Si tu choisis de faire un virement, n'oublies pas de préciser ton nom et ton prénom dans le motif du virement.
Si tu ne comprends pas ton solde, n'hésite pas à contacter la trésorerie (tresorerie.bde@lists.crans.org) et/ou à consulter ton historique sur https://note.crans.org.
Merci à toi,
--
La Trésorerie du BdE
Bonjour {{ user.prenom.decode('utf-8') }},
Bonjour {{ user.prenom.title() }},
La Satel[list] est heureuse de te confirmer ta préinscription au [WEI]MCA ! Tu t’es préinscrit·e en tant que {% if inscription.normalien %}normalien{% else %}non normalien{% endif %}·ne, {{ inscription.annee }}{{ inscription.dept }}, {{ inscription.role|human_roles }}. Si une de ces informations est incorrecte, merci de bien vouloir le signaler en écrivant à weiensc2016@gmail.com.
Le BdE est heureux de te confirmer ta préinscription au {{ wei.wei_name.title() }} ! Tu t’es préinscrit·e en tant que {% if inscription.normalien %}normalien{% else %}non normalien{% endif %}·ne {% if inscription.normalien %}{% if inscription.conge %}en congés{% endif %}{% endif %}, {{ inscription.annee }}{{ inscription.dept }}, {{ inscription.role|human_roles }}. Si une de ces informations est incorrecte, merci de bien vouloir le signaler en écrivant à {{ wei.wei_contact }}.
Pour finaliser ton inscription il te faut encore réaliser quelques petites démarches.
{% if not caution -%}
Tu dois dans un premier temps venir déposer ton chèque de caution à la Kfet auprès des permanenciers.
Celui-ci est d’un montant de 100€ à l’ordre de « BdE ENS Cachan ».
Celui-ci est d’un montant de 200€ à l’ordre de « BdE ENS Cachan ».
Toute personne en 2A+ qui aura oublié de donner son chèque de caution au moment du départ ne pourra pas monter dans les bus !
{%- endif %}
......@@ -18,14 +18,14 @@ Ta note est suffisamment approvisionnée, elle sera prochainement débitée.
{% if not caution -%}
Mais cela ne sera effectué que lorsque tu apporteras ton chèque de caution.
{%- endif %}
{%- endif %}
{% else %}
Mais ta note n’est pas assez approvisionnée. Nous te prions de venir l’approvisionner au plus vite afin que nous puissions te débiter.
{%- endif %}
{% elif inscription.paiement == 'soge' -%}
Tu as choisi de régler ton WEI en ouvrant un compte à la Société Générale et nous t’en remercions ! Si tu n’habites pas sur le campus, n’oublies pas de venir déposer ton justificatif de domicile si ce n’est pas déjà fait.
{% elif inscription.paiement == 'virement' -%}
Tu as choisi de régler par virement. Dans la mesure du possible, nous préfererions que tu règles ton WEI par la note. Si tu ne peux vraiment pas faire autrement, fais-le nous savoir en envoyant un mail à weiensc2016@gmail.com .
Tu as choisi de régler par virement. Dans la mesure du possible, nous préfererions que tu règles ton WEI par la note. Si tu ne peux vraiment pas faire autrement, fais-le nous savoir en envoyant un mail à {{ wei.wei_contact }}.
{%- endif %}
{%- endif %}
Ton inscription au WEI inclut ta réadhésion au BDE.
......@@ -42,4 +42,4 @@ N’apporte rien de précieux. Pas besoin d’argent ni de téléphone. En bref
À très bientôt pour ces trois jours de pure folie !!
--
Les Grands Chefs WEI de la Satel[list]
Les Grands Chefs WEI
......@@ -2,7 +2,7 @@ English version below
Bonjour {{ user.prenom.title() }} {{ user.nom.title() }}
Félicitations! Ton inscription au [WEI]MCA est désormais enregistrée, ainsi que ton adhésion au BdE.
Félicitations! Ton inscription au "{{ wei.wei_name.title() }}" est désormais enregistrée, ainsi que ton adhésion au BdE.
---- Concernant l'adhésion ----
......@@ -14,10 +14,10 @@ En même temps que l'adhésion, tu es inscrit sur la note, un porte-monnaie virt
{% if user.soge -%}
Tu as choisi d'ouvrir un compte à la Société Générale et nous t'en remercions! N'oublie pas de finir toutes les formalités avec la Société Générale en venant rencontrer ses agents tous les midis et tous les soirs à la Kfet.
{%- else -%}
Tu as choisi de ne pas ouvrir un compte à la Société Générale. Sache que tu peux toujours le faire en venant rencontrer les agents de la Société Générale les midis et les soirs tous les jours de la semaine (week-end exclu). Si tu choisis de ne pas ouvrir de compte, il te faudra payer de ta poche en venant remplir ta note à la Kfet de {% if user.normalien %}165{% else %}95{% endif %} euros (par carte bleue, chèque ou espèces) avant le mercredi 14 septembre.
Tu as choisi de ne pas ouvrir un compte à la Société Générale. Sache que tu peux toujours le faire en venant rencontrer les agents de la Société Générale les midis et les soirs tous les jours de la semaine (week-end exclu). Si tu choisis de ne pas ouvrir de compte, il te faudra payer de ta poche en venant remplir ta note à la Kfet de {% if user.normalien %}{{wei.prix_wei_normalien }}{% else %}{{ wei.prix_wei_non_normalien }}{% endif %}€ (par carte bleue, chèque ou espèces) avant le mercredi {{wei.wei_begin.day - 2 }} septembre.
{% endif -%}
Le WEI aura lieu du vendredi 16 au dimanche 18 septembre. Le vendredi les cours prendront fin à 12h, heure à laquelle nous t'attendrons devant le bâtiment Léonard de Vinci. Il y aura à manger et à boire sur place, auprès de ton équipe et de ton bus que tu découvriras à ce moment-là, juste avant le départ. Nous nous engageons à ce qu'il n'y ait aucun bizutage pendant ce week-end qui nous te promettons d'être inoubliable: ce week-end d'intégration est le tien et les Monopo[list]s vont te faire vivre 2 jours d'intense folie ! L'heure de retour sur le campus le dimanche est estimée à 22h et une Kokarde t'attendra à la descente du bus pour finir ce WEI en apothéose !
Le WEI aura lieu du vendredi {{ wei.wei_begin.day }} au dimanche {{ wei.wei_end.day }} septembre. Le vendredi les cours prendront fin à 12h, heure à laquelle nous t'attendrons devant le bâtiment Léonard de Vinci. Il y aura à manger et à boire sur place, auprès de ton équipe et de ton bus que tu découvriras à ce moment-là, juste avant le départ. Nous nous engageons à ce qu'il n'y ait aucun bizutage pendant ce week-end que nous te promettons d'être inoubliable: ce week-end d'intégration est le tien et le BdE va te faire vivre 2 jours d'intense folie ! L'heure de retour sur le campus le dimanche est estimée à 22h et une Kokarde t'attendra à la descente du bus pour finir ce WEI en apothéose !
Pour que tout se passe pour le mieux, nous te demandons d'apporter un sac (de préférence peu volumineux) contenant:
* un duvet,
......@@ -34,7 +34,7 @@ Nous te souhaitons une excellente rentrée!
À très bientôt!
--
Les Grands Chefs WEI de la Monopo[List]
Les Grands Chefs WEI
===============================================================================
......@@ -43,11 +43,10 @@ Les Grands Chefs WEI de la Monopo[List]
Useful acronyms
- WEI (Week-end d'Intégration) : Orientation weekend
- BdE (Bureau des Élèves) : Student council - the BdE is actually a student society which you can join to enjoy full access to the services provided by the council representatives
- Monopo[list] (pun on << Monopoly >> and << list >>, as in a list of candidates) : the student council currently in office AKA 2nd year students AKA your orientation leaders! They wear green polo shirts and purple sweatshirts with a distinctive logo.
Hi {{ user.prenom.title() }} {{ user.nom.title() }}
Congratulations! Your registration to the [WEI]MCA Orientation Weekend has been successfully processed, and you are now a registered member of the BdE as well.
Congratulations! Your registration to the "{{ wei.wei_name.title() }}" (Orientation Weekend) has been successfully processed, and you are now a registered member of the BdE as well.
---- BdE Membership ----
......@@ -59,10 +58,10 @@ a 'note' account - a virtual wallet on which you can deposit money to pay for yo
{% if user.soge -%}
You chose to open a bank account at Société Générale and we thank you for it! Don't forget to complete all the paperwork with Société Générale by meeting with its employees at the Kfet at lunchtime or in the evening, on week days (weekend excluded).
{%- else -%}
You did not choose to open a bank account at Société Générale. Remember you can still do so by meeting with its employees at lunchtime and in the evening on week days (weekend excluded). If you choose not to open an account, you will have to pay your attendance to Orientation weekend yourself by depositing €{% if user.normalien %}165{% else %}95{% endif %} on your "Note Kfet" (via credit card, chack or in cash), before Wednesday, September 14.
You did not choose to open a bank account at Société Générale. Remember you can still do so by meeting with its employees at lunchtime and in the evening on week days (weekend excluded). If you choose not to open an account, you will have to pay your attendance to Orientation weekend yourself by depositing €{% if user.normalien %}{{wei.prix_wei_normalien }}{% else %}{{ wei.prix_wei_non_normalien }}{% endif %} on your "Note Kfet" (via credit card, chack or in cash), before Wednesday, September {{ wei.wei_begin.day - 2 }}.
{% endif -%}
Orientation weekend will take place from Friday, September 16 to Sunday, September 18. On Friday 16, classes will end at 12 am, at which time we will be waiting for you outside the Léonard de Vinci building. You will find food and drinks, along with your team and bus, which you will both discover before leaving. We are committed to providing you with a 100% hazing-free experience, to ensure you spend an unforgettable weekend ! This orientation weekend is fully yours and we promise you will spend 2 crazy, crazy days under your orientation leaders' guidance!
Orientation weekend will take place from Friday, September {{ wei.wei_begin.day }} to Sunday, September {{ wei.wei_end.day }}. On Friday {{ wei.wei_begin.day }}, classes will end at 12 am, at which time we will be waiting for you outside the Léonard de Vinci building. You will find food and drinks, along with your team and bus, which you will both discover before leaving. We are committed to providing you with a 100% hazing-free experience, to ensure you spend an unforgettable weekend ! This orientation weekend is fully yours and we promise you will spend 2 crazy, crazy days under your orientation leaders' guidance!
Orientation weekend is estimated to end with the return trip to campus on Sunday evening, around 10pm. A party will await you then so that the weekend truly ends with a bang!
......
......@@ -13,6 +13,16 @@ if '/home/note/note-kfet-2015-serveur/mail/' not in sys.path:
sys.path.append('/home/note/note-kfet-2015-serveur/mail/')
from mail import queue_mail
sys.path.append('../serveur')
import BaseFonctions
# Initialise la connexion à la base de données
con, cur = BaseFonctions.getcursor()
# Récupère les informations du wei
cur.execute("SELECT prix_wei_normalien, prix_wei_non_normalien, wei_name, wei_contact, wei_begin, wei_end FROM configurations;")
wei_config = cur.fetchall()[0]
def human_roles(roles_list):
"""
Transforme un rôle écrit au format BDD en rôle
......@@ -37,7 +47,7 @@ def human_roles(roles_list):
emetteur = 'notekfet2015@crans.org'
objet = '[WEI] État de ta préinscription'
reply_to = ['weiensc2016@gmail.com',]
reply_to = [wei_config["wei_contact"].decode('utf-8')]
if __name__ == '__main__':
# Chargement du template de mail
......@@ -46,10 +56,6 @@ if __name__ == '__main__':
template = env.get_template('template_wei')
# Préparation de la connexion à la base de données
conn = psycopg2.connect(database='note', user='note')
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
# Récupération des inscriptions dans la base
cur.execute("SELECT payé as paye,* FROM wei_vieux;")
......@@ -60,7 +66,7 @@ if __name__ == '__main__':
paye = inscription['paye']
caution = inscription['caution']
preciser_bus = 'Je ne sais pas' == inscription['bus'].decode('utf-8')
preciser_bus = 'Je ne sais pas' == inscription['bus']
preciser_role = ';' in inscription['role']
if paye and caution and not (preciser_bus or preciser_role):
......@@ -70,7 +76,11 @@ if __name__ == '__main__':
else:
cur.execute("SELECT * FROM comptes WHERE idbde=%s;", (inscription['idbde'],))
user = cur.fetchone()
prix_wei = 16500 if user["normalien"] else 9500
# Si on est payé on paye le plein tarif.
if inscription["normalien"] and not inscription["conge"]:
prix_wei = wei_config["prix_wei_normalien"]
else:
prix_wei = wei_config["prix_wei_non_normalien"]
peut_payer = user["solde"] >= prix_wei
contexte = {
......@@ -81,6 +91,7 @@ if __name__ == '__main__':
'caution' : caution,
'preciser_bus' : preciser_bus,
'preciser_role' : preciser_role,
'wei' : wei_config,
}
body = template.render(**contexte)
......
#!/usr/bin/python
# -*- coding: utf-8 -*-
#-*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function
......@@ -12,29 +12,44 @@ if '/home/note/note-kfet-2015-serveur/' not in sys.path:
sys.path.append('/home/note/note-kfet-2015-serveur/')
import mail
sys.path.append('../serveur')
import BaseFonctions
if __name__ == '__main__':
# On initialise le template
env = Environment(loader=PackageLoader('mail', 'templates'))
template = env.get_template('template_wei_1a')
# On prépare la connexion à la base de données
con = psycopg2.connect(database='note', user='note')
cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
con, cur = BaseFonctions.getcursor()
# On récupère les données pertinentes
cur.execute("SELECT * FROM wei_1a WHERE NOT triggered;")
liste_1a = cur.fetchall()
cur.execute("""SELECT prix_wei_normalien,
prix_wei_non_normalien,
wei_name,
wei_contact,
wei_begin,
wei_end
FROM configurations;""")
wei_config = cur.fetchall()[0]
wei_config["prix_wei_normalien"]/=100
wei_config["prix_wei_non_normalien"]/=100
# Paramètres commun à tous les mails
subject = "Inscription au WEI"
emetteur = "notekfet2015@crans.org"
reply_to = ['weiensc2016@gmail.com',]
reply_to = [wei_config["wei_contact"].decode('utf-8')]
for entry in liste_1a:
entry["prenom"] = entry["prenom"].decode('utf-8')
entry["nom"] = entry["nom"].decode('utf-8')
entry["prenom"] = entry["prenom"]
entry["nom"] = entry["nom"]
to = [entry["mail"],]
body = template.render(**{ 'user' : entry })
body = template.render(**{ 'user' : entry, 'wei' : wei_config })
mail.queue_mail(emetteur, to, subject, body, cc=[], replyto=reply_to)
......
--- Drop la base note et la recrée. Ainsi que le role note
--- NB : A exécuter depis une base qui ne soit pas note
DROP DATABASE note;
--- on ne peut plus DROP note parce qu'il est nécessaire à la base django_client. Nevermind.
--- DROP ROLE note;
CREATE DATABASE note;
ALTER DATABASE note OWNER TO note;
--- CREATE ROLE note LOGIN;
--- NB : après ce script, il faut exéuter recreate_tables.sql
--- sur la base note fraîchement créée
ALTER TABLE transactions ADD FOREIGN KEY (emetteur) REFERENCES comptes (idbde);
ALTER TABLE transactions ADD FOREIGN KEY (destinataire) REFERENCES comptes (idbde);
ALTER TABLE virements DROP COLUMN montant;
ALTER TABLE virements DROP COLUMN deleted;
ALTER TABLE virements ADD COLUMN idbde int;
ALTER TABLE virements ADD FOREIGN KEY (idbde) REFERENCES comptes (idbde);
ALTER TABLE virements ADD FOREIGN KEY (idtransaction) REFERENCES transactions (id);
ALTER TABLE cheques DROP COLUMN montant;
ALTER TABLE cheques DROP COLUMN deleted;
ALTER TABLE cheques ADD COLUMN idbde int;
ALTER TABLE cheques ADD FOREIGN KEY (idbde) REFERENCES comptes (idbde);
ALTER TABLE cheques ADD FOREIGN KEY (idtransaction) REFERENCES transactions (id);
ALTER TABLE carte_bancaires DROP COLUMN montant;
ALTER TABLE carte_bancaires DROP COLUMN deleted;
ALTER TABLE carte_bancaires ADD COLUMN idbde int;
ALTER TABLE carte_bancaires ADD FOREIGN KEY (idbde) REFERENCES comptes (idbde);
ALTER TABLE carte_bancaires ADD FOREIGN KEY (idtransaction) REFERENCES transactions (id);
ALTER TABLE aliases ADD FOREIGN KEY (idbde) REFERENCES comptes (idbde);
ALTER TABLE historique ADD FOREIGN KEY (idbde) REFERENCES comptes (idbde);
ALTER TABLE activites ADD FOREIGN KEY (responsable) REFERENCES comptes (idbde);
ALTER TABLE activites ALTER COLUMN validepar SET DEFAULT NULL;
UPDATE activites SET validepar=NULL WHERE validepar=-100;
ALTER TABLE activites ADD FOREIGN KEY (validepar) REFERENCES comptes (idbde);
ALTER TABLE invites ADD FOREIGN KEY (responsable) REFERENCES comptes (idbde);
ALTER TABLE invites ADD FOREIGN KEY (activite) REFERENCES activites (id);
UPDATE cheques
SET idbde=transactions.emetteur
FROM transactions
WHERE idtransaction=transactions.id
AND retrait;
UPDATE cheques
SET idbde=transactions.destinataire
FROM transactions
WHERE idtransaction=transactions.id
AND NOT retrait;
UPDATE cb
SET idbde=transactions.emetteur
FROM transactions
WHERE idtransaction=transactions.id
AND retrait;
UPDATE cb
SET idbde=transactions.destinataire
FROM transactions
WHERE idtransaction=transactions.id
AND NOT retrait;
UPDATE virements
SET idbde=transactions.emetteur
FROM transactions
WHERE idtransaction=transactions.id
AND retrait;
UPDATE virements
SET idbde=transactions.destinataire
FROM transactions
WHERE idtransaction=transactions.id
AND NOT retrait;
This diff is collapsed.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import psycopg2
import psycopg2.extras
db_nk12 = "bde"
db_nk15 = "note"
DEBUG = False;
def getcursor(db):
"""Renvoie une connexion à la base demandé et un curseur"""
con = psycopg2.connect(database=db)
cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
return con, cur
if __name__ == "__main__":
if "-v" in sys.argv or "--debug" in sys.argv or "--verbose" in sys.argv:
DEBUG = True
if "--rig" in sys.argv:
import_adherents()
#!/bin/bash
# A exécuter en root
NOTEUSER="note"
if [[ $USER == root ]]
then
service postgresql restart
echo ""
echo "Creating database"
sudo -u postgres psql -f .recreate_database.sql -d postgres
echo ""
echo "Creating tables"
#sudo -u note psql note -f .recreate_tables.sql -d note #2>&1 | grep -A 2 "ERREUR" --color
sudo -u $NOTEUSER psql note -f .recreate_tables.sql -d note 2>&1 | sed 's/\(ERREUR\)/\1/g'
echo "Adding buttons"
#sudo -u note psql note -f tableboutons.sql -d note #2>&1 | grep -A 2 "ERREUR" --color
sudo -u $NOTEUSER psql note -f tableboutons.sql -d note 2>&1 | sed 's/\(ERREUR\)/\1/g'
echo "done"
else
echo "Doit être exécuté en tant que root. (Et root doit avoir l'accès à la base pgsql en SUPERUSER)."
fi
#!/bin/bash
# A exécuter en root
NOTEUSER="note"
if [[ $USER == root ]]
then
service postgresql restart
echo ""
echo "Creating database"
sudo -u postgres psql -f .recreate_database.sql -d postgres
echo ""
echo "Creating tables"
#sudo -u note psql note -f .recreate_tables.sql -d note #2>&1 | grep -A 2 "ERREUR" --color
sudo -u $NOTEUSER psql note -f .recreate_tables_empty.sql -d note 2>&1 | sed 's/\(ERREUR\)/\1/g'
echo "done"
else
echo "Doit être exécuté en tant que root. (Et root doit avoir l'accès à la base pgsql en SUPERUSER)."
fi
--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;
SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: boutons; Type: TABLE; Schema: public; Owner: note; Tablespace:
--
--DROP TABLE boutons;
--
--CREATE TABLE boutons (
-- id integer NOT NULL,
-- label character varying DEFAULT ''::character varying,
-- montant integer DEFAULT 0,
-- destinataire integer DEFAULT (-10),
-- categorie character varying DEFAULT ''::character varying,
-- affiche boolean DEFAULT true,
-- CONSTRAINT categorie_doit_etre_specifiee CHECK (((categorie)::text <> ''::text)),
-- CONSTRAINT label_doit_etre_specifie CHECK (((label)::text <> ''::text))
--);
ALTER TABLE public.boutons OWNER TO note;
--
-- Name: boutons_id_seq; Type: SEQUENCE; Schema: public; Owner: note
--
--CREATE SEQUENCE boutons_id_seq
-- START WITH 1
-- INCREMENT BY 1
-- NO MINVALUE
-- NO MAXVALUE
-- CACHE 1;
ALTER TABLE public.boutons_id_seq OWNER TO note;
--
-- Name: boutons_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: note
--
ALTER SEQUENCE boutons_id_seq OWNED BY boutons.id;
--
-- Name: boutons_id_seq; Type: SEQUENCE SET; Schema: public; Owner: note
--
SELECT pg_catalog.setval('boutons_id_seq', 103, true);
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: note
--
ALTER TABLE boutons ALTER COLUMN id SET DEFAULT nextval('boutons_id_seq'::regclass);
--
-- Data for Name: boutons; Type: TABLE DATA; Schema: public; Owner: note
--
COPY boutons (id, label, montant, destinataire, categorie, affiche) FROM stdin;
1 Coca 90 0 Soft t
2 Burger 150 0 Bouffe t
4 Frites 1 0 Bouffe t
16 Limo Pinte 60 0 Soft t
17 Limo Demi 40 0 Soft t
18 Café 40 0 Soft t
19 Chocolat 40 0 Soft t
20 Lait 50 0 Soft t
21 Viennoiserie 90 0 Bouffe t
22 PtitDej 250 0 Bouffe t
23 Sand 1/2 250 0 Bouffe t
24 Barres Choco 60 0 Bouffe t
25 Dragibus 30 0 Bouffe t
27 Jus ptit dej 40 0 Soft t
28 Skittles 60 0 Bouffe t
30 Photocopie 5 0 Autre t
31 Leffe Rad 220 0 Alcool t
32 Delirium 200 0 Alcool t
33 Adelscott 200 0 Alcool t
34 BurgerFrite 250 0 Bouffe t
35 Pampryl 70 0 Soft t
36 Thé 50 0 Soft t
37 Carlsberg 210 0 Alcool t
38 Guinness 270 0 Alcool t
39 Chimay Bleue 200 0 Alcool t
40 Compote 30 0 Bouffe t
41 Despérados 200 0 Alcool t
42 Canette soda 80 0 Soft t
43 Demi 130 0 Alcool t
44 Pinte 200 0 Alcool t
45 plat seul 250 0 Bouffe t
46 Lays 60 0 Bouffe t
48 Leffe Tr 210 0 Alcool t
49 Bonne humeur =) 0 0 Autre t
50 Demi Baguette 50 0 Bouffe t
51 Fût 50L 12000 0 Alcool t
52 Pringles 165g 220 0 Bouffe t
53 Corona 200 0 Alcool t
54 Fosters 140 0 Alcool t
55 Faro 130 0 Alcool t
56 Grimbergen 170 0 Alcool t
57 Maltesers maxi 170 0 Bouffe t
58 GrosDej 400 0 Bouffe t
59 Hoegaarden 150 0 Alcool t
60 Kasteel 230 0 Alcool t