936aec0330ad148a4af28ac7f3dd293702703a7b
[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     width25 = Style(name="Wshort", family="table-column")
46     width25.addElement(TableColumnProperties(columnwidth="2.5cm"))
47     document.automaticstyles.addElement(width25)
48
49     width3 = Style(name="Wwide", family="table-column")
50     width3.addElement(TableColumnProperties(columnwidth="3cm"))
51     document.automaticstyles.addElement(width3)
52
53     width9 = Style(name="Wwide", family="table-column")
54     width9.addElement(TableColumnProperties(columnwidth="9cm"))
55     document.automaticstyles.addElement(width9)
56
57     titre1= Style(name="titre1", family="table-cell")
58     titre1.addElement(TextProperties(fontweight="bold", fontsize="11", color="#1FA055"))
59     document.automaticstyles.addElement(titre1)
60
61     titre2= Style(name="titre2", family="table-cell")
62     titre2.addElement(TextProperties(fontweight="bold", fontsize="10"))
63     document.automaticstyles.addElement(titre2)
64
65     #container_keys = ["name", "description", "target", "milestone"]
66     task_keys = ['name', 'description', 'priority', 'state', 'manday',
67                  'planned', 'milestone']
68
69     for c in containers:
70         table = Table(name=c['name'])
71
72         table.addElement(TableColumn(numbercolumnsrepeated=1,stylename=width3))
73         table.addElement(TableColumn(numbercolumnsrepeated=1,stylename=width9))
74         table.addElement(TableColumn(numbercolumnsrepeated=5,stylename=width25))
75         document.spreadsheet.addElement(table)
76
77         tasks = container_tasks[c['id']]
78
79         tr = TableRow()
80         table.addElement(tr)
81         tr.addElement(create_cell("Name :", "titre1"))
82         tr.addElement(create_cell(c["name"]))
83         tr.addElement(create_cell(""))
84         tr.addElement(create_cell("Target :", "titre1"))
85         tr.addElement(create_cell(c["target"]))
86         tr.addElement(create_cell("Milestone :", "titre1"))
87         tr.addElement(create_cell(c["milestone"]))
88
89         tr = TableRow()
90         table.addElement(tr)
91         tr.addElement(create_cell("Description :", "titre1"))
92         tr.addElement(create_cell(c["description"]))
93
94         if not tasks:
95             continue
96
97         #New line
98         table.addElement(TableRow())
99
100         tr = TableRow()
101         table.addElement(tr)
102         tr.addElement(create_cell("Tasks :", "titre1"))
103
104         tr = TableRow()
105         table.addElement(tr)
106         for k in task_keys:
107             tc = TableCell(stylename="titre2")
108             tr.addElement(tc)
109             tc.addElement(P(text=k.capitalize()))
110
111         for t in tasks:
112             tr = TableRow()
113             table.addElement(tr)
114             for tk in task_keys:
115                 tc = TableCell()
116                 tr.addElement(tc)
117                 tc.addElement(P(text=t[tk]))
118
119     document.save("Mes_todolist.ods")