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