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
33 _moduleLogger = logging.getLogger(__name__)
36 class Liststorehandler(object):
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()
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","","","","","",""])
57 return self.unitsstore
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()
64 titlesearch=titlesearch+"%"
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))
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))
74 if ((rows!=None)and(len(rows)>0)):
76 uid,status,title,quantitiy,unit,price,priority,date,private,stores,note,custom1,custom2 = row
80 self.liststore.append([uid,status,title,quantitiy,unit,price,priority,date,private,stores,note,custom1,custom2])
82 #self.liststore.append(["-1","-1",""," ","","","","","","","","",""])
84 #self.liststore.append(["-1","-1","","","","","","","","","","",""])
88 def emptyValueExists(self):
89 for child in self.liststore:
94 def update_row(self,irow,icol,new_text):
96 #for x in self.liststore:
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])
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]))
105 self.liststore[irow][icol]=new_text
107 _moduleLogger.warning("update_row: row does not exist")
109 #if (self.emptyValueExists()==True)and(icol<2):
110 # #print "letzter Eintrag ohne inhalt"
114 #for x in self.liststore:
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"
124 def add_row(self,title=""):
125 #self.update_row(-1,1,"-1")
126 #for x in self.liststore:
128 status=self.selection.get_status()
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())
136 self.liststore.append([uid,status,title," ","","","","","","","","",""])
137 self.selection.comboLists_check_for_update()
139 # self.liststore[irow][icol]=new_text
140 # self.liststore[irow][0]=uid
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()
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,))
153 def get_colname(self,i):
154 if i<len(self.collist):
155 return self.collist[i]
159 def get_colcount(self):
160 return len(self.collist)
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)
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)
174 #def update_category(self,widget=None,data=None,data2=None,data3=None):
175 # self.get_liststore()
177 def update_list(self,widget=None,data=None,data2=None,data3=None):
180 def __init__(self,db,selection):
184 self.selection=selection
185 self.collist=("uid","status","title","quantitiy","unit","price","priority","date","private","stores","note","custom1","custom2")
187 #sql="DROP TABLE items"
188 #self.db.speichereSQL(sql)
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)
193 self.selection.load()
194 self.selection.connect("changed",self.update_list)
195 #self.selection.connect("changedCategory",self.update_category)
198 sql = "INSERT INTO items (uid,list,category,title) VALUES (?,?,?,?)"
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"))