Ajout commentaires
[oeodf/todolist_ods_builder.git] / ods.py
1 #-*- coding: utf-8 -*-
2 """
3 Module contenant le code permettant de créer des feuilles ods contenant
4 les tâches pour chaque contener.
5 """
6
7 from odf.opendocument import OpenDocumentSpreadsheet
8 from odf.style import Style, TextProperties,\
9     TableColumnProperties, ParagraphProperties, GraphicProperties
10 from odf.text import P
11 from odf.table import Table, TableColumn, TableRow, TableCell
12
13
14 def create_cell(text, style=None):
15     """
16     Permet de créer une cellule contenant le text.
17
18     text : une chaine de caractères
19
20     Revoit une cellule TableCell
21     """
22     if style == None:
23         tc = TableCell()
24     else:
25         tc = TableCell(stylename=style)
26     tc.addElement(P(text=text))
27     return tc
28
29
30 def create_doc(containers, container_tasks):
31     """
32     Permet de créer un document ods comprenant une feuille
33     pour chaque contener, avec la liste des tâches.
34
35     containers : une liste de dictionnaires de containers
36     tasks : un dictionnaire qui assosie à chaque ID de container
37     la liste des tâches qu'il contient
38     """
39     document = OpenDocumentSpreadsheet()
40     tablecontents = Style(name="Table Contents", family="paragraph")
41     tablecontents.addElement(ParagraphProperties(numberlines="false",
42                                                  linenumber="0"))
43     document.styles.addElement(tablecontents)
44
45
46     # Création des styles de colonnes
47     width25 = Style(name="Wshort", family="table-column")
48     width25.addElement(TableColumnProperties(columnwidth="2.5cm"))
49     document.automaticstyles.addElement(width25)
50
51     width3 = Style(name="Wwide", family="table-column")
52     width3.addElement(TableColumnProperties(columnwidth="3cm"))
53     document.automaticstyles.addElement(width3)
54
55     width9 = Style(name="Wwide", family="table-column")
56     width9.addElement(TableColumnProperties(columnwidth="9cm"))
57     document.automaticstyles.addElement(width9)
58
59     #Création des styles de titres
60     titre1= Style(name="titre1", family="table-cell")
61     titre1.addElement(TextProperties(fontweight="bold", fontsize="11", color="#1FA055"))
62     document.automaticstyles.addElement(titre1)
63
64     titre2= Style(name="titre2", family="table-cell")
65     titre2.addElement(TextProperties(fontweight="bold", fontsize="10"))
66     document.automaticstyles.addElement(titre2)
67
68     #container_keys = ["name", "description", "target", "milestone"]
69     task_keys = ['name', 'description', 'priority', 'state', 'manday',
70                  'planned', 'milestone']
71
72     for c in containers:
73         table = Table(name=c['name'])
74
75         table.addElement(TableColumn(numbercolumnsrepeated=1,stylename=width3))
76         table.addElement(TableColumn(numbercolumnsrepeated=1,stylename=width9))
77         table.addElement(TableColumn(numbercolumnsrepeated=5,stylename=width25))
78         document.spreadsheet.addElement(table)
79
80         tasks = container_tasks[c['id']]
81
82         tr = TableRow()
83         table.addElement(tr)
84         tr.addElement(create_cell("Name :", "titre1"))
85         tr.addElement(create_cell(c["name"]))
86         tr.addElement(create_cell(""))
87         tr.addElement(create_cell("Target :", "titre1"))
88         tr.addElement(create_cell(c["target"]))
89         tr.addElement(create_cell("Milestone :", "titre1"))
90         tr.addElement(create_cell(c["milestone"]))
91
92         tr = TableRow()
93         table.addElement(tr)
94         tr.addElement(create_cell("Description :", "titre1"))
95         tr.addElement(create_cell(c["description"]))
96
97         if not tasks:
98             continue
99
100         #New line
101         table.addElement(TableRow())
102
103         tr = TableRow()
104         table.addElement(tr)
105         tr.addElement(create_cell("Tasks :", "titre1"))
106
107         tr = TableRow()
108         table.addElement(tr)
109         for k in task_keys:
110             tc = TableCell(stylename="titre2")
111             tr.addElement(tc)
112             tc.addElement(P(text=k.capitalize()))
113
114         for t in tasks:
115             tr = TableRow()
116             table.addElement(tr)
117             for tk in task_keys:
118                 tc = TableCell()
119                 tr.addElement(tc)
120                 tc.addElement(P(text=t[tk]))
121
122     document.save("Mes_todolist.ods")