def get_proximity_graph(self, cr, uid, module_id, context=None):
        pool_obj = pooler.get_pool(cr.dbname)
        module_obj = pool_obj.get('ir.module.module')
        nodes = [('base','unknown')]
        edges = []
        def get_depend_module(module_id):
            module_record = module_obj.browse(cr, uid, module_id, context=context)
            if module_record.name not in nodes:
                # Add new field ir.module.module object in server side. field name = module_type/
                nodes.append((module_record.name, "unknown"))
            if module_record.dependencies_id:
                for depen in module_record.dependencies_id:
                    if (module_record.name,depen.name) not in edges:
                        edges.append((module_record.name,depen.name))
                    if depen.name == "base":
                        continue
                    id = module_obj.browse(cr, uid, module_obj.search(cr, uid, [('name', '=' ,depen.name)]), context=context)
                    if id:
                        get_depend_module(id[0].id)
        get_depend_module(module_id)
        graph = pydot.Dot(graph_type='digraph',fontsize='10', label="\\nProximity Graph. \\n\\nGray Color-Official Modules, Red  Color-Extra Addons Modules, Blue Color-Community Modules, Purple Color-Unknow Modules"
                                     , center='1')
        for node in nodes:
            if node[1] == "official":
                graph.add_node(pydot.Node(node[0], style="filled", fillcolor="lightgray"))
            elif node[1] == "extra_addons":
                graph.add_node(pydot.Node(node[0], style="filled", fillcolor="red"))
            elif node[1] == "community":
                graph.add_node(pydot.Node(node[0], style="filled", fillcolor="#000FFF"))
            elif node[1] == "unknown":
                graph.add_node(pydot.Node(node[0], style="filled", fillcolor="purple"))
        for edge in edges:
            graph.add_edge(pydot.Edge(edge[0], edge[1]))

        ps_string = graph.create(prog='dot', format='ps')
        if os.name == "nt":
            prog = 'ps2pdf.bat'
        else:
            prog = 'ps2pdf'

        args = (prog, '-', '-')
        input, output = tools.exec_command_pipe(*args)
        input.write(ps_string)
        input.close()
        return output.read()
class report_graph_instance(object):
    def __init__(self, cr, uid, ids, data):
        logger = netsvc.Logger()
        try:
            import pydot
        except Exception, e:
            logger.notifyChannel('workflow', netsvc.LOG_WARNING,
                'Import Error for pydot, you will not be able \
                                                        to render workflows\n'
                'Consider Installing PyDot or dependencies: \
                                                http://dkbza.org/pydot.html')
            raise e
        offer_id = ids
        self.done = False

        offer = translate_accent(pooler.get_pool(cr.dbname).get('dm.offer').browse(cr, uid, offer_id)[0].name)

        graph = pydot.Dot(fontsize="16", label=offer, size='10.7, 7.3',
                          center='1', ratio='auto', rotate='90', rankdir='LR' )

        graph_get(cr, uid, graph, offer_id)

        ps_string = graph.create_ps(prog='dot')
        if os.name == "nt":
            prog = 'ps2pdf.bat'
        else:
            prog = 'ps2pdf'
        args = (prog, '-', '-')
        try:
            _input, output = tools.exec_command_pipe(*args)
        except:
            return
        _input.write(ps_string)
        _input.close()
        self.result = output.read()
        output.close()
        self.done = True
                    ps_string = graph.create(prog='dot', format='ps')
        except Exception, e:
            _logger.exception('Exception in call:')
            # string is in PS, like the success message would have been
            ps_string = '''%PS-Adobe-3.0
/inch {72 mul} def
/Times-Roman findfont 50 scalefont setfont
1.5 inch 15 inch moveto
(No workflow available) show
showpage'''
        if os.name == "nt":
            prog = 'ps2pdf.bat'
        else:
            prog = 'ps2pdf'
        args = (prog, '-', '-')
        input, output = tools.exec_command_pipe(*args)
        input.write(ps_string)
        input.close()
        self.result = output.read()
        output.close()
        self.done = True

    def is_done(self):
        return self.done

    def get(self):
        if self.done:
            return self.result
        else:
            return None
Exemple #4
0
                                           sys.exc_traceback))
            logger.notifyChannel('workflow', netsvc.LOG_ERROR,
                                 'Exception in call: ' + tb_s)
            # string is in PS, like the success message would have been
            ps_string = '''%PS-Adobe-3.0
/inch {72 mul} def
/Times-Roman findfont 50 scalefont setfont
1.5 inch 15 inch moveto
(No workflow available) show
showpage'''
        if os.name == "nt":
            prog = 'ps2pdf.bat'
        else:
            prog = 'ps2pdf'
        args = (prog, '-', '-')
        input, output = tools.exec_command_pipe(*args)
        input.write(ps_string)
        input.close()
        self.result = output.read()
        output.close()
        self.done = True

    def is_done(self):
        return self.done

    def get(self):
        if self.done:
            return self.result
        else:
            return None
Exemple #5
0
    def get_proximity_graph(self, cr, uid, module_id, context=None):
        pool_obj = pooler.get_pool(cr.dbname)
        module_obj = pool_obj.get('ir.module.module')
        nodes = [('base', 'unknown')]
        edges = []

        def get_dpend_module(module_id):
            module_record = module_obj.browse(cr,
                                              uid,
                                              module_id,
                                              context=context)
            if module_record.name not in nodes:
                # Add new field ir.module.module object in server side. field name = module_type/
                nodes.append((module_record.name, "unknown"))
            if module_record.dependencies_id:
                for depen in module_record.dependencies_id:
                    if (module_record.name, depen.name) not in edges:
                        edges.append((module_record.name, depen.name))
                    if depen.name == "base":
                        continue
                    id = module_obj.browse(cr,
                                           uid,
                                           module_obj.search(
                                               cr, uid,
                                               [('name', '=', depen.name)]),
                                           context=context)
                    if id:
                        get_dpend_module(id[0].id)

        get_dpend_module(module_id)
        graph = pydot.Dot(
            graph_type='digraph',
            fontsize='10',
            label=
            "\\nProximity Graph. \\n\\nGray Color:Official Modules, Red  Color:Extra Addons Modules, Blue Color:Community Modules, Purple Color:Unknow Modules",
            center='1')
        for node in nodes:
            if node[1] == "official":
                graph.add_node(
                    pydot.Node(node[0], style="filled", fillcolor="lightgray"))
            elif node[1] == "extra_addons":
                graph.add_node(
                    pydot.Node(node[0], style="filled", fillcolor="red"))
            elif node[1] == "community":
                graph.add_node(
                    pydot.Node(node[0], style="filled", fillcolor="#000FFF"))
            elif node[1] == "unknown":
                graph.add_node(
                    pydot.Node(node[0], style="filled", fillcolor="purple"))
        for edge in edges:
            graph.add_edge(pydot.Edge(edge[0], edge[1]))

        ps_string = graph.create(prog='dot', format='ps')
        if os.name == "nt":
            prog = 'ps2pdf.bat'
        else:
            prog = 'ps2pdf'

        args = (prog, '-', '-')
        input, output = tools.exec_command_pipe(*args)
        input.write(ps_string)
        input.close()
        return output.read()