Skip to content

Commit

Permalink
Tri et filtrage disponible ! (v1.1)
Browse files Browse the repository at this point in the history
  • Loading branch information
Ilade-s committed Jun 29, 2021
1 parent c2818e5 commit 4c52d38
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 26 deletions.
2 changes: 2 additions & 0 deletions Data/extract.csv
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@ taskID,userID,name,date,priority,status,tag
97,Raphaël,test13,2021-06-15,medium,enable,
98,Raphaël,test14,2021-06-15,medium,enable,
99,Raphaël,test15,2021-06-15,medium,enable,
100,Raphaël,sss,2021-06-29,low,enable,ddd
101,Raphaël,aaa,2021-06-29,hight,enable,xxx
4 changes: 4 additions & 0 deletions Data/testSort.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
taskID,userID,name,date,priority,status,tag
0,anonymous,aaa,2021-06-29,medium,enable,sss
1,anonymous,aaa,2021-07-04,medium,enable,www
2,anonymous,aaa,2021-07-01,medium,enable,sss
4 changes: 1 addition & 3 deletions EntryFrame.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from sys import maxsize
from tkinter import *
from tkinter import ttk
from Global import __version__, __author__ # variables globales
from Global import __version__, __author__, jMois # variables globales
from tkinter import messagebox as msgbox
# permet d'exécuter des fonctions avec arguments avec des widgets tk
from functools import partial
Expand Down Expand Up @@ -169,8 +169,6 @@ def TaskFrame(self):
tag = StringVar()
# création dates sur le mois
cdate = str(date.today()) # date actuelle (format AAAA-MM-JJ)
# nombre de jour par mois (année non bissextile, dans l'ordre de janvier à décembre)
jMois = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
taskdate.set(cdate) # assignation taskdate à la date d'aujourd'hui
dates = [cdate[:-2]+str(int(cdate[-2:])+i) # création de la liste des dates sur un mois
for i in range(jMois[int(cdate[5:7])-1]-int(cdate[-2:])+1)]+[
Expand Down
6 changes: 4 additions & 2 deletions Global.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@
Contient les variables et fonctions nécessaires dans plusieurs fichiers
"""
from sys import platform # connaitre la plateforme/OS
__version__ = "1.0"
__author__ = "Merlet Raphaël"
__version__ = "1.1"
__author__ = "Raphaël"
__advisor__ = "Elisa"
DefaultLabel = ["taskID", "userID", "name",
"date", "priority", "status", "tag"]
# taille fenêtre (utilisé dans Tk.geometry())
x = 1000
y = 600
# nombre de jour par mois (année non bissextile, dans l'ordre de janvier à décembre)
jMois = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

def ShowVersion():
"""
Expand Down
43 changes: 33 additions & 10 deletions MainFrame.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from tkinter import *
from tkinter import ttk
from SubFrame import SubFrame
from Global import DefaultLabel, ShowVersion
from Global import DefaultLabel, ShowVersion, jMois
# permet d'exécuter des fonctions avec des paramètres avec un widget tk
from functools import partial
from EntryFrame import *
Expand Down Expand Up @@ -32,6 +32,10 @@ def ShowTasks(self):
"""
Affiche les tâches
"""
if __name__!='__main__':
# checks if a database is open, if not, exits the function
if self.master.Db == None and self.master.Server == None:
return 0
self['text'] = "Liste des tâches"
# Remove and replace task Entryframe
if self.master.EntryFrame != None:
Expand All @@ -43,24 +47,43 @@ def ShowTasks(self):
# unpack bouton d'ajout de tâche
if self.AddButton != None:
self.AddButton.destroy()
if __name__!='__main__':
# Filtrage des tâches selon les choix de l'utilisateur
self.TasksTS = list(filter(lambda t: self.master.ShowVars[t[DefaultLabel.index("priority")]].get() == 1,
self.Tasks))
# Tri des tâches
# Tri par ordre d'ajout (New ou Old)
if self.master.SortingElement.get() in (0, 1):
self.TasksTS.sort(key=lambda x: int(x[0])
,reverse=self.master.SortingElement.get())
# Tri par tag
elif self.master.SortingElement.get() == 2:
self.TasksTS.sort(key=lambda x: x[DefaultLabel.index("tag")])
# Tri par date dûe
elif self.master.SortingElement.get() == 3:
self.TasksTS.sort(key=lambda x: int(x[DefaultLabel.index("date")][-2:])+
int(x[DefaultLabel.index("date")][-5:-3])*jMois[int(x[DefaultLabel.index("date")][-5:-3])])

else: self.TasksTS = self.Tasks
#print(self.TasksTS)
# création et affichage des widgets

# création variables à assigner aux tâches si nécessaire (si vide)
if not self.StateTasks:
self.StateTasks = [IntVar() for i in range(len(self.Tasks))]
elif len(self.StateTasks) < len(self.Tasks): # nouvelles tâches
elif len(self.StateTasks) < len(self.TasksTS): # nouvelles tâches
self.StateTasks.extend(
[IntVar() for i in range(len(self.Tasks)-len(self.StateTasks))])
elif len(self.StateTasks) > len(self.Tasks): # tâches supprimées
self.StateTasks = self.StateTasks[:len(self.Tasks)]
[IntVar() for i in range(len(self.TasksTS)-len(self.StateTasks))])
elif len(self.StateTasks) > len(self.TasksTS): # tâches supprimées
self.StateTasks = self.StateTasks[:len(self.TasksTS)]

