Modification des styles sur les titres
[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', 'manday', 'priority', 'state',
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(""))
71         tr.addElement(create_cell("Milestone :", "titre1"))
72         tr.addElement(create_cell(c["milestone"]))
73
74         tr = TableRow()
75         table.addElement(tr)
76         tr.addElement(create_cell("Description :", "titre1"))
77         tr.addElement(create_cell(c["description"]))
78
79         if not tasks:
80             continue
81
82         table.addElement(TableRow())
83
84         tr = TableRow()
85         table.addElement(tr)
86         tr.addElement(create_cell("Tasks :", "titre1"))
87
88
89         tr = TableRow()
90         table.addElement(tr)
91         for k in task_keys:
92             tc = TableCell(stylename="titre2")
93             tr.addElement(tc)
94             tc.addElement(P(text=k.capitalize()))
95
96         for t in tasks:
97             tr = TableRow()
98             table.addElement(tr)
99             for tk in task_keys:
100                 tc = TableCell()
101                 tr.addElement(tc)
102                 tc.addElement(P(text=t[tk]))
103
104     document.save("Mes_todolist.ods")