annotate scripts/association/update_garradin.py @ 52:4d924e65a4ba

compte-rendu de l'AG ordinaire du 24 aout 2015 à Sankt Augustin
author souliane <souliane@mailoo.org>
date Sun, 04 Oct 2015 11:21:02 +0200
parents c34633e3f56a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
51
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
1 #!/usr/bin/python
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
3
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
4 # Scripts to update Garradin database from various CSV inputs.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
5 # Copyright (C) 2015 Adrien Cossa <souliane@mailoo.org>
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
6
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # (at your option) any later version.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
11
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
16
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
19
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
20 import sqlite3
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
21 import csv, unicodecsv
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
22 import os
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
23 import os.path
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
24 import tempfile
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
25 from glob import glob
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
26 from time import strftime
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
27 from datetime import datetime
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
28 from collections import OrderedDict
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
29
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
30
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
31 ### PATHS AND OTHER STUFF TO CONFIGURE ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
32
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
33
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
34 DB_FILE = u"./association.sqlite"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
35 INPUT_PATH = u"../../../sat_private"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
36
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
37 APAYER_FILES = (u"apayer", u"SALUT-A-TOI_*.csv")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
38 CM_FILES = (u"credit_mutuel/dernieres_operations", "*_*.csv")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
39 DJANGO_FILES = (u"django", u"sat_website_subscriptions.csv")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
40
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
41 LOG_PATH = u"./OUTPUT"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
42 INFO, WARNING = 1, 2
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
43 LOG_LEVELS = (INFO, WARNING)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
44
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
45
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
46 def dirtyGetDateOfFile(path):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
47 """Extract the date at the end of the filename, just before the extension.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
48
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
49 @return: datetime
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
50 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
51 # FIXME: there should be a better way to do that
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
52 token = os.path.basename(path)[-12:-4]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
53 return datetime.strptime(token, "%Y%m%d")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
54
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
55
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
56 ### !!! DO NOT MODIFY BELOW THIS LINE !!! ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
57
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
58
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
59 ### DATE AND TIME ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
60
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
61 DATE_ORIGIN = u"1970-01-01"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
62 DATE_FORMAT = "%Y-%m-%d"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
63 TODAY = strftime(DATE_FORMAT)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
64
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
65
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
66 ### RETRIEVE DATABASE INFOS ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
67
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
68
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
69 class GarradinDB(object):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
70
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
71 TABLES = ("membres", "cotisations", "cotisations_membres")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
72
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
73 def __init__(self, cursor):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
74 self.cursor = cursor
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
75
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
76 def getTableInfos(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
77 infos = {}
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
78 for table in self.TABLES:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
79 cursor.execute("PRAGMA table_info(%s)" % table)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
80 rows = cursor.fetchall()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
81 infos[table] = OrderedDict()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
82 for row in rows:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
83 # don't use {row[1]: row[2]...} : it messes the order
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
84 infos[table][row[1]] = row[2] # field name: field type
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
85 return infos
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
86
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
87 def getLastAutoUpdate(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
88 """Get the datetime of the last database automatic update.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
89
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
90 @return: datetime
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
91 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
92 self.cursor.execute("SELECT valeur FROM config WHERE cle='last_auto_update'")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
93 row = self.cursor.fetchone()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
94 try:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
95 date = row[0]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
96 except TypeError:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
97 date = DATE_ORIGIN
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
98 return datetime.strptime(date, DATE_FORMAT)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
99
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
100 def setLastAutoUpdate(self, date=TODAY):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
101 """Set to date of the last database automatic update to today."""
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
102 self.cursor.execute("REPLACE INTO config VALUES ('last_auto_update', ?)", (date,))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
103
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
104
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
105 con = sqlite3.connect(DB_FILE)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
106 with con:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
107 cursor = con.cursor()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
108 db = GarradinDB(cursor)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
109 TABLE_INFOS = db.getTableInfos()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
110 LAST_AUTO_UPDATE = db.getLastAutoUpdate()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
111
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
112
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
113 ### LOGGERS ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
114
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
115
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
116 class Logger(object):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
117
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
118 def __init__(self, path):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
119 if not os.path.isdir(path):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
120 os.mkdir(path)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
121 basename = "update_garradin_{day}_%s.log".format(day=strftime("%Y%m%d"))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
122 self.info_file = os.path.join(path, basename % "info")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
123 self.warning_file = os.path.join(path, basename % "warning")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
124
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
125 def write(self, file, msg):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
126 with open(file, 'a') as file:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
127 file.write((u"[%s] %s\n" % (strftime("%d/%m/%Y@%H:%m:%S"), msg)).encode("utf-8"))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
128
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
129 def info(self, msg):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
130 self.write(self.info_file, msg)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
131 if INFO in LOG_LEVELS:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
132 print msg
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
133
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
134 def warning(self, msg):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
135 self.write(self.warning_file, msg)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
136 if WARNING in LOG_LEVELS:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
137 print msg
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
138
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
139 logger = Logger(LOG_PATH)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
140
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
141
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
142 ### CSV DIALECTS ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
143
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
144
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
145 # FIXME: Python CSV doesn't handle CSV file starting with a BOM
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
146
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
147 class my_dialect(csv.excel):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
148 """Describe my properties for CSV files."""
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
149 delimiter = ';'
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
150 csv.register_dialect("my_dialect", my_dialect)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
151
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
152
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
153 ### GENERIC ENTRIES' CLASSES ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
154
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
155
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
156 class Entry(OrderedDict):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
157
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
158 TYPE_INTEGER = u"INTEGER"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
159 TYPE_TEXT = u"TEXT"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
160
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
161 ID_UNIQUE_KEYS = ("FIELD_NAME", "FIELD_SURNAME", "FIELD_EMAIL") # define unique members
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
162 ID_EQUAL_KEYS = ID_UNIQUE_KEYS # define equality, not even needed to update the database
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
163
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
164 FIELD_NAME = u"prenom"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
165 FIELD_SURNAME = u"nom"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
166 FIELD_EMAIL = u"email"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
167
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
168 FIELDS = [FIELD_NAME, FIELD_SURNAME, FIELD_EMAIL]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
169
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
170 MATCH_NONE = 0
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
171 MATCH_INCOMPLETE = 1
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
172 MATCH_UNIQUE = 2
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
173 MATCH_EQUAL = 3
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
174
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
175 matched = MATCH_NONE
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
176
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
177 def __init__(self, entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
178 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
179
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
180 @param entry(dict or row): entry data
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
181 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
182 if isinstance(entry, dict):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
183 data = OrderedDict({key: value for key, value in entry.iteritems() if key in self.FIELDS})
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
184 if hasattr(entry, "identityDict"):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
185 data.update(entry.identityDict(self))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
186 else:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
187 data = self.row2dict(entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
188 OrderedDict.__init__(self, data)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
189
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
190 def __iter__(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
191 # XXX: use the order of self.FIELDS and ignore OrderedDict internal order
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
192 for field in self.FIELDS:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
193 if field in self:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
194 yield field
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
195
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
196 def row2dict(self, row):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
197 """Return a dict representation of a row.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
198
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
199 @param row (list[unicode]): a row of information
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
200 @return: OrderedDict {unicode: unicode} with:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
201 - key: field name
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
202 - value: field value
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
203 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
204 data = OrderedDict()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
205 index = 0
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
206 for field in self.FIELDS:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
207 if row[index]:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
208 data[field] = row[index]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
209 index += 1
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
210 return data
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
211
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
212 def identityDict(self, cls=None):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
213 """Return a dict representing a user identity.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
214
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
215 @param cls (class): if specified, the result dict will use cls's
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
216 identity fields for its own keys (instead of self's fields).
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
217 @return: dict{unicode: unicode}
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
218 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
219 if cls is None:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
220 cls = self
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
221 return {getattr(cls, key): self[getattr(self, key)] for key in self.ID_EQUAL_KEYS}
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
222
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
223 def identityMatches(self, entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
224 """Return a dict compiling the identity matches with another entry.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
225
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
226 @param entry (Entry): another entry
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
227 @return: dict{unicode: bool}
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
228 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
229 return {key: self[getattr(self, key)] == entry[getattr(entry, key)] for key in self.ID_EQUAL_KEYS}
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
230
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
231 def identityMatch(self, entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
232 """Return a value representing the matching level with another entry.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
233
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
234 @param entry (Entry): another entry
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
235 @return: int in (Entry.MATCH_NONE, Entry.MATCH_INCOMPLETE, Entry.MATCH_UNIQUE, Entry.MATCH_EQUAL)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
236 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
237 matches = self.identityMatches(entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
238 if len([match for match in matches.values() if not match]) == 0:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
239 return self.MATCH_EQUAL
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
240 match_name = matches["FIELD_NAME"] and matches["FIELD_SURNAME"]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
241 if match_name and matches["FIELD_EMAIL"]:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
242 return self.MATCH_UNIQUE
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
243 if match_name or matches["FIELD_EMAIL"]:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
244 return self.MATCH_INCOMPLETE
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
245 return self.MATCH_NONE
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
246
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
247 def identityToString(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
248 """Return a human-readable string representing a user identity.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
249
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
250 @return: unicode
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
251 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
252 return "%s %s <%s>" % (self[self.FIELD_NAME], self[self.FIELD_SURNAME], self[self.FIELD_EMAIL])
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
253
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
254 def valuesToString(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
255 """List the values.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
256
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
257 @return: unicode
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
258 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
259 return u", ".join(self.values())
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
260
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
261 def fields(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
262 """List the fields to which a value is associated.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
263
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
264 @return: list[unicode]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
265 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
266 return [field for field in self.FIELDS if field in self]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
267
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
268 def fieldsToString(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
269 """List the fields to which a value is associated.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
270
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
271 @return: unicode
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
272 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
273 return u", ".join(self.fields())
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
274
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
275 def changeset(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
276 """Return the list of fields and values as needed to update the database.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
277
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
278 @return: tuple(unicode, list)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
279 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
280 changes = ['%s=?' % field for field in self.fields()]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
281 return (u", ".join(changes), self.values())
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
282
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
283
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
284 class GarradinDBEntry(Entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
285
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
286 def __init__(self, cursor, entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
287 self.cursor = cursor
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
288 Entry.__init__(self, entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
289
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
290 def insertOrReplace(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
291 """Insert or replace the entry in the garradin database."""
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
292 fields = self.fieldsToString()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
293 args = self.values()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
294 placeholders = ",".join([u"?" for arg in args])
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
295 # XXX: "INSERT OR REPLACE" is needed for updating lastrowid, "REPLACE" is not enough
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
296 request = "INSERT OR REPLACE INTO %s (%s) VALUES (%s)" % (self.TABLE, fields, placeholders)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
297 self.cursor.execute(request, args)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
298
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
299
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
300 class CSVEntry(Entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
301
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
302 def date(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
303 """Return the date associated with this entry.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
304
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
305 @return: datetime
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
306 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
307 try:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
308 format = self.DATE_FORMAT
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
309 except AttributeError:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
310 format = DATE_FORMAT
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
311 return datetime.strptime(self[self.FIELD_DATE], format)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
312
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
313
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
314 ### MEMBERS ENTRIES ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
315
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
316
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
317 class GarradinDBMember(GarradinDBEntry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
318
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
319 TABLE = u"membres"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
320 FIELDS = TABLE_INFOS[TABLE].keys()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
321
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
322 FIELD_ID_CATEGORY = u"id_categorie"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
323 FIELD_PASSWORD = u"passe"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
324 FIELD_AUTO_UPDATE = u"date_maj_auto"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
325 FIELD_ADDRESS = u"adresse"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
326
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
327 ID_EQUAL_KEYS = Entry.ID_UNIQUE_KEYS + ("FIELD_ADDRESS",)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
328
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
329 def __init__(self, cursor, entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
330 GarradinDBEntry.__init__(self, cursor, entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
331 try:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
332 self.pop(self.FIELD_PASSWORD)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
333 except KeyError:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
334 pass
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
335
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
336 if hasattr(entry, "address"):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
337 self[self.FIELD_ADDRESS] = entry.address()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
338
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
339 def setAutoUpdate(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
340 """Update the value of the field self.FIELD_AUTO_UPDATE."""
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
341 self[self.FIELD_AUTO_UPDATE] = TODAY
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
342
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
343 def values(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
344 """List the values.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
345
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
346 @return: list
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
347 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
348 values = []
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
349 for field, value in self.iteritems():
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
350 if TABLE_INFOS[self.TABLE].get(field, self.TYPE_TEXT) == self.TYPE_TEXT:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
351 value = u"%s" % value.replace('\r', '').replace('\n', '\\n')
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
352 values.append(unicode(value))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
353 return values
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
354
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
355
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
356 class GarradinDBMembership(GarradinDBEntry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
357
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
358 TABLE = u"cotisations_membres"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
359 FIELDS = TABLE_INFOS[TABLE].keys()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
360
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
361 FIELD_MEMBER = u"id_membre"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
362 FIELD_MEMBERSHIP = u"id_cotisation"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
363 FIELD_DATE = u"date"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
364
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
365
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
366 class GarradinDBMembershipType(GarradinDBEntry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
367
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
368 TABLE = u"cotisations"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
369 FIELDS = TABLE_INFOS[TABLE].keys()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
370
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
371 FIELD_AMOUNT = u"montant"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
372
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
373
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
374 class GarradinCSVMember(CSVEntry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
375 """Like GarradinDBMember but with a "categorie" field in second position."""
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
376
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
377 FIELD_ID_CATEGORY = u"id_categorie"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
378 FIELD_CATEGORY = u"categorie"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
379 FIELD_ADDRESS = u"adresse"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
380
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
381 FIELDS = GarradinDBMember.FIELDS[:1] + [FIELD_CATEGORY] + GarradinDBMember.FIELDS[1:]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
382
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
383 def __init__(self, cursor, db_member):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
384 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
385
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
386 @param db_member (GarradinDBMember)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
387 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
388 CSVEntry.__init__(self, db_member)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
389
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
390 if self.FIELD_ID_CATEGORY not in self:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
391 self[self.FIELD_ID_CATEGORY] = 1
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
392 if self.FIELD_CATEGORY not in self:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
393 cursor.execute("SELECT nom FROM membres_categories WHERE id=?", (self[self.FIELD_ID_CATEGORY],))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
394 rows = cursor.fetchone()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
395 self[self.FIELD_CATEGORY] = rows[0]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
396
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
397
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
398 class ApayerCSVEntry(CSVEntry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
399
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
400 FIELD_NAME = u"Prenom"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
401 FIELD_SURNAME = u"Nom"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
402 FIELD_EMAIL = u"Courriel"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
403 FIELD_AMOUNT = u"Montant"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
404 FIELD_DATE = u"DatePaiement"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
405 DATE_FORMAT = u"%d/%m/%y"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
406
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
407 # XXX: there's a BOM at the beginning of the CSV file
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
408 FIELDS = ["Mnemonique", "TPE", "DatePaiement", "ObjetPaiement",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
409 "AutreObjet", "Montant", "Devise", "Reference",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
410 "Commentaire", "ReferencBancaire", "NumeroAutorisation",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
411 "Nom", "Prenom", "Adresse", "CodePostal", "Ville", "Courriel",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
412 "Etat", "MotifRefus", "Cvx", "Vld", "Brand", "Status3DS"]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
413
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
414 FILTERED_OUT = ("", u"Mnemonique", "TPE", "Devise", "ReferencBancaire",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
415 "NumeroAutorisation", "Cvx", "Vld", "Brand", "Status3DS")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
416
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
417 def address(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
418 return u"\n".join([self["Adresse"], self["CodePostal"], self["Ville"]])
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
419
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
420
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
421 class DjangoCSVEntry(CSVEntry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
422
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
423 FIELD_NAME = u"prenom"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
424 FIELD_SURNAME = u"nom"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
425 FIELD_EMAIL = u"courriel"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
426 FIELD_AMOUNT = u"montant"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
427 FIELD_DATE = u"date"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
428
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
429 FIELDS = ["date", "prenom", "nom", "adresse", "courriel", "jid", "montant",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
430 "moyen_paiement", "reference", "commentaire", "lettre_info",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
431 "langue"]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
432
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
433
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
434
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
435 ### ENTRIES FOR THE FINANCES ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
436
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
437
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
438 class GarradinDBOperation(GarradinDBEntry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
439
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
440 TABLE = u"compta_journal"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
441
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
442
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
443 class GarradinCSVOperation(CSVEntry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
444
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
445 FIELDS = (u"Numéro mouvement", u"Date", u"Type de mouvement", u"Catégorie",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
446 u"Libellé", u"Montant", u"Compte de débit - numéro",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
447 u"Compte de débit - libellé", u"Compte de crédit - numéro",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
448 u"Compte de crédit - libellé", u"Moyen de paiement",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
449 u"Numéro de chèque", u"Numéro de pièce", u"Remarques")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
450
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
451
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
452 class CmCSVOperation(CSVEntry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
453
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
454 FIELD_DATE = u"Date d'opération"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
455 DATE_FORMAT = u"%d/%m/%Y"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
456
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
457 FIELDS = (FIELD_DATE, u"Date de valeur", u"Débit", u"Crédit",
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
458 u"Libellé", u"Solde")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
459
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
460
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
461 ### CLASSES FOR THE IMPORTS ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
462
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
463
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
464 class EntryMatcher(object):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
465
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
466 def __init__(self, cursor):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
467 self.cursor = cursor
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
468
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
469 def processEntryForCSVExport(self, entry, context):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
470 """Return the processed entry ready to be exported to CSV,
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
471 or None if the entry is conflicting with another one already existing.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
472
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
473 @param entry (Entry): an Entry instance
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
474 @param context (unicode): context indication for the user
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
475 @return: GarradinCSVMember or None
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
476 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
477 # this method is not optimised but it's sensible... don't mess with it.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
478 tmp_entry = GarradinDBMember(self.cursor, entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
479 base_entry = self.getMatchingEntry(tmp_entry, context)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
480 if base_entry is None:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
481 return None
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
482 base_entry.update(tmp_entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
483
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
484 new_entry = GarradinCSVMember(self.cursor, base_entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
485 new_entry.matched = base_entry.matched
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
486 return new_entry
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
487
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
488 def getMatchingEntry(self, new_entry, context):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
489 """Try to get a matching entry, the behavior depends of the found match:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
490
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
491 - no match at all: returns a new empty entry
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
492 - incomplete match: returns None and write a warning in the logs
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
493 - unique or equal match: returns the matching database entry
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
494
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
495 @param new_entry (GarradinDBMember): entry to be matched
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
496 @param context (unicode): context indication for the user
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
497 @return: GarradinDBMember or None:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
498 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
499 self.cursor.execute("SELECT * FROM %s" % new_entry.TABLE)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
500 rows = self.cursor.fetchall()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
501
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
502 for row in rows:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
503 row = list(row)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
504 current_entry = GarradinDBMember(self, row)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
505 match = current_entry.identityMatch(new_entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
506 if match == Entry.MATCH_NONE:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
507 continue # try to match next row
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
508
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
509 current_entry.matched = match
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
510
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
511 if match == Entry.MATCH_EQUAL:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
512 return current_entry # we still need to update the membership
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
513 if match == Entry.MATCH_INCOMPLETE:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
514 log = logger.warning
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
515 desc = (u"INCOMPLETE", u"A MANUAL check and process is required!")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
516 elif match == Entry.MATCH_UNIQUE:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
517 log = logger.info
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
518 desc = (u"unique", u"The database entry will be updated.")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
519 log(u"A %s match has been found between these two entries from \"%s\" and garradin's \"%s\" table:" % (desc[0], context, current_entry.TABLE))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
520 log(u" - %s" % new_entry.valuesToString())
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
521 log(u" - %s" % current_entry.valuesToString())
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
522 log(" --> %s" % desc[1])
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
523 return current_entry if match == Entry.MATCH_UNIQUE else None
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
524
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
525 return GarradinDBMember(self, {})
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
526
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
527 class MembershipManager(object):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
528 def __init__(self, cursor):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
529 self.cursor = cursor
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
530 self.memberships = {}
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
531
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
532 def setCache(self, email, amount, date):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
533 """Write a membership in cache for later database update.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
534
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
535 @param email (unicode): email adress of the member
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
536 @param amount (int): amount of the membership fee
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
537 @param date (datetime): date of the subscription
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
538 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
539 self.memberships[email] = (amount, date)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
540
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
541 def getMembershipAmount(self, membership_id):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
542 """Return a membership amount.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
543
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
544 @param membership_id (int): membership ID in the "cotisations" table
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
545 @return: int
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
546 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
547 self.cursor.execute("SELECT %s FROM %s WHERE id=?" % (GarradinDBMembershipType.FIELD_AMOUNT, GarradinDBMembershipType.TABLE), (membership_id,))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
548 return int(self.cursor.fetchone()[0])
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
549
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
550 def getMemberIdentity(self, member_id):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
551 """Return a human-readable identity.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
552
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
553 @param member_id (int): member ID in the "membres" table
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
554 @return: unicode
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
555 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
556 self.cursor.execute("SELECT * FROM %s WHERE id=?" % GarradinDBMember.TABLE, (member_id,))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
557 return GarradinDBMember(self, self.cursor.fetchone()).identityToString()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
558
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
559 def getMembershipType(self, amount):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
560 """Return the suitable membership type ID and amount for the given amount.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
561
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
562 @param amount (int): payment amount
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
563 @return: (int, int)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
564 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
565 request = "SELECT id, MAX({field}) FROM {table} WHERE {field} <= ?".format(field=GarradinDBMembershipType.FIELD_AMOUNT, table=GarradinDBMembershipType.TABLE)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
566 self.cursor.execute(request, (amount,))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
567 return self.cursor.fetchone()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
568
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
569 def updateMembershipFromCache(self, member_id, email):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
570 """Look in the cache to update the membership fee of a member.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
571
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
572 @param member_id (int): member ID in the "membres" table
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
573 @param email(unicode): member email
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
574 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
575 membership = self.memberships.pop(email, None)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
576 if membership:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
577 amount, date = membership
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
578 self.updateMembership(member_id, amount, date)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
579
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
580 def updateMembership(self, member_id, amount, date_payment):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
581 """Update the membership fee of a member.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
582
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
583 @param member_id (int): member ID in the "membres" table
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
584 @param amount (float): amount of the membership fee
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
585 @param date_payment (unicode): date of the payment
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
586 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
587 member = self.getMemberIdentity(member_id)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
588 self.cursor.execute("SELECT * FROM %s WHERE id_membre=?" % GarradinDBMembership.TABLE, (member_id,))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
589 rows = self.cursor.fetchall()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
590 entries = [GarradinDBMembership(self.cursor, row) for row in rows]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
591 entries.sort(key=lambda entry: entry[entry.FIELD_DATE])
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
592
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
593 # first we check for inconsistency
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
594 last_date, last_amount = datetime.strptime(DATE_ORIGIN, DATE_FORMAT), 0
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
595 for entry in entries:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
596 current_date = datetime.strptime(entry[entry.FIELD_DATE], DATE_FORMAT)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
597 current_amount = self.getMembershipAmount(entry[entry.FIELD_MEMBERSHIP])
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
598 if (current_date - last_date).days < 365:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
599 logger.warning(u"At least two memberships within less than one year have been registered for %s:" % member)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
600 logger.warning(u" - € %d on %s" % (last_amount, last_date))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
601 logger.warning(u" - € %d on %s" % (current_amount, current_date))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
602 logger.warning(u" --> Please fix it MANUALLY!")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
603 last_date, last_amount = current_date, current_amount
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
604
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
605 if (date_payment - last_date).days < 365:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
606 amount += last_amount # cumulate two payments
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
607 else:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
608 data = {GarradinDBMembership.FIELD_MEMBER: member_id,
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
609 GarradinDBMembership.FIELD_DATE: date_payment}
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
610 entry = GarradinDBMembership(self.cursor, data)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
611
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
612 m_type_id, m_type_amount = self.getMembershipType(amount)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
613 delta = amount - m_type_amount
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
614 if delta:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
615 logger.warning(u"We received € %.2f from %s: a membership fee of € %d will be registered." % (amount, member, m_type_amount))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
616 logger.warning(u" --> Please MANUALLY register a donation of € %.2f." % delta)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
617 entry[entry.FIELD_MEMBERSHIP] = m_type_id
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
618 entry.insertOrReplace()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
619
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
620 class MembersImporter(object):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
621
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
622 def __init__(self, cursor):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
623 self.cursor = cursor
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
624 self.fails = []
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
625 self.membership_manager = MembershipManager(cursor)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
626
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
627 def fixRowFromLeadingEqualSign(self, row):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
628 """Fix leading equal sign in CSV field since it is not handled by Python.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
629
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
630 @param data (dict{unicode: unicode}): row data
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
631 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
632 for field, value in row.iteritems():
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
633 if value.startswith('="') and value.endswith('"'):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
634 row[field] = value[2:-1]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
635
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
636 def importFromCSV(self, input_csv, output_csv=None):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
637 """Import members from a CSV to garradin.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
638
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
639 @param input_csv (unicode): path to the input CSV file
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
640 @param output_csv (unicode): path to store intermediate Garradin CSV
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
641 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
642 tmp_csv = output_csv if output_csv else tempfile.mkstemp()[1]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
643 matcher = EntryMatcher(self.cursor)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
644 with open(input_csv, 'r') as csv_file:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
645 reader = unicodecsv.DictReader(csv_file, dialect="my_dialect")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
646 logger.info("Processing %s..." % input_csv)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
647 with open(tmp_csv, 'w') as tmp_file:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
648 writer = unicodecsv.DictWriter(tmp_file, GarradinCSVMember.FIELDS, dialect="my_dialect")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
649 fails = []
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
650 for row in reader:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
651 input_entry = self.CSV_ENTRY_CLASS(row)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
652
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
653 date = input_entry.date()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
654 if (LAST_AUTO_UPDATE - date).days > self.AGE_LIMIT:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
655 continue # skip older entries
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
656
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
657 self.fixRowFromLeadingEqualSign(input_entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
658 if not self.checkEntry(input_entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
659 self.fails.append(input_entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
660 continue
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
661 entry = matcher.processEntryForCSVExport(input_entry, self.CONTEXT)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
662 if not entry:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
663 continue
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
664 if entry.matched != Entry.MATCH_EQUAL:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
665 writer.writerow(entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
666
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
667 self.extraProcessEntry(input_entry, entry)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
668 self.printFails()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
669
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
670 self.importFromGarradinCSV(tmp_csv)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
671 if not output_csv:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
672 os.remove(tmp_csv)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
673
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
674 def checkEntry(self, input_entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
675 return True
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
676
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
677 def printFails(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
678 pass
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
679
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
680 def extraProcessEntry(self, input_entry, entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
681 pass
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
682
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
683 def importFromGarradinCSV(self, csv_file):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
684 """Import a garradin CSV to the database.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
685
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
686 @param csv_file (unicode): file to import
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
687 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
688 with open(csv_file, 'r') as file:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
689 reader = unicodecsv.reader(file, dialect="my_dialect")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
690 for row in reader:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
691 row.pop(1) # remove the category name
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
692 db_entry = GarradinDBMember(self.cursor, row)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
693 db_entry.setAutoUpdate()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
694 db_entry.insertOrReplace()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
695
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
696 self.membership_manager.updateMembershipFromCache(self.cursor.lastrowid, db_entry[db_entry.FIELD_EMAIL])
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
697
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
698 action = "updated" if db_entry.get('id', None) else "added"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
699 logger.warning("The member %s has been %s." % (db_entry.identityToString(), action))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
700
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
701
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
702 class ApayerImporter(MembersImporter):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
703
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
704 CSV_ENTRY_CLASS = ApayerCSVEntry
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
705
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
706 # since we receive the CSV every Sunday, operations can be one week old
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
707 # without having been processed yet, even if you do a daily auto update
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
708 AGE_LIMIT = 14
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
709
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
710 CONTEXT = u"apayer"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
711
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
712 STATE_ACCEPTED = u"Paiement accepté (payé)"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
713
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
714 def checkEntry(self, input_entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
715 return input_entry["Etat"] == self.STATE_ACCEPTED
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
716
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
717 def printFails(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
718 if self.fails:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
719 logger.warning(u"The following \"apayer\" operations have NOT been completed, you MAY want to contact the users:")
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
720 for row in self.fails:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
721 fields = ["%s: %s" % (key, value) for key, value in row.iteritems() if key not in ApayerCSVEntry.FILTERED_OUT and value]
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
722 logger.warning(u" - %s" % ", ".join(fields))
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
723
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
724 def extraProcessEntry(self, input_entry, entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
725 # update membership fee
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
726 date = input_entry.date()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
727 amount = float(input_entry[input_entry.FIELD_AMOUNT])
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
728 if entry.get("id", None):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
729 self.membership_manager.updateMembership(entry["id"], amount, date)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
730 else: # we don't know the member ID yet
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
731 self.membership_manager.setCache(entry[entry.FIELD_EMAIL], amount, date)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
732
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
733
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
734 class DjangoImporter(MembersImporter):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
735
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
736 CSV_ENTRY_CLASS = DjangoCSVEntry
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
737
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
738 # if you do a daily auto update, this file is processed everyday
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
739 AGE_LIMIT = 2
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
740
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
741 CONTEXT = u"django form"
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
742
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
743 def extraProcessEntry(self, input_entry, entry):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
744 date = input_entry.date()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
745 if not entry.get("id", None): # new user
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
746 self.membership_manager.setCache(entry[entry.FIELD_EMAIL], 0, date)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
747
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
748
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
749 class CmImporter(object):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
750
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
751 AGE_LIMIT = 60
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
752
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
753 def importFromCSV(self, csv_file):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
754 """Import financial operation from credit mutuel CSV to garradin.
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
755
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
756 @param csv_file (unicode): path to django form CSV file
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
757 """
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
758 raise NotImplementedError # TODO: update database with entry
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
759
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
760
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
761 ### MAIN CLASS ###
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
762
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
763
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
764 class GarradinUpdater(object):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
765
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
766 def __init__(self, cursor):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
767 self.cursor = cursor
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
768
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
769 def importFromApayer(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
770 """Import CSV files from apayer"""
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
771 for apayer_csv in glob(os.path.join(INPUT_PATH, *APAYER_FILES)):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
772 if dirtyGetDateOfFile(apayer_csv) >= LAST_AUTO_UPDATE:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
773 ApayerImporter(self.cursor).importFromCSV(apayer_csv)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
774
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
775 def importFromDjango(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
776 """Import all Django CSV files"""
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
777 # FIXME: import JID, subscription to mailing list and comment
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
778 for django_csv in glob(os.path.join(INPUT_PATH, *DJANGO_FILES)):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
779 DjangoImporter(self.cursor).importFromCSV(django_csv)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
780
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
781 def importFromCm(self):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
782 """Import all credit mutuel CSV files"""
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
783 for cm_csv in glob(os.path.join(INPUT_PATH, *CM_FILES)):
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
784 if dirtyGetDateOfFile(cm_csv) >= LAST_AUTO_UPDATE:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
785 CmImporter(self.cursor).importFromCSV(cm_csv)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
786
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
787
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
788 con = sqlite3.connect(DB_FILE)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
789 with con:
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
790 cursor = con.cursor()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
791 updater = GarradinUpdater(cursor)
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
792 updater.importFromApayer()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
793 updater.importFromDjango()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
794 #updater.importFromCm()
c34633e3f56a add a script to semi-automatically update garradin database (work in progress)
souliane <souliane@mailoo.org>
parents:
diff changeset
795 GarradinDB(cursor).setLastAutoUpdate("2015-06-01")