196b9b5eba263f87f0997ad3b72d0f81e30b3559
[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     titre1= Style(name="titre1", family="table-cell")
46     titre1.addElement(TextProperties(fontweight="bold", fontsize="11", color="#1FA055"))
47     document.automaticstyles.addElement(titre1)
48
49     titre2= Style(name="titre2", family="table-cell")
50     titre2.addElement(TextProperties(fontweight="bold", fontsize="10"))
51     document.automaticstyles.addElement(titre2)
52
53     #container_keys = ["name", "description", "target", "milestone"]
54     task_keys = ['name', 'description', 'priority', 'state', 'manday',
55                  'planned', 'milestone']
56
57     for c in containers:
58         table = Table(name=c['name'])
59         document.spreadsheet.addElement(table)
60
61         tasks = container_tasks[c['id']]
62
63         tr = TableRow()
64         table.addElement(tr)
65         tr.addElement(create_cell("Name :", "titre1"))
66         tr.addElement(create_cell(c["name"]))
67         tr.addElement(create_cell(""))
68         tr.addElement(create_cell("Target :", "titre1"))
69         tr.addElement(create_cell(c["target"]))
70         tr.addElement(create_cell("Milestone :", "titre1"))
71         tr.addElement(create_cell(c["milestone"]))
72
73         tr = TableRow()
74         table.addElement(tr)
75         tr.addElement(create_cell("Description :", "titre1"))
76         tr.addElement(create_cell(c["description"]))
77
78         if not tasks:
79             continue
80
81         table.addElement(TableRow())
82
83         tr = TableRow()
84         table.addElement(tr)
85         tr.addElement(create_cell("Tasks :", "titre1"))
86
87
88         tr = TableRow()
89         table.addElement(tr)
90         for k in task_keys:
91             tc = TableCell(stylename="titre2")
92             tr.addElement(tc)
93             tc.addElement(P(text=k.capitalize()))
94
95         for t in tasks:
96             tr = TableRow()
97             table.addElement(tr)
98             for tk in task_keys:
99                 tc = TableCell()
100                 tr.addElement(tc)
101                 tc.addElement(P(text=t[tk]))
102
103     document.save("Mes_todolist.ods")