cave/cave.py

305 lines
12 KiB
Python
Raw Normal View History

2018-02-11 18:20:16 +00:00
import json
2018-02-11 19:50:12 +00:00
from tkinter import Scrollbar,Label,LabelFrame,Entry,Button,OptionMenu,StringVar,Canvas,Toplevel,N,S,VERTICAL,Tk,Frame
2018-02-05 21:24:27 +00:00
2018-02-03 18:22:49 +00:00
class Etageres(object):
2018-02-03 16:58:40 +00:00
def __init__(self):
2018-02-05 20:16:16 +00:00
self.etageres = []
self.nbetagere = 0
2018-02-11 18:20:16 +00:00
self.couleur = {"rouge": "red", "blanc": "white",
"rose": "pink", "champagne": "yellow"}
2018-02-05 20:52:28 +00:00
@classmethod
2018-02-11 18:20:16 +00:00
def load_etageres(cls, file):
2018-02-10 20:45:11 +00:00
try:
with open(file, 'rb') as json_data:
2018-02-11 18:20:16 +00:00
data = json.load(json_data)
2018-02-10 20:45:11 +00:00
except FileNotFoundError:
2018-02-11 18:20:16 +00:00
print("no file to load")
2018-02-10 20:45:11 +00:00
return Etageres()
2018-02-11 18:20:16 +00:00
loadobj = Etageres()
for etagere in data["etageres"]:
print("etagere:")
print(etagere)
loadobj.add_etagere(etagere["largeur"], etagere["hauteur"])
2018-02-10 20:45:11 +00:00
for bouteille in etagere["bouteilles"]:
2018-02-11 18:20:16 +00:00
loadobj.etageres[loadobj.nbetagere-1].add_bouteille(
bouteille["pos_largeur"], bouteille["pos_hauteur"], bouteille["couleur"],
bouteille["millesime"], bouteille["appelation"])
return loadobj
2018-02-05 20:16:16 +00:00
def add_etagere(self, largeur, hauteur):
self.nbetagere += 1
2018-02-11 18:20:16 +00:00
newetagere = Etagere(largeur, hauteur, self)
2018-02-11 12:00:18 +00:00
self.etageres.append(newetagere)
return newetagere
2018-02-11 18:20:16 +00:00
2018-02-05 20:16:16 +00:00
def nbbouteille(self):
i = 0
for etagere in self.etageres:
2018-02-11 18:20:16 +00:00
i += len(etagere.bouteilles)
2018-02-05 20:16:16 +00:00
return i
2018-02-05 20:16:16 +00:00
def nbbouteillecouleur(self, couleur):
i = 0
for etagere in self.etageres:
2018-02-05 20:16:16 +00:00
for bouteille in etagere:
if bouteille.couleur == couleur:
i += 1
return i
2018-02-05 20:16:16 +00:00
2018-02-11 18:20:16 +00:00
def remove_etagere(self, num_etagere):
2018-02-11 12:00:18 +00:00
for etagere in self.etageres:
2018-02-11 18:20:16 +00:00
if etagere.num_etagere == num_etagere:
2018-02-11 12:00:18 +00:00
self.etageres.remove(etagere)
2018-02-12 19:15:58 +00:00
2018-02-11 12:00:18 +00:00
return 0
return "pas d'étagere a ce numéros"
2018-02-05 20:16:16 +00:00
2018-02-11 18:20:16 +00:00
def save_etageres(self, file):
2018-02-10 20:45:11 +00:00
with open(file, 'w') as output:
2018-02-11 18:20:16 +00:00
data = {"etageres": []}
2018-02-10 20:45:11 +00:00
for etagere in self.etageres:
data["etageres"].append(etagere.save())
print(data)
2018-02-11 18:20:16 +00:00
json.dump(data, output, indent=4)
print("save ok")
2018-02-05 20:16:16 +00:00
def __iter__(self):
return iter(self.etageres)
2018-02-03 16:58:40 +00:00
2018-02-03 18:22:49 +00:00
class Etagere(object):
2018-02-05 20:16:16 +00:00
def __init__(self, largeur, hauteur, etageres):
self.num_etagere = etageres.nbetagere
self.largeur = largeur
self.hauteur = hauteur
self.etageres = etageres
self.bouteilles = []
def add_bouteille(self, pos_largeur, pos_hauteur, couleur, appelation, millesime):
2018-02-11 14:56:51 +00:00
if (pos_hauteur > self.hauteur or pos_largeur > self.largeur or pos_hauteur < 0 or pos_largeur < 0):
return "bouteille positioné en dehors des emplacement"
for bouteille in self.bouteilles:
2018-02-05 20:52:28 +00:00
if (pos_largeur == bouteille.pos_largeur and pos_hauteur == bouteille.pos_hauteur):
return "une bouteille existe déja a cette emplacement"
2018-02-11 18:20:16 +00:00
newbouteille = Bouteille(
pos_largeur, pos_hauteur, couleur, appelation, millesime, self)
2018-02-11 12:00:18 +00:00
self.bouteilles.append(newbouteille)
return newbouteille
2018-02-11 18:20:16 +00:00
2018-02-05 20:16:16 +00:00
def remove_bouteille(self, pos_largeur, pos_hauteur):
i = 0
for bouteille in self.bouteilles:
2018-02-05 20:16:16 +00:00
if (pos_largeur == bouteille.pos_largeur and pos_hauteur == bouteille.pos_hauteur):
self.bouteilles.remove(bouteille)
2018-02-11 18:20:16 +00:00
return "bouteille suprimé"
else:
i += 1
2018-02-11 18:20:16 +00:00
return "aucune bouteille troué a cette emplacement"
2018-02-11 12:00:18 +00:00
def save(self):
2018-02-11 18:20:16 +00:00
data = {"largeur": self.largeur,
"hauteur": self.hauteur, "bouteilles": []}
2018-02-11 12:00:18 +00:00
for bouteille in self.bouteilles:
data["bouteilles"].append(bouteille.save())
return data
def __repr__(self):
return "etagére numéros {} de largeur {} et de hauteur {} et contient {} bouteille(s) ".format(self.num_etagere, self.largeur, self.hauteur, len(self.bouteilles))
def __iter__(self):
return iter(self.bouteilles)
2018-02-11 18:20:16 +00:00
2018-02-11 12:00:18 +00:00
class Bouteille(object):
def __init__(self, pos_largeur, pos_hauteur, couleur, appelation, millesime, etagere):
self.pos_largeur = pos_largeur
self.pos_hauteur = pos_hauteur
2018-02-11 18:20:16 +00:00
2018-02-11 12:00:18 +00:00
self.couleur = couleur
self.millesime = millesime
self.appelation = appelation
self.etagere = etagere
def save(self):
2018-02-11 18:20:16 +00:00
data = {"pos_largeur": self.pos_largeur, "pos_hauteur": self.pos_hauteur,
"couleur": self.couleur, "millesime": self.millesime, "appelation": self.appelation}
2018-02-11 12:00:18 +00:00
return data
2018-02-11 18:20:16 +00:00
2018-02-11 12:00:18 +00:00
def __repr__(self):
2018-02-12 19:15:58 +00:00
return "{},{} ".format(self.appelation, self.millesime)
2018-02-11 12:00:18 +00:00
2018-02-11 18:20:16 +00:00
class EtageresUI(Tk):
def __init__(self, etageres):
Tk.__init__(self)
self.etageres = etageres
self.title(string="cave a vin")
self.etageresUI = []
2018-02-11 19:50:12 +00:00
self.mainframe=Frame(self)
vscrollbar = Scrollbar(self.mainframe, orient=VERTICAL)
2018-02-12 19:15:58 +00:00
self.etagere_frame = Canvas(self.mainframe, yscrollcommand=vscrollbar.set,width=1000,height=1000)
2018-02-11 19:50:12 +00:00
for etagere in self.etageres:
newetagere=EtagereUI(etagere, self)
self.etageresUI.append(newetagere)
2018-02-12 19:15:58 +00:00
self.etagere_frame.config(scrollregion=self.etagere_frame.bbox("all"))
2018-02-11 15:14:17 +00:00
2018-02-11 18:20:16 +00:00
vscrollbar.grid(column=2, row=1, sticky=N+S)
vscrollbar.config(command=self.etagere_frame.yview)
2018-02-11 19:50:12 +00:00
framecontrol = LabelFrame(self.mainframe, text="command pannel")
framecontrol.grid(column=3, row=1)
2018-02-11 18:20:16 +00:00
Button(framecontrol, text="add etagere",
command=self.click_add_etagere).pack()
Button(framecontrol, text="remove etagere",
command=self.click_remove_etagere).pack()
Button(framecontrol, text="save",
command=lambda: self.etageres.save_etageres("cave")).pack()
self.etagere_frame.grid(column=1, row=1)
2018-02-11 19:50:12 +00:00
self.mainframe.grid()
2018-02-11 12:00:18 +00:00
def click_add_etagere(self):
2018-02-11 18:20:16 +00:00
child_window = Toplevel(self)
Label(child_window, text="select largeur").pack()
largeur = StringVar()
Entry(child_window, textvariable=largeur).pack()
2018-02-11 12:00:18 +00:00
2018-02-11 18:20:16 +00:00
Label(child_window, text="hauteur").pack()
hauteur = StringVar()
Entry(child_window, textvariable=hauteur).pack()
2018-02-11 12:00:18 +00:00
2018-02-11 18:20:16 +00:00
Button(child_window, text="OK", command=lambda: add(
largeur.get(), hauteur.get())).pack()
def add(largeur, hauteur):
2018-02-11 12:00:18 +00:00
child_window.destroy()
2018-02-11 18:20:16 +00:00
newetagere = self.etageres.add_etagere(int(largeur), int(hauteur))
self.etageresUI.append(EtagereUI(newetagere, self))
2018-02-12 19:15:58 +00:00
self.etagere_frame.config(scrollregion=self.etagere_frame.bbox("all"))
2018-02-11 12:00:18 +00:00
def click_remove_etagere(self):
2018-02-11 18:20:16 +00:00
child_window = Toplevel(self)
Label(child_window, text="select etagere").pack()
num = StringVar()
Entry(child_window, textvariable=num).pack()
Button(child_window, text="OK", command=lambda: remove(num.get())).pack()
2018-02-11 12:00:18 +00:00
def remove(num):
child_window.destroy()
for etagereUI in self.etageresUI:
2018-02-11 18:20:16 +00:00
if etagereUI.etagere.num_etagere == int(num):
print("find")
2018-02-12 19:15:58 +00:00
self.etagere_frame.delete(etagereUI.canvasID)
self.etageresUI.remove(etagereUI)
2018-02-11 12:00:18 +00:00
self.etageres.remove_etagere(int(num))
2018-02-11 14:56:51 +00:00
class EtagereUI(LabelFrame):
2018-02-11 18:20:16 +00:00
def __init__(self, etagere, etageresUI):
LabelFrame.__init__(self, etageresUI.etagere_frame, text=etagere)
self.etagere = etagere
self.etageresUI = etageresUI
2018-02-11 12:00:18 +00:00
for hauteur in range(self.etagere.hauteur):
for largeur in range(self.etagere.largeur):
isset = False
2018-02-11 12:00:18 +00:00
for bouteille in self.etagere:
if (largeur == bouteille.pos_largeur and hauteur == bouteille.pos_hauteur):
2018-02-11 18:20:16 +00:00
BouteilleUI(bouteille, self)
isset = True
break
2018-02-11 18:20:16 +00:00
if not isset:
Cassier_videUI(largeur, hauteur, self)
2018-02-12 19:15:58 +00:00
if(len(self.etageresUI.etageresUI)==0):
self.canvasID=etageresUI.etagere_frame.create_window(0, 0,window=self,anchor="nw",tag="ALL")
else:
bbox=self.etageresUI.etagere_frame.bbox("ALL")
print(bbox)
self.canvasID=etageresUI.etagere_frame.create_window(0,bbox[3]+20,anchor="nw",window=self,tag="ALL")
self.etageresUI.etagere_frame.update()
2018-02-11 18:20:16 +00:00
def click_remove_bouteille(self, bouteilleUI):
self.etagere.remove_bouteille(
bouteilleUI.bouteille.pos_largeur, bouteilleUI.bouteille.pos_hauteur)
2018-02-11 14:56:51 +00:00
bouteilleUI.destroy()
2018-02-11 18:20:16 +00:00
Cassier_videUI(bouteilleUI.bouteille.pos_largeur,
bouteilleUI.bouteille.pos_hauteur, self)
self["text"] = self.etagere
2018-02-12 19:15:58 +00:00
2018-02-11 18:20:16 +00:00
def click_add_bouteille(self, cassiervide):
child_window = Toplevel(self.etageresUI)
Label(child_window, text="select color").pack()
couleur = StringVar()
couleur.set("rouge")
2018-02-11 18:20:16 +00:00
OptionMenu(child_window, couleur, *
self.etageresUI.etageres.couleur.keys()).pack()
Label(child_window, text="enter millesime").pack()
millesime = StringVar()
Entry(child_window, textvariable=millesime).pack()
Label(child_window, text="enter appelation").pack()
appelation = StringVar()
Entry(child_window, textvariable=appelation).pack()
Button(child_window, text="OK", command=lambda: add(cassiervide,
couleur.get(), millesime.get(), appelation.get())).pack()
def add(cassiervide, couleur, millesime, appelation):
child_window.destroy()
2018-02-11 14:56:51 +00:00
print(cassiervide.pos_largeur)
print(cassiervide.pos_hauteur)
2018-02-11 18:20:16 +00:00
newbouteille = self.etagere.add_bouteille(
cassiervide.pos_largeur, cassiervide.pos_hauteur, couleur, appelation, millesime)
2018-02-11 14:56:51 +00:00
cassiervide.destroy()
2018-02-11 18:20:16 +00:00
BouteilleUI(newbouteille, self)
self["text"] = self.etagere
2018-02-11 14:56:51 +00:00
class Cassier_videUI(Button):
2018-02-11 18:20:16 +00:00
def __init__(self, pos_largeur, pos_hauteur, etagereUI):
Button.__init__(self, etagereUI, text="cassier vide",
command=lambda: self.etagereUI.click_add_bouteille(self))
self.pos_largeur = pos_largeur
self.pos_hauteur = pos_hauteur
2018-02-11 12:00:18 +00:00
self.etagereUI = etagereUI
2018-02-11 18:20:16 +00:00
self.grid(row=self.pos_hauteur, column=self.pos_largeur)
2018-02-11 14:56:51 +00:00
class BouteilleUI(Button):
2018-02-11 18:20:16 +00:00
def __init__(self, bouteille, etagereUI):
self.bouteille = bouteille
self.etagereUI = etagereUI
Button.__init__(self, etagereUI, text=self.bouteille,
command=lambda: self.etagereUI.click_remove_bouteille(self))
self["bg"] = self.etagereUI.etageresUI.etageres.couleur[self.bouteille.couleur]
self.grid(row=self.bouteille.pos_hauteur,
column=self.bouteille.pos_largeur)
2018-02-05 18:37:13 +00:00
2018-02-11 14:56:51 +00:00
#new = Etageres.load_etageres("cave")
2018-02-10 20:45:11 +00:00
#new =Etageres()
#new.add_etagere(10, 3)
2018-02-11 18:20:16 +00:00
# new.add_etagere(4,4)
2018-02-10 20:45:11 +00:00
#print(new.etageres[0].add_bouteille(1, 1, "rouge", "saint emilion", 2005))
#print(new.etageres[0].add_bouteille(9, 1, "rose", "gewurtz", 2010))
#print(new.etageres[0].add_bouteille(5, 2, "rouge", "saint emilion", 2006))
2018-02-11 18:20:16 +00:00
# print(new.etageres[0].bouteilles)
2018-02-10 20:45:11 +00:00
#print("vos etagére contiennes {} bouteille".format(new.nbbouteille()))
2018-02-11 18:20:16 +00:00
# print("vos etagére contiennes {} bouteille de rouge".format(
# new.nbbouteillecouleur("rouge")))
# print(new.couleur)
2018-02-11 12:00:18 +00:00
2018-02-11 18:20:16 +00:00
EtageresUI(Etageres.load_etageres("cave")).mainloop()