self.ShownTasks = [TaskFrame(self, task)
for task in self.Tasks[self.Ci:self.Ci+self.maxAff]]
for task in self.TasksTS[self.Ci:self.Ci+self.maxAff]]

for task in range(len(self.ShownTasks)):
# assignation variable et set en fonction de status
self.StateTasks[self.Ci+task].set(0
if self.Tasks[task][DefaultLabel.index("status")] == "enable"
if self.TasksTS[task][DefaultLabel.index("status")] == "enable"
else 1)
self.ShownTasks[task].CheckB["variable"] = self.StateTasks[self.Ci+task]
self.ShownTasks[task].taskState = self.StateTasks[self.Ci+task]
Expand All @@ -69,21 +92,21 @@ def ShowTasks(self):
# création bouton d'ajout de tâche
self.AddTaskButton()
# Maj état des boutons de SubFrame
if len(self.Tasks) == 0 or len(self.Tasks) <= self.maxAff: # une seule page
if len(self.TasksTS) == 0 or len(self.TasksTS) <= self.maxAff: # une seule page
self.master.SubFrame.BackButton["state"] = "disabled"
self.master.SubFrame.NextButton["state"] = "disabled"
elif self.Ci == 0: # début de la liste des tâches
self.master.SubFrame.BackButton["state"] = "disabled"
self.master.SubFrame.NextButton["state"] = "normal"
# fin de la liste des tâches
elif self.Ci+self.maxAff >= len(self.Tasks):
elif self.Ci+self.maxAff >= len(self.TasksTS):
self.master.SubFrame.BackButton["state"] = "normal"
self.master.SubFrame.NextButton["state"] = "disabled"
else: # autre intervalle
self.master.SubFrame.BackButton["state"] = "normal"
self.master.SubFrame.NextButton["state"] = "normal"
self.master.SubFrame.ReaderInfo[
'text'] = f"{self.Ci+1 if len(self.Tasks) > 0 else 0}-{self.Ci+len(self.ShownTasks)}/{len(self.Tasks)}"
'text'] = f"{self.Ci+1 if len(self.Tasks) > 0 else 0}-{self.Ci+len(self.ShownTasks)}/{len(self.TasksTS)} (/{len(self.Tasks)})"

def AddTaskButton(self):
"""
Expand Down
18 changes: 11 additions & 7 deletions Menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,18 @@ def __init__(self, master) -> None:
self.master.ShowVars[priority] = IntVar()
self.master.ShowVars[priority].set(1)
Show.add_checkbutton(
label=priority, variable=self.master.ShowVars[priority])
label=priority, variable=self.master.ShowVars[priority],
onvalue=1, offvalue=0, command=self.master.MainFrame.ShowTasks)
ViewMenu.add_cascade(label="Show...", menu=Show)
ViewMenu.add_separator() # séparateur
Sort = Menu(self, tearoff=False)
self.master.SortingElement = StringVar()
self.master.SortingElement.set("userID")
for e in ("userID", "priority", "tag"):
self.master.SortingElement = IntVar()
self.master.SortingElement.set(0)
SortChoices = ("Old", "New", "Tag", "Due date")
for e in SortChoices:
Sort.add_radiobutton(
label=e, variable=self.master.SortingElement, value=e)
ViewMenu.add_cascade(label="Sort by...", menu=Sort)
label=e, variable=self.master.SortingElement,
value=SortChoices.index(e), command=self.master.MainFrame.ShowTasks)
ViewMenu.add_cascade(label="Order by...", menu=Sort)


# fonctions du menu déroulant File
Expand Down Expand Up @@ -161,6 +163,7 @@ def SyncDatabase(self):
Permet d'afficher les tâches contenues dans le fichier CSV ouvert
"""
self.master.MainFrame.Ci = 0
self.master.MainFrame.Tasks = self.master.Db.GetTasks()
#print(f"Tasks : {self.master.MainFrame.Tasks}")
self.master.MainFrame.ShowTasks()
Expand Down Expand Up @@ -314,6 +317,7 @@ def ServerSync(self):
"Vous n'êtes pas connectés à un compte")
else:
try:
self.master.MainFrame.Ci = 0
self.master.MainFrame.Tasks = self.master.Server.GetData()
#print(f"Tasks : {self.master.MainFrame.Tasks}")
if __name__ != '__main__': # désactivé lors d'un test individuel
Expand Down
2 changes: 1 addition & 1 deletion SubFrame.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def CreateWidgets(self):
self.NextButton = ttk.Button(
self, text="Next page", state="disabled", style="SubFrame.TButton",
command=self.NextPage, image=self.NextImg)
self.ReaderInfo = Label(self, text="..-../..", font=("Arial", 20))
self.ReaderInfo = Label(self, text="..-../.. (/..)", font=("Arial", 20))
self.BackButton.grid(row=0, column=1)
self.NextButton.grid(row=0, column=3)
self.ReaderInfo.grid(row=0, column=2, ipadx=50, ipady=20)
Expand Down
7 changes: 4 additions & 3 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,16 @@ def SetupFrames(self):
"""
print("Placement Frames...")
# Placement Frames dans les colonnes
print("Création Menu...")
self.Menu = MenuBar(self)
self.config(menu=self.Menu)
# Placement MainFrame
print("Création MainFrame...")
self.MainFrame = MainFrame(self)
# Placement SubFrame
print("Création SubFrame...")
self.SubFrame = SubFrame(self)
# Placement Menu
print("Création Menu...")
self.Menu = MenuBar(self)
self.config(menu=self.Menu)


def main():
Expand Down

0 comments on commit 4c52d38

Please sign in to comment.