Slowly cleaning up the code
[multilist] / src / libliststorehandler.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 """
5 This file is part of Multilist.
6
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.
11
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.
16
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/>.
19
20 Copyright (C) 2008 Christoph Würstle
21 """
22
23 import gtk
24 import logging
25
26
27 try:
28         _
29 except NameError:
30         _ = lambda x: x
31
32
33 _moduleLogger = logging.getLogger(__name__)
34
35
36 class Liststorehandler(object):
37
38         def get_unitsstore(self):
39                 if (self.unitsstore==None):
40                         self.unitsstore=gtk.ListStore(str, str, str,str,str,  str,str, str, str,str, str, str,str)
41                 self.unitsstore.clear()
42                 #row(3) quantities
43                 #row 4 units
44                 #row 6 priority
45                 self.unitsstore.append(["-1","-1","","","","","","","","","","",""])
46                 self.unitsstore.append(["-1","-1","","1","g","","0","","","","","",""])
47                 self.unitsstore.append(["-1","-1","","2","kg","","1","","","","","",""])
48                 self.unitsstore.append(["-1","-1","","3","liter","","2","","","","","",""])
49                 self.unitsstore.append(["-1","-1","","4","packs","","3","","","","","",""])
50                 self.unitsstore.append(["-1","-1","","5","","","4","","","","","",""])
51                 self.unitsstore.append(["-1","-1","","6","","","5","","","","","",""])
52                 self.unitsstore.append(["-1","-1","","7","","","6","","","","","",""])
53                 self.unitsstore.append(["-1","-1","","8","","","7","","","","","",""])
54                 self.unitsstore.append(["-1","-1","","9","","","8","","","","","",""])
55                 self.unitsstore.append(["-1","-1","","","","","9","","","","","",""])
56
57                 return self.unitsstore
58
59         def get_liststore(self,titlesearch=""):
60                 if (self.liststore==None):
61                         self.liststore=gtk.ListStore(str, str, str,str,str,  str,str, str, str,str, str, str,str)
62                 self.liststore.clear()
63
64                 titlesearch=titlesearch+"%"
65
66                 if (self.selection.get_status()=="0"): #only 0 and 1 (active items)
67                         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"
68                         rows=self.db.ladeSQL(sql,(self.selection.get_list(),self.selection.get_category(True),self.selection.get_status(),titlesearch))
69                 else:
70                         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"
71                         rows=self.db.ladeSQL(sql,(self.selection.get_list(),self.selection.get_category(True),titlesearch))
72
73                 #print rows
74                 if ((rows!=None)and(len(rows)>0)):
75                         for row in rows:
76                                 uid,status,title,quantitiy,unit,price,priority,date,private,stores,note,custom1,custom2 = row
77                                 if unit==None:
78                                         pass
79                                         #unit=""
80                                 self.liststore.append([uid,status,title,quantitiy,unit,price,priority,date,private,stores,note,custom1,custom2])
81                         #else:
82                         #self.liststore.append(["-1","-1",""," ","","","","","","","","",""])   
83                 #import uuid
84                 #self.liststore.append(["-1","-1","","","","","","","","","","",""])
85
86                 return self.liststore
87
88         def emptyValueExists(self):
89                 for child in self.liststore:
90                         if child[2]=="":
91                                 return True
92                 return False
93
94         def update_row(self,irow,icol,new_text):
95                 #print "liststore 1"
96                 #for x in self.liststore:
97                 #       print x[0],x[2]
98
99                 if (irow>-1)and(self.liststore[irow][0]!="-1")and(self.liststore[irow][0]!=None):
100                         sql = "UPDATE items SET "+self.collist[icol]+"=? WHERE uid=?"
101                         self.db.speichereSQL(sql,(new_text,self.liststore[irow][0]),rowid=self.liststore[irow][0])
102
103                         _moduleLogger.info("Updated row: "+self.collist[icol]+" new text "+new_text+" Titel: "+str(self.liststore[irow][2])+" with uid "+str(self.liststore[irow][0]))
104
105                         self.liststore[irow][icol]=new_text
106                 else:
107                         _moduleLogger.warning("update_row: row does not exist")
108                         return
109                         #if (self.emptyValueExists()==True)and(icol<2):
110                         #       #print "letzter Eintrag ohne inhalt"
111                         #       return
112
113                 #print "liststore 2"
114                 #for x in self.liststore:
115                 #       print x[0],x[2]
116
117         def checkout_rows(self):
118                 sql = "UPDATE items SET status=? WHERE list=? AND category LIKE ? AND status=?"
119                 self.db.speichereSQL(sql,("-1",self.selection.get_list(),self.selection.get_category(True),"1"))
120                 for i in range(len(self.liststore)):
121                         if self.liststore[i][1]=="1":
122                                 self.liststore[i][1]="-1"
123
124         def add_row(self,title=""):
125                 #self.update_row(-1,1,"-1")
126                 #for x in self.liststore:
127                 #       print x[0],x[2]
128                 status=self.selection.get_status()
129                 import uuid
130                 uid=str(uuid.uuid4())
131                 sql = "INSERT INTO items (uid,list,category,status, title) VALUES (?,?,?,?,?)"
132                 self.db.speichereSQL(sql,(uid,self.selection.get_list(),self.selection.get_category(),status,title),rowid=uid)
133                 _moduleLogger.info("Insertet row: status = "+status+" with uid "+str(uid))
134                         #self.liststore[irow][0]=str(uuid.uuid4())
135
136                 self.liststore.append([uid,status,title," ","","","","","","","","",""])
137                 self.selection.comboLists_check_for_update()
138                 #       if (irow>-1):
139                 #               self.liststore[irow][icol]=new_text
140                 #               self.liststore[irow][0]=uid
141                 #       else:
142                 #               self.liststore.append([uid,"-1",""," ","","","","","","","","",""])
143                                 #print "xy",self.liststore[len(self.liststore)-1][0]
144                         #Check if a new list/category is opened
145                 #       self.selection.comboLists_check_for_update()
146
147         def del_row(self,irow,row_iter):
148                 uid=self.liststore[irow][0]
149                 self.liststore.remove(row_iter)
150                 sql = "DELETE FROM items WHERE uid=?"
151                 self.db.speichereSQL(sql,(uid,))
152
153         def get_colname(self,i):
154                 if i<len(self.collist):
155                         return self.collist[i]
156                 else:
157                         return None
158
159         def get_colcount(self):
160                 return len(self.collist)
161
162         def rename_category(self,new_name):
163                 sql = "UPDATE items SET category=? WHERE list=? AND category=?"
164                 self.db.speichereSQL(sql,(new_name,self.selection.get_list(),self.selection.get_category()))
165                 self.selection.comboList_changed()
166                 self.selection.set_category(new_name)
167
168         def rename_list(self,new_name):
169                 sql = "UPDATE items SET list=? WHERE list=?"
170                 self.db.speichereSQL(sql,(new_name,self.selection.get_list(),))
171                 self.selection.load()
172                 self.selection.set_list(new_name)
173
174         #def update_category(self,widget=None,data=None,data2=None,data3=None):
175         #       self.get_liststore()
176
177         def update_list(self,widget=None,data=None,data2=None,data3=None):
178                 self.get_liststore()
179
180         def __init__(self,db,selection):
181                 self.db=db
182                 self.liststore=None
183                 self.unitsstore=None
184                 self.selection=selection
185                 self.collist=("uid","status","title","quantitiy","unit","price","priority","date","private","stores","note","custom1","custom2")
186
187                 #sql="DROP TABLE items"
188                 #self.db.speichereSQL(sql)
189
190                 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)"
191                 self.db.speichereSQL(sql)
192
193                 self.selection.load()
194                 self.selection.connect("changed",self.update_list)
195                 #self.selection.connect("changedCategory",self.update_category)
196
197                 """
198                 sql = "INSERT INTO items (uid,list,category,title) VALUES (?,?,?,?)"
199                 import uuid
200                 self.db.speichereSQL(sql,(str(uuid.uuid4()),"default","default","atitel1"))
201                 self.db.speichereSQL(sql,(str(uuid.uuid4()),"default","default","btitel2"))
202                 self.db.speichereSQL(sql,(str(uuid.uuid4()),"default","default","ctitel3"))
203                 
204                 print "inserted"
205                 """