Commit initial
authorAlicia FLOREZ <alicflorez@gmail.com>
Wed, 27 Mar 2013 15:09:51 +0000 (16:09 +0100)
committerAlicia FLOREZ <alicflorez@gmail.com>
Wed, 27 Mar 2013 15:09:51 +0000 (16:09 +0100)
ods.py [new file with mode: 0644]
odsgen [new file with mode: 0644]
oe.py [new file with mode: 0644]

diff --git a/ods.py b/ods.py
new file mode 100644 (file)
index 0000000..1f07b0f
--- /dev/null
+++ b/ods.py
@@ -0,0 +1,84 @@
+#-*- coding: utf-8 -*-
+"""
+Module contenant le code permettant de créer des feuilles ods contenant les tâches pour chaque contener.
+"""
+
+from odf.opendocument import OpenDocumentSpreadsheet
+from odf.style import Style, TextProperties, TableColumnProperties,\
+ParagraphProperties
+from odf.text import P
+from odf.table import Table, TableColumn, TableRow, TableCell
+
+
+def create_cell(text):
+    """
+    Permet de créer une cellule contenant le text.
+
+    text : une chaine de caractères
+
+    Revoit une cellule TableCell
+    """
+    tc = TableCell()
+    tc.addElement(P(text=text))
+    return tc
+
+
+def create_doc(containers, container_tasks):
+    """
+    Permet de créer un document ods comprenant une feuille pour chaque contener, avec la liste des tâches.
+
+    containers : une liste de dictionnaires de containers
+    tasks : un dictionnaire qui assosie à chaque ID de container la liste des tâches qu'il contient
+    """
+    document = OpenDocumentSpreadsheet()
+    tablecontents = Style(name="Table Contents", family="paragraph")
+    tablecontents.addElement(ParagraphProperties(numberlines="false", linenumber="0"))
+    document.styles.addElement(tablecontents)
+
+    #container_keys = ['name','description']
+    task_keys = ['name', 'description', 'manday', 'priority', 'state', 'planned', 'milestone']
+
+    for c in containers:
+        table = Table(name=c['name'])
+        document.spreadsheet.addElement(table)
+
+        tasks = container_tasks[c['id']]
+
+        tr = TableRow()
+        table.addElement(tr)
+        tr.addElement(create_cell("Name"))
+        tr.addElement(create_cell(c["name"]))
+        tr.addElement(create_cell(""))
+        tr.addElement(create_cell("Target"))
+        tr.addElement(create_cell(c["target"]))
+
+        tr = TableRow()
+        table.addElement(tr)
+        tr.addElement(create_cell("Description"))
+        tr.addElement(create_cell(c["description"]))
+        tr.addElement(create_cell(""))
+        tr.addElement(create_cell("Milestone"))
+        tr.addElement(create_cell(c["milestone"]))
+
+        if not tasks:
+            continue
+
+        tr = TableRow()
+        table.addElement(tr)
+
+        tr = TableRow()
+        table.addElement(tr)
+        for k in task_keys:
+            tc = TableCell()
+            tc.addElement(P(text=k))
+            tr.addElement(tc)
+
+        for t in tasks:
+            tr = TableRow()
+            table.addElement(tr)
+            for tk in task_keys:
+                tc = TableCell()
+                tc.addElement(P(text=t[tk]))
+                tr.addElement(tc)
+
+    document.save("Mes todolist.ods")
\ No newline at end of file
diff --git a/odsgen b/odsgen
new file mode 100644 (file)
index 0000000..5fe52bd
--- /dev/null
+++ b/odsgen
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+#-*- coding: utf-8 -*-
+
+#odf : 608
+import openerplib
+from oe import *
+from ods import *
+#from getpass import getpass
+
+
+def get_user_name(connection, user_login):
+    user_model = connection.get_model('res.users')
+    ids = user_model.search([("login", "=", user_login)])
+    if ids:
+        user_info = user_model.read(ids[0], ["name"])
+        return user_info["name"]
+    return None
+
+
+if __name__ == '__main__':
+#    login = raw_input('Utilisateur: ')
+#    password = getpass('Mot de passe: ')
+
+    connection = openerplib.get_connection(
+        hostname='localhost',
+        database='testing',
+#        login = login,
+#        password = password
+        login = "admin",
+        password = "admin",
+    )
+
+    try:
+        connection.check_login()
+    except:
+        print('Serveur éteint ou Identifiants incorrects')
+    else:
+        print('Test sur res.user : %s' % (get_user_name(connection, 'admin') == 'Administrator'))
+        containers = get_containers(connection)
+        tasks = {c["id"]: get_tasks(connection, c["tasks"]) for c in containers}
+
+        #============================================================================
+        # _tasks = []
+        # for c in containers:
+        #    _tasks[c["id"]] = get_tasks(connection, c["tasks"])
+        #============================================================================
+
+        create_doc(containers, tasks)
\ No newline at end of file
diff --git a/oe.py b/oe.py
new file mode 100644 (file)
index 0000000..622bfca
--- /dev/null
+++ b/oe.py
@@ -0,0 +1,35 @@
+#-*- coding: utf-8 -*-
+
+"""
+Module contenant le code permettant d'aller chercher les informations dans OpenERP.
+"""
+
+
+def get_containers(connection):
+    """
+    Permet de retrouver tous les conteneurs.
+
+    connection : objet Connection XML-RPC vers le serveur OpenERP
+
+    Revoit une liste de dictionnaires de données.
+    """
+    container_model = connection.get_model('todolist.container')
+    container_ids = container_model.search()
+    if not container_ids:
+        return []
+    return container_model.read(container_ids)
+
+
+def get_tasks(connection, liste):
+    """
+    Permet de retrouver les informations sur les tâches en paramêtres.
+
+    connection : objet Connection XML-RPC vers le serveur OpenERP
+    liste : liste d'identifiants de tâches.
+
+    Revoit une liste de dictionnaires de données.
+    """
+    task_model = connection.get_model('todolist.task')
+    if not liste:
+        return []
+    return task_model.read(liste)