diff --git a/app_gestion/MesCigares.py b/app_gestion/MesCigares.py index 1ebbd4c..a3717fd 100755 --- a/app_gestion/MesCigares.py +++ b/app_gestion/MesCigares.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import sys, os +import sys +import os import sqlite3 import locale import ntpath @@ -16,6 +17,7 @@ __BDD__ = "bdd/main.db" __CONFDIR__ = os.path.dirname(os.path.realpath("MesCigares.py")) __CONFIGFILE__ = "conf/mescigares.conf" + class MesCigares: def on_window_main_destroy(self, widget, data=None): @@ -31,7 +33,7 @@ class MesCigares: self.aboutdialog.hide() # Mise à jour de la quantité en fonction du cigare choisi dans la liste déroulante - def on_cbchoixcigqte_changed(self,object,data=None): + def on_cbchoixcigqte_changed(self, object, data=None): item = self.cbchoixcigqte.get_active() # Si aucune séléction, pas besoin de traitement. @@ -50,7 +52,7 @@ class MesCigares: # Permet d'alimenter la treeview avec la liste des cigares def loadtreeview(self): if len(self.table) != 0: - self.table.clear() + self.table.clear() cursor = db.cursor() cursor.execute('Select c.designation, m.libelle, mo.module,m.provenance, s.quantite,c.id from cigares c inner join modules mo on mo.id = c.module inner join marques m on m.id = c.marque inner join stocks s on s.id_cigare = c.id') @@ -60,9 +62,9 @@ class MesCigares: rs2 = cursor.fetchall() # top = 5 premier items de la liste par meilleure note [2] pour la note seulement top = sorted(rs2, reverse=True)[0:5] - print (top) + print(top) # top5 = juste les id - top5 = list() + top5 = list() for i in top: top5.append(i[2]) @@ -76,9 +78,9 @@ class MesCigares: iter = self.table.append() # Si le nombre de cigares est = 0 on affiche la ligne en rouge clair if (item[4] == 0): - color = '#F3B9B9' # rouge clair + color = '#F3B9B9' # rouge clair else: - color = '#FFFFFF' # blanc + color = '#FFFFFF' # blanc # On regarde si l'enregistrement est dans le top 5 try: @@ -103,37 +105,37 @@ class MesCigares: # Il n'y a pas de outer join en sqlite du coup je suis obligé d'alimenter les notes à part for item2 in rs2: itr = self.table.get_iter_first() - while ( itr != None ): + while (itr != None): # itr, 5 = id de la table cigare (colonne 4 invisible), item2[2] = id_cigare table degustation - if self.table.get_value (itr, 5) == item2[2]: + if self.table.get_value(itr, 5) == item2[2]: self.table.set(itr, 6, item2[1], 7, item2[0]) - itr= self.table.iter_next(itr) + itr = self.table.iter_next(itr) for item3 in rs3: - itr = self.table.get_iter_first () - while ( itr != None ): + itr = self.table.get_iter_first() + while (itr != None): # itr, 5 = id de la table cigare (colonne 4 invisible), item3[1] = id_cigare table achats - if self.table.get_value (itr, 5) == item3[1]: + if self.table.get_value(itr, 5) == item3[1]: # .2f pour 2 decimales it = '%.2f' % item3[0] self.table.set(itr, 8, it + " €", 10, float(item3[0])) - itr= self.table.iter_next(itr) + itr = self.table.iter_next(itr) for item4 in rs4: - itr = self.table.get_iter_first () - while ( itr != None ): + itr = self.table.get_iter_first() + while (itr != None): # itr, 4 = id de la table cigare (colonne 4 invisible), item4[1] = id_cigare table achats - if self.table.get_value (itr, 5) == item4[1]: + if self.table.get_value(itr, 5) == item4[1]: self.table.set(itr, 9, item4[0]) - itr= self.table.iter_next(itr) + itr = self.table.iter_next(itr) # On calcule le nombre de cigares et le prix nbcigares = 0 montant = 0 - itr = self.table.get_iter_first () - while ( itr != None ): + itr = self.table.get_iter_first() + while (itr != None): nbcigares += int(self.table.get_value(itr, 4)) if self.table.get_value(itr, 8) is not None: montant += float(self.table.get_value(itr, 10)) * int(self.table.get_value(itr, 4)) - itr= self.table.iter_next(itr) + itr = self.table.iter_next(itr) montant = '%.2f' % montant # On calcule le prix total @@ -159,7 +161,7 @@ class MesCigares: photo = cursor.execute("select photo from photos where id_cigare = '{0}'".format(self.treeview_selection[5])) try: - photo = cursor.fetchone()[0] + photo = cursor.fetchone()[0] except TypeError: photo = None cursor.close() @@ -174,14 +176,14 @@ class MesCigares: new_size = self.window.get_size()[0] - 20 if(pixbuf.get_width() > new_size): w, h = pixbuf.get_width(), pixbuf.get_height() - pixbuf = pixbuf.scale_simple( new_size, new_size * h / w, GdkPixbuf.InterpType.HYPER) + pixbuf = pixbuf.scale_simple(new_size, new_size * h / w, GdkPixbuf.InterpType.HYPER) # Si la largeur de l'image est plus petite que la hauteur on fait pivoter if(pixbuf.get_width() < pixbuf.get_height()): pixbuf = pixbuf.rotate_simple(270) # Si la hauteur est dépasse la moitié de la fenêtre principale, on re-dimensionne - if(pixbuf.get_height() > self.window.get_size()[1]/2): + if(pixbuf.get_height() > self.window.get_size()[1] / 2): w, h = pixbuf.get_width(), pixbuf.get_height() - pixbuf = pixbuf.scale_simple( (w * self.window.get_size()[1]/2)/h, self.window.get_size()[1]/2 , GdkPixbuf.InterpType.HYPER) + pixbuf = pixbuf.scale_simple((w * self.window.get_size()[1] / 2) / h, self.window.get_size()[1] / 2, GdkPixbuf.InterpType.HYPER) self.image_preview.set_from_pixbuf(pixbuf) else: # Si la photo n'existe plus ou a été renommée @@ -191,8 +193,8 @@ class MesCigares: # Si la fenêtre principale change de taille on re-dimensionne le preview aussi def on_window_main_check_resize(self, widget): - #print(self.window.get_size()[1],self.window_last_h) - if (( abs(self.window_last_h - self.window.get_size()[1]) > 40) | ( abs(self.window_last_w - self.window.get_size()[0]) > 5) ): + # print(self.window.get_size()[1],self.window_last_h) + if ((abs(self.window_last_h - self.window.get_size()[1]) > 40) | (abs(self.window_last_w - self.window.get_size()[0]) > 5)): self.window_last_h = self.window.get_size()[1] self.window_last_w = self.window.get_size()[0] @@ -203,14 +205,14 @@ class MesCigares: new_size = self.window.get_size()[0] - 20 if(pixbuf.get_width() > new_size): w, h = pixbuf.get_width(), pixbuf.get_height() - pixbuf = pixbuf.scale_simple( new_size, new_size * h / w, GdkPixbuf.InterpType.HYPER) + pixbuf = pixbuf.scale_simple(new_size, new_size * h / w, GdkPixbuf.InterpType.HYPER) # Si la largeur de l'image est plus petite que la hauteur on fait pivoter if(pixbuf.get_width() < pixbuf.get_height()): pixbuf = pixbuf.rotate_simple(270) # Si la hauteur est dépasse la moitié de la fenêtre principale, on re-dimensionne - if(pixbuf.get_height() > self.window.get_size()[1]/2): + if(pixbuf.get_height() > self.window.get_size()[1] / 2): w, h = pixbuf.get_width(), pixbuf.get_height() - pixbuf = pixbuf.scale_simple( (w * self.window.get_size()[1]/2)/h, self.window.get_size()[1]/2 , GdkPixbuf.InterpType.HYPER) + pixbuf = pixbuf.scale_simple((w * self.window.get_size()[1] / 2) / h, self.window.get_size()[1] / 2, GdkPixbuf.InterpType.HYPER) self.image_preview.set_from_pixbuf(pixbuf) # Dès qu'une ligne est séléctionnée sur la treeview on enregistre les valeurs @@ -238,7 +240,7 @@ class MesCigares: (model, iter) = selection.get_selected() if iter is not None: lib = model.get_value(iter, 0) - qtee = model.get_value(iter,5) + qtee = model.get_value(iter, 5) return(lib, qtee) # Changer de base de données @@ -262,7 +264,7 @@ class MesCigares: db.close() db = sqlite3.connect(self.filechooser_bdd.get_filename()) # On met à jour le titre de la fenêtre - self.window.set_title("MesCigares - base : {0}".format(ntpath.basename(self.filechooser_bdd.get_filename().replace('.db','')))) + self.window.set_title("MesCigares - base : {0}".format(ntpath.basename(self.filechooser_bdd.get_filename().replace('.db', '')))) self.loadtreeview() self.filechooser_bdd.hide() @@ -286,7 +288,7 @@ class MesCigares: def on_modsupp_degustation_activate(self, widget): # On commence par vider la liststore_date_modif_degustation (2ème utilisation) if len(self.liststore_date_modif_degustation) != 0: - self.liststore_date_modif_degustation.clear() + self.liststore_date_modif_degustation.clear() cursor = db.cursor() # On regarde récupère le commentaire @@ -377,23 +379,22 @@ class MesCigares: self.scaleq12m.set_value(1) self.scaleq13m.set_value(1) - # Calcul de la note globale pour modification d'une note de dégustation def on_scaleqm_change_value(self, scale, enum, new_value): # On récupère les notes - q1=int(self.scaleq1m.get_value()) - q2=int(self.scaleq2m.get_value()) - q3=int(self.scaleq3m.get_value()) - q4=int(self.scaleq4m.get_value()) - q5=int(self.scaleq5m.get_value()) - q6=int(self.scaleq6m.get_value()) - q7=int(self.scaleq7m.get_value()) - q8=int(self.scaleq8m.get_value()) - q9=int(self.scaleq9m.get_value()) - q10=int(self.scaleq10m.get_value()) - q11=int(self.scaleq11m.get_value()) - q12=int(self.scaleq12m.get_value()) - q13=int(self.scaleq13m.get_value()) + q1 = int(self.scaleq1m.get_value()) + q2 = int(self.scaleq2m.get_value()) + q3 = int(self.scaleq3m.get_value()) + q4 = int(self.scaleq4m.get_value()) + q5 = int(self.scaleq5m.get_value()) + q6 = int(self.scaleq6m.get_value()) + q7 = int(self.scaleq7m.get_value()) + q8 = int(self.scaleq8m.get_value()) + q9 = int(self.scaleq9m.get_value()) + q10 = int(self.scaleq10m.get_value()) + q11 = int(self.scaleq11m.get_value()) + q12 = int(self.scaleq12m.get_value()) + q13 = int(self.scaleq13m.get_value()) note = q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 + q11 + q12 + q13 # On affiche la note / 100 temporaire @@ -407,21 +408,21 @@ class MesCigares: start = textbuffer.get_start_iter() end = textbuffer.get_end_iter() # On récupère le commentaire et on échape les quote pour l'insert SQL - commentaire = textbuffer.get_text(start, end, include_hidden_chars=False).replace("'","''") + commentaire = textbuffer.get_text(start, end, include_hidden_chars=False).replace("'", "''") # On récupère les notes - q1=int(self.scaleq1m.get_value()) - q2=int(self.scaleq2m.get_value()) - q3=int(self.scaleq3m.get_value()) - q4=int(self.scaleq4m.get_value()) - q5=int(self.scaleq5m.get_value()) - q6=int(self.scaleq6m.get_value()) - q7=int(self.scaleq7m.get_value()) - q8=int(self.scaleq8m.get_value()) - q9=int(self.scaleq9m.get_value()) - q10=int(self.scaleq10m.get_value()) - q11=int(self.scaleq11m.get_value()) - q12=int(self.scaleq12m.get_value()) - q13=int(self.scaleq13m.get_value()) + q1 = int(self.scaleq1m.get_value()) + q2 = int(self.scaleq2m.get_value()) + q3 = int(self.scaleq3m.get_value()) + q4 = int(self.scaleq4m.get_value()) + q5 = int(self.scaleq5m.get_value()) + q6 = int(self.scaleq6m.get_value()) + q7 = int(self.scaleq7m.get_value()) + q8 = int(self.scaleq8m.get_value()) + q9 = int(self.scaleq9m.get_value()) + q10 = int(self.scaleq10m.get_value()) + q11 = int(self.scaleq11m.get_value()) + q12 = int(self.scaleq12m.get_value()) + q13 = int(self.scaleq13m.get_value()) note = q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 + q11 + q12 + q13 # Le commentaire et l'id @@ -430,7 +431,7 @@ class MesCigares: # On met à jour la base de données cursor = db.cursor() - sql = "update degustation set commentaires = '{0}', q1 = '{1}', q2 = '{2}', q3 = '{3}', q4 = '{4}', q5 = '{5}', q7 = '{7}', q8 = '{8}', q9 = '{9}', q10 = '{10}', q11 = '{11}', q12 = '{12}', q13 = '{13}', note = '{14}' where id_cigare = '{15}' and id = '{16}'".format(commentaire, q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, note , id_cigare, idcomm) + sql = "update degustation set commentaires = '{0}', q1 = '{1}', q2 = '{2}', q3 = '{3}', q4 = '{4}', q5 = '{5}', q7 = '{7}', q8 = '{8}', q9 = '{9}', q10 = '{10}', q11 = '{11}', q12 = '{12}', q13 = '{13}', note = '{14}' where id_cigare = '{15}' and id = '{16}'".format(commentaire, q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, note, id_cigare, idcomm) cursor.execute(sql) db.commit() cursor.close() @@ -458,7 +459,7 @@ class MesCigares: # On regarde s'il y a déjà une photo pour le cigare séléctionné nb = cursor.execute("select count(*) from photos where id_cigare = '{0}'".format(self.treeview_selection[5])).fetchone()[0] # si nb = 0 on insère sinon on update la table photos - if ( nb == 0): + if (nb == 0): cursor.execute("insert into photos (id_cigare, photo) values('{0}','{1}')".format(self.treeview_selection[5], path)) else: cursor.execute("update photos set photo = '{0}' where id_cigare='{1}'".format(path, self.treeview_selection[5])) @@ -469,17 +470,16 @@ class MesCigares: def on_treeview_cigares_button_press_event(self, treeview, event): x = int(event.x) y = int(event.y) - if event.button == 3: # Clic droit + if event.button == 3: # Clic droit pthinfo = self.tree.get_path_at_pos(x, y) if pthinfo is not None: path, col, cellx, celly = pthinfo self.tree.grab_focus() - self.tree.set_cursor( path, col, 0) + self.tree.set_cursor(path, col, 0) # On affiche le popup - self.popup.show_all(); + self.popup.show_all() self.popup.popup(None, None, None, None, event.button, event.time) - def text_edited(self, widget, path, text): self.liststore[path][1] = text @@ -489,27 +489,27 @@ class MesCigares: if col == 4: try: self.table.set_value(iter, col, int(new_text)) - self.update_db("id", new_text,tuple(self.treeview_selection)[5]) - except ValueError: # Si la quantité saisie n'est pas un entier + self.update_db("id", new_text, tuple(self.treeview_selection)[5]) + except ValueError: # Si la quantité saisie n'est pas un entier pass else: self.table.set_value(iter, col, new_text) - self.update_db("nom", new_text,tuple(self.treeview_selection)[5]) + self.update_db("nom", new_text, tuple(self.treeview_selection)[5]) # Mise à jour de la BDD si changement dans un cellule def update_db(self, operation, new_text, indice): cursor = db.cursor() # update cigares.designation if (operation == 'nom'): - sql = "update cigares set designation = '{0}' where id = '{1}'".format(new_text.replace("'","''"),str(indice)) - #print(sql) + sql = "update cigares set designation = '{0}' where id = '{1}'".format(new_text.replace("'", "''"), str(indice)) + # print(sql) cursor.execute(sql) db.commit() # update quantité dans table stock if (operation == 'id'): sql = "update stocks set quantite = '{0}' where id_cigare='{1}'".format(new_text, str(indice)) - #print(sql) + # print(sql) cursor.execute(sql) db.commit() @@ -521,10 +521,9 @@ class MesCigares: def on_gtk_new_activate(self, widget): # On commence par vider le liststore_marques (2è recherche) if len(self.tablemarques) != 0: - self.tablemarques.clear() + self.tablemarques.clear() if len(self.tablemodules) != 0: - self.tablemodules.clear() - + self.tablemodules.clear() cursor = db.cursor() cursor.execute('Select id, libelle, provenance from marques order by lower(libelle)') @@ -546,7 +545,7 @@ class MesCigares: self.dialog_add_cigare.hide() # Changement dans la liste déroulante des marques - def on_cbmarques_changed(self,widget): + def on_cbmarques_changed(self, widget): index = self.cbmarques.get_active() try: provenance = self.tablemarques[index][2].title() @@ -554,9 +553,8 @@ class MesCigares: except IndexError: self.lbl_marque.set_text("") - # Changement dans la liste déroulante des modules - def on_cbmodules_changed(self,widget): + def on_cbmodules_changed(self, widget): try: index = self.cbmodules.get_active() longueur = self.tablemodules[index][2] @@ -567,7 +565,7 @@ class MesCigares: self.lbl_module.set_text("") # Validation de l'ajout d'un nouveau cigare - def on_btadd_clicked(self,widget): + def on_btadd_clicked(self, widget): index = self.cbmarques.get_active() model = self.cbmarques.get_model() itemmarque = model[index] @@ -584,15 +582,14 @@ class MesCigares: # table stocks : id_cigare = max id + 1 #print (str(self.entry_nom_cigare.get_text())) - cursor = db.cursor() cursor.execute('Select max(id) from cigares') try: maxid = cursor.fetchone()[0] + 1 except TypeError: maxid = 1 - cursor.execute("insert into stocks (id_cigare, quantite) values ('{0}','{1}')".format(int(maxid),0)) - cursor.execute("insert into cigares (designation, marque, module) values ('{0}','{1}', '{2}')".format(str(self.entry_nom_cigare.get_text()), int(itemmarque[0]),int(itemmodel[0]))) + cursor.execute("insert into stocks (id_cigare, quantite) values ('{0}','{1}')".format(int(maxid), 0)) + cursor.execute("insert into cigares (designation, marque, module) values ('{0}','{1}', '{2}')".format(str(self.entry_nom_cigare.get_text()), int(itemmarque[0]), int(itemmodel[0]))) db.commit() cursor.close() @@ -610,8 +607,7 @@ class MesCigares: self.notebook_achats.set_current_page(0) # On vide le listestore_liste_cigares (2è recherche) if len(self.tablechoixcig) != 0: - self.tablechoixcig.clear() - + self.tablechoixcig.clear() cursor = db.cursor() cursor.execute('Select c.id, c.designation from cigares c order by c.designation asc') @@ -637,7 +633,7 @@ class MesCigares: id_cigare = itemchoixcig[0] # On vérifie les saisies - if(index == -1): # Aucun cigare choisi + if(index == -1): # Aucun cigare choisi self.msgdialog.format_secondary_text("Vous devez d'abord choisir un cigare dans la liste") self.msgdialog.run() self.msgdialog.hide() @@ -654,12 +650,12 @@ class MesCigares: self.msgdialog.run() self.msgdialog.hide() return - if(self.notebook_achats.get_current_page() == 0): # Choix à l'unité + if(self.notebook_achats.get_current_page() == 0): # Choix à l'unité qte_achat = int(self.scale_qte_achats.get_value()) - prix_achat = self.entry_prix_achats.get_text().replace(",",".") + prix_achat = self.entry_prix_achats.get_text().replace(",", ".") prix_achat = '%.2f' % float(prix_achat) code_boite = "" - else: # = 1 choix par boites + else: # = 1 choix par boites qte_achat = int(self.scale_typeboite.get_value()) prix_achat = float(self.entry_prix_boite.get_text()) / qte_achat prix_achat = '%.2f' % prix_achat @@ -670,10 +666,10 @@ class MesCigares: # On formate la date (ajout d'un 0 si besoin) j = str(self.calendar_date_achats.get_date()[2]) - if(len(str(self.calendar_date_achats.get_date()[1] +1)) == 1): - m = "0" + str(self.calendar_date_achats.get_date()[1] +1) + if(len(str(self.calendar_date_achats.get_date()[1] + 1)) == 1): + m = "0" + str(self.calendar_date_achats.get_date()[1] + 1) else: - m = str(self.calendar_date_achats.get_date()[1] +1) + m = str(self.calendar_date_achats.get_date()[1] + 1) a = self.calendar_date_achats.get_date()[0] date_achat = "{0}/{1}/{2}".format(j, m, a) @@ -735,7 +731,7 @@ class MesCigares: def on_gtk_stocks_activate(self, menuitem, data=None): # On commence par vider le listestore_liste_cigares (2è recherche) if len(self.tablechoixcig) != 0: - self.tablechoixcig.clear() + self.tablechoixcig.clear() cursor = db.cursor() cursor.execute('Select c.id, c.designation from cigares c order by c.designation asc') @@ -754,7 +750,6 @@ class MesCigares: model = self.cbchoixcigqte.get_model() idc = model[item] - cursor = db.cursor() cursor.execute("Update stocks set quantite = '{0}' where id_cigare = '{1}'".format(int(self.scaleqte.get_value()), idc[0])) db.commit() @@ -767,9 +762,9 @@ class MesCigares: self.loadtreeview() # Affichage de la fenêtre de dégustation - def on_gtk_degustation_activate(self,menuitem, data=None): + def on_gtk_degustation_activate(self, menuitem, data=None): if len(self.tablechoixcigare) != 0: - self.tablechoixcigare.clear() + self.tablechoixcigare.clear() cursor = db.cursor() cursor.execute('Select c.id, c.designation from cigares c where c.id not in (select s.id_cigare from stocks s where s.quantite = 0) order by c.designation asc') @@ -787,10 +782,10 @@ class MesCigares: # On formate la date (ajout d'un 0 si besoin) j = str(self.DegustationDate.get_date()[2]) - if(len(str(self.DegustationDate.get_date()[1] +1)) == 1): - m = "0" + str(self.DegustationDate.get_date()[1] +1) + if(len(str(self.DegustationDate.get_date()[1] + 1)) == 1): + m = "0" + str(self.DegustationDate.get_date()[1] + 1) else: - m = str(self.DegustationDate.get_date()[1] +1) + m = str(self.DegustationDate.get_date()[1] + 1) a = self.DegustationDate.get_date()[0] # Formatage de la date du calendar au format %d/%m/%Y @@ -800,16 +795,15 @@ class MesCigares: start = textbuffer.get_start_iter() end = textbuffer.get_end_iter() # On récupère le commentaire et on échape les quote pour l'insert SQL - textlines = textbuffer.get_text(start, end, include_hidden_chars=False).replace("'","''") + textlines = textbuffer.get_text(start, end, include_hidden_chars=False).replace("'", "''") index = self.cbchoixcigare.get_active() itemchoixcig = self.tablechoixcigare[index] - note = int(self.scaleq1.get_value()) + int(self.scaleq2.get_value())+int(self.scaleq3.get_value())+int(self.scaleq4.get_value())+int(self.scaleq5.get_value())+int(self.scaleq6.get_value())+int(self.scaleq7.get_value())+int(self.scaleq8.get_value())+int(self.scaleq9.get_value())+int(self.scaleq10.get_value())+int(self.scaleq11.get_value())+int(self.scaleq12.get_value())+int(self.scaleq13.get_value()) - + note = int(self.scaleq1.get_value()) + int(self.scaleq2.get_value()) + int(self.scaleq3.get_value()) + int(self.scaleq4.get_value()) + int(self.scaleq5.get_value()) + int(self.scaleq6.get_value()) + int(self.scaleq7.get_value()) + int(self.scaleq8.get_value()) + int(self.scaleq9.get_value()) + int(self.scaleq10.get_value()) + int(self.scaleq11.get_value()) + int(self.scaleq12.get_value()) + int(self.scaleq13.get_value()) cursor = db.cursor() - cursor.execute("insert into degustation (id_cigare,date,commentaires,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,note) values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}')".format(itemchoixcig[0],DateDegustation ,textlines,int(self.scaleq1.get_value()),int(self.scaleq2.get_value()),int(self.scaleq3.get_value()),int(self.scaleq4.get_value()),int(self.scaleq5.get_value()),int(self.scaleq6.get_value()),int(self.scaleq7.get_value()),int(self.scaleq8.get_value()),int(self.scaleq9.get_value()),int(self.scaleq10.get_value()),int(self.scaleq11.get_value()),int(self.scaleq12.get_value()),int(self.scaleq13.get_value()),note)) + cursor.execute("insert into degustation (id_cigare,date,commentaires,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,note) values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}')".format(itemchoixcig[0], DateDegustation, textlines, int(self.scaleq1.get_value()), int(self.scaleq2.get_value()), int(self.scaleq3.get_value()), int(self.scaleq4.get_value()), int(self.scaleq5.get_value()), int(self.scaleq6.get_value()), int(self.scaleq7.get_value()), int(self.scaleq8.get_value()), int(self.scaleq9.get_value()), int(self.scaleq10.get_value()), int(self.scaleq11.get_value()), int(self.scaleq12.get_value()), int(self.scaleq13.get_value()), note)) # - 1 sur le stock cursor.execute("update stocks set quantite = quantite - 1 where id = {0}".format(itemchoixcig[0])) db.commit() @@ -827,7 +821,7 @@ class MesCigares: def on_gtk_wish_activate(self, menuitem, data=None): # On commence par vider le listestore_wishes (2è recherche) if len(self.liststore_wishes) != 0: - self.liststore_wishes.clear() + self.liststore_wishes.clear() cursor = db.cursor() cursor.execute('select nom, provenance,raison,source,id from tester order by id') @@ -849,7 +843,7 @@ class MesCigares: # Affichage de l'assistant d'aide pour la documentation def on_gtk_how_to_activate(self, widget): self.doc.show() - #self.doc.hide() + # self.doc.hide() def on_lbl_intro_activate_link(self, widget): self.doc.set_forward_page_func(page_func=None, data=None) @@ -870,7 +864,7 @@ class MesCigares: start = textbuffer.get_start_iter() end = textbuffer.get_end_iter() # On récupère le commentaire et on échape les quote pour l'insert SQL - textlines = textbuffer.get_text(start, end, include_hidden_chars=False).replace("'","''") + textlines = textbuffer.get_text(start, end, include_hidden_chars=False).replace("'", "''") # On ajoute en base de données cursor = db.cursor() @@ -886,17 +880,16 @@ class MesCigares: def on_treeview_wishes_button_press_event(self, treeview, event): x = int(event.x) y = int(event.y) - if event.button == 3: # Clic droit + if event.button == 3: # Clic droit pthinfo = self.treeview_wishes.get_path_at_pos(x, y) if pthinfo is not None: path, col, cellx, celly = pthinfo self.treeview_wishes.grab_focus() - self.treeview_wishes.set_cursor( path, col, 0) + self.treeview_wishes.set_cursor(path, col, 0) # On affiche le popup - self.popup_test.show_all(); + self.popup_test.show_all() self.popup_test.popup(None, None, None, None, event.button, event.time) - # Ouvrir l'url dans le navigateur au clic droit sur une ligne de la treeview des cigares à tester def on_gtk_copier_test_activate(self, widget): try: @@ -911,12 +904,12 @@ class MesCigares: if iter is not None: url = model.get_value(iter, 3) if not urlparse(url).scheme: - url = "http://"+url + url = "http://" + url # On copie dans le presse papier webbrowser.open(url) # Pour supprimer au clic droit - def on_gtk_supprimer_activate(self,widget): + def on_gtk_supprimer_activate(self, widget): id_supp = self.treeview_selection[5] cursor = db.cursor() sql = "delete from cigares where id = {0}".format(id_supp) @@ -937,7 +930,7 @@ class MesCigares: self.loadtreeview() # Pour supprimer un cigare à tester au clic droit - def on_gtk_supprimer_test_activate(self,widget): + def on_gtk_supprimer_test_activate(self, widget): selection = self.treeview_wishes.get_selection() (model, iter) = selection.get_selected() if iter is not None: @@ -970,7 +963,8 @@ class MesCigares: pass return False # Filtrer au changement sur entry_search - def on_entry_search_changed(self, data=None): + + def on_entry_search_changed(self, data=None): self.tree_filter.refilter() def __init__(self): @@ -1034,7 +1028,6 @@ class MesCigares: self.filechooser_image = self.builder.get_object("filechooser_image") self.filechooser_bdd = self.builder.get_object("filechooser_bdd") - # Fenêtre d'ajout d'une marque self.entry_marque = self.builder.get_object("entry_marque") self.entry_provenance = self.builder.get_object("entry_provenance") @@ -1102,7 +1095,7 @@ class MesCigares: # Filter la treeview des cigares self.tree_filter = self.table.filter_new() self.tree_filter.set_visible_func(self.filter_func) - self.filtered_model = gtk.TreeModelSort(model=self.tree_filter) + self.filtered_model = gtk.TreeModelSort(model=self.tree_filter) # Treeview de la liste des cigares self.tree = self.builder.get_object("treeview_cigares") @@ -1116,7 +1109,7 @@ class MesCigares: self.editable_cell_qte = gtk.CellRendererText() self.invisible_cell = gtk.CellRendererText() - self.editable_cell_nom.connect('edited', self.cell_edited_callback,0) + self.editable_cell_nom.connect('edited', self.cell_edited_callback, 0) self.editable_cell_nom.set_property('editable', True) self.col_nom = gtk.TreeViewColumn('Nom', self.editable_cell_nom, text=0, background=11) @@ -1133,22 +1126,22 @@ class MesCigares: self.col_marque.set_sort_column_id(1) self.tree.append_column(self.col_marque) - self.col_module= gtk.TreeViewColumn('Module', self.no_editable_cell, text=2, background=11) + self.col_module = gtk.TreeViewColumn('Module', self.no_editable_cell, text=2, background=11) self.col_module.set_sort_column_id(2) self.tree.append_column(self.col_module) - self.col_provenance= gtk.TreeViewColumn('Terroir', self.no_editable_cell, text=3, background=11) + self.col_provenance = gtk.TreeViewColumn('Terroir', self.no_editable_cell, text=3, background=11) self.col_provenance.set_sort_column_id(3) self.tree.append_column(self.col_provenance) - self.editable_cell_qte.connect('edited', self.cell_edited_callback,4) + self.editable_cell_qte.connect('edited', self.cell_edited_callback, 4) self.editable_cell_qte.set_property('editable', True) self.col_qte = gtk.TreeViewColumn('Quantité', self.editable_cell_qte, text=4, background=11) self.col_qte.set_sort_column_id(4) self.tree.append_column(self.col_qte) # colonne invisible pour l'id_cigare - self.invisible_cell.set_property('visible',False) + self.invisible_cell.set_property('visible', False) self.col_id = gtk.TreeViewColumn('id', self.invisible_cell, text=5, background=11) self.col_id.set_sort_column_id(5) @@ -1196,6 +1189,8 @@ class MesCigares: self.loadtreeview() # Vérifier qu'il s'agit d'un nombre + + def is_number(s): try: float(s) @@ -1203,6 +1198,7 @@ def is_number(s): except ValueError: return False + def createdb(new_bdd): db = sqlite3.connect(new_bdd) cursor = db.cursor() @@ -1459,6 +1455,7 @@ def createdb(new_bdd): db.commit() + def checkconfig(): """Récupérer la configuration ou la créer""" # Fichier de configuration @@ -1467,23 +1464,23 @@ def checkconfig(): config = configparser.RawConfigParser() try: config.read(__CONFIGFILE__) - if config.has_option('MesCigares','bdd'): - bdd = config.get('MesCigares','bdd') + if config.has_option('MesCigares', 'bdd'): + bdd = config.get('MesCigares', 'bdd') except: pass - if not os.path.exists(bdd): + if not os.path.exists(bdd): createdb(bdd) # Si aucune conf - if not(config.has_option('MesCigares','bdd')): + if not(config.has_option('MesCigares', 'bdd')): bdd = __CONFDIR__ + "/bdd/main.db" # écrire le fichier de conf avec les informations par defaut try: - cfgfile = open(__CONFIGFILE__,'w') + cfgfile = open(__CONFIGFILE__, 'w') if not(config.has_section('MesCigares')): config.add_section('MesCigares') - config.set('MesCigares','bdd',bdd) + config.set('MesCigares', 'bdd', bdd) config.write(cfgfile) except IOError: pass @@ -1492,14 +1489,15 @@ def checkconfig(): createdb(bdd) return(bdd) + def setconfig(new_bdd): """Mettre à jour la configuration""" config = configparser.RawConfigParser() try: - cfgfile = open(__CONFIGFILE__,'w') + cfgfile = open(__CONFIGFILE__, 'w') if not(config.has_section('MesCigares')): config.add_section('MesCigares') - config.set('MesCigares','bdd',new_bdd) + config.set('MesCigares', 'bdd', new_bdd) config.write(cfgfile) except IOError: pass @@ -1510,5 +1508,5 @@ if __name__ == "__main__": dbconf = checkconfig() db = sqlite3.connect(dbconf) main = MesCigares() - main.window.set_title("MesCigares - base : {0}".format(ntpath.basename(dbconf)).replace('.db','')) + main.window.set_title("MesCigares - base : {0}".format(ntpath.basename(dbconf)).replace('.db', '')) gtk.main() diff --git a/app_gestion/conf/mescigares.conf b/app_gestion/conf/mescigares.conf index dbd5e63..be625d0 100644 --- a/app_gestion/conf/mescigares.conf +++ b/app_gestion/conf/mescigares.conf @@ -1,3 +1,3 @@ [MesCigares] -bdd = /home/jlaunay/git/Cigares/app_gestion/MesCigares/bdd/jerome.db +bdd = /home/jlaunay/git/Cigares/app_gestion/bdd/jerome.db