2 # -*- coding: utf-8 -*-
5 This file is part of Multilist.
7 Multilist is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 Multilist is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with Multilist. If not, see <http://www.gnu.org/licenses/>.
20 Copyright (C) 2008 Christoph Würstle
35 _moduleLogger = logging.getLogger(__name__)
38 class Liststorehandler(object):
41 SHOW_ACTIVE = "active"
42 ALL_FILTERS = (SHOW_ALL, SHOW_ACTIVE)
44 def __init__(self, db, selection):
46 self.__filter = self.SHOW_ALL
48 self.unitsstore = None
49 self.selection = selection
50 self.collist = ("uid", "status", "title", "quantitiy", "unit", "price", "priority", "date", "private", "stores", "note", "custom1", "custom2")
52 #sql = "DROP TABLE items"
53 #self.db.speichereSQL(sql)
55 sql = "CREATE TABLE items (uid TEXT, list TEXT, category TEXT, status TEXT, title TEXT, quantitiy TEXT, unit TEXT, price TEXT, priority TEXT, date TEXT, pcdate TEXT, private TEXT, stores TEXT, note TEXT, custom1 TEXT, custom2 TEXT)"
56 self.db.speichereSQL(sql)
59 self.selection.connect("changed", self.update_list)
60 #self.selection.connect("changedCategory", self.update_category)
63 sql = "INSERT INTO items (uid, list, category, title) VALUES (?, ?, ?, ?)"
65 self.db.speichereSQL(sql, (str(uuid.uuid4()), "default", "default", "atitel1"))
66 self.db.speichereSQL(sql, (str(uuid.uuid4()), "default", "default", "btitel2"))
67 self.db.speichereSQL(sql, (str(uuid.uuid4()), "default", "default", "ctitel3"))
72 def set_filter(self, filter):
73 assert filter in self.ALL_FILTERS
74 self.__filter = filter
80 def get_unitsstore(self):
81 if (self.unitsstore == None):
82 self.unitsstore = gtk.ListStore(str, str, str, str, str, str, str, str, str, str, str, str, str)
83 self.unitsstore.clear()
87 self.unitsstore.append(["-1", "-1", "", "", "", "", "", "", "", "", "", "", ""])
88 self.unitsstore.append(["-1", "-1", "", "1", "g", "", "0", "", "", "", "", "", ""])
89 self.unitsstore.append(["-1", "-1", "", "2", "kg", "", "1", "", "", "", "", "", ""])
90 self.unitsstore.append(["-1", "-1", "", "3", "liter", "", "2", "", "", "", "", "", ""])
91 self.unitsstore.append(["-1", "-1", "", "4", "packs", "", "3", "", "", "", "", "", ""])
92 self.unitsstore.append(["-1", "-1", "", "5", "", "", "4", "", "", "", "", "", ""])
93 self.unitsstore.append(["-1", "-1", "", "6", "", "", "5", "", "", "", "", "", ""])
94 self.unitsstore.append(["-1", "-1", "", "7", "", "", "6", "", "", "", "", "", ""])
95 self.unitsstore.append(["-1", "-1", "", "8", "", "", "7", "", "", "", "", "", ""])
96 self.unitsstore.append(["-1", "-1", "", "9", "", "", "8", "", "", "", "", "", ""])
97 self.unitsstore.append(["-1", "-1", "", "", "", "", "9", "", "", "", "", "", ""])
99 return self.unitsstore
101 def __calculate_status(self):
102 if self.__filter == self.SHOW_ACTIVE:
108 def get_liststore(self, titlesearch = ""):
109 if (self.liststore == None):
110 self.liststore = gtk.ListStore(str, str, str, str, str, str, str, str, str, str, str, str, str)
111 self.liststore.clear()
113 titlesearch = titlesearch+"%"
115 if self.__filter == self.SHOW_ACTIVE:
116 status = self.__calculate_status()
117 sql = "SELECT uid, status, title, quantitiy, unit, price, priority, date, private, stores, note, custom1, custom2 FROM items WHERE list = ? AND category LIKE ? AND status = ? AND title like ? ORDER BY category, status, title"
118 rows = self.db.ladeSQL(sql, (self.selection.get_list(), self.selection.get_category(True), status, titlesearch))
120 sql = "SELECT uid, status, title, quantitiy, unit, price, priority, date, private, stores, note, custom1, custom2 FROM items WHERE list = ? AND category LIKE ? AND title LIKE ? ORDER BY category, title ASC"
121 rows = self.db.ladeSQL(sql, (self.selection.get_list(), self.selection.get_category(True), titlesearch))
125 uid, status, title, quantitiy, unit, price, priority, date, private, stores, note, custom1, custom2 = row
129 self.liststore.append([uid, status, title, quantitiy, unit, price, priority, date, private, stores, note, custom1, custom2])
131 #self.liststore.append(["-1", "-1", "", " ", "", "", "", "", "", "", "", "", ""])
133 #self.liststore.append(["-1", "-1", "", "", "", "", "", "", "", "", "", "", ""])
135 return self.liststore
137 def emptyValueExists(self):
138 for child in self.liststore:
143 def update_row(self, irow, icol, new_text):
145 #for x in self.liststore:
148 if -1 < irow and self.liststore[irow][0] != "-1" and self.liststore[irow][0] is not None:
149 sql = "UPDATE items SET "+self.collist[icol]+" = ? WHERE uid = ?"
150 self.db.speichereSQL(sql, (new_text, self.liststore[irow][0]), rowid = self.liststore[irow][0])
152 _moduleLogger.info("Updated row: "+self.collist[icol]+" new text "+new_text+" Titel: "+str(self.liststore[irow][2])+" with uid "+str(self.liststore[irow][0]))
154 self.liststore[irow][icol] = new_text
156 _moduleLogger.warning("update_row: row does not exist")
158 #if (self.emptyValueExists() == True)and(icol<2):
159 # #print "letzter Eintrag ohne inhalt"
163 #for x in self.liststore:
166 def checkout_rows(self):
167 sql = "UPDATE items SET status = ? WHERE list = ? AND category LIKE ? AND status = ?"
168 self.db.speichereSQL(sql, ("-1", self.selection.get_list(), self.selection.get_category(True), "1"))
169 for i in range(len(self.liststore)):
170 if self.liststore[i][1] == "1":
171 self.liststore[i][1] = "-1"
173 def add_row(self, title = ""):
174 #self.update_row(-1, 1, "-1")
175 #for x in self.liststore:
177 status = self.__calculate_status()
179 uid = str(uuid.uuid4())
180 sql = "INSERT INTO items (uid, list, category, status, title) VALUES (?, ?, ?, ?, ?)"
181 self.db.speichereSQL(sql, (uid, self.selection.get_list(), self.selection.get_category(), status, title), rowid = uid)
182 _moduleLogger.info("Insertet row: status = "+status+" with uid "+str(uid))
183 #self.liststore[irow][0] = str(uuid.uuid4())
185 self.liststore.append([uid, status, title, " ", "", "", "", "", "", "", "", "", ""])
186 self.selection.comboLists_check_for_update()
188 # self.liststore[irow][icol] = new_text
189 # self.liststore[irow][0] = uid
191 # self.liststore.append([uid, "-1", "", " ", "", "", "", "", "", "", "", "", ""])
192 #print "xy", self.liststore[len(self.liststore)-1][0]
193 #Check if a new list/category is opened
194 # self.selection.comboLists_check_for_update()
196 def del_row(self, irow, row_iter):
197 uid = self.liststore[irow][0]
198 self.liststore.remove(row_iter)
199 sql = "DELETE FROM items WHERE uid = ?"
200 self.db.speichereSQL(sql, (uid, ))
202 def get_colname(self, i):
203 if i < len(self.collist):
204 return self.collist[i]
208 def get_colcount(self):
209 return len(self.collist)
211 def rename_category(self, new_name):
212 sql = "UPDATE items SET category = ? WHERE list = ? AND category = ?"
213 self.db.speichereSQL(sql, (new_name, self.selection.get_list(), self.selection.get_category()))
214 self.selection.comboList_changed()
215 self.selection.set_category(new_name)
217 def rename_list(self, new_name):
218 sql = "UPDATE items SET list = ? WHERE list = ?"
219 self.db.speichereSQL(sql, (new_name, self.selection.get_list(), ))
220 self.selection.load()
221 self.selection.set_list(new_name)
223 #@gtk_toolbox.log_exception(_moduleLogger)
224 #def update_category(self, widget = None, data = None, data2 = None, data3 = None):
225 # self.get_liststore()
227 @gtk_toolbox.log_exception(_moduleLogger)
228 def update_list(self, widget = None, data = None, data2 = None, data3 = None):