From 02a17546b8ea3a9b3a8cbd89e1a0c954f4639845 Mon Sep 17 00:00:00 2001 From: "Mod2 Team (OpenERP)" <> Date: Thu, 24 Jun 2010 15:18:27 +0530 Subject: [PATCH] [IMP] Document: * Add new configuration wizard to set resource directiory for Sale order, Product or Project * Support pptx2txt, docx2txt in content index. * Add new configuration wizard to browse FTP Server in document_ftp module * Improved Configuration wizard to set url of FTP Server bzr revid: hmo@tinyerp.com-20100624094827-9yfmtiiegoiu0asa --- addons/document/__init__.py | 1 + addons/document/__openerp__.py | 1 + addons/document/document_directory.py | 2 +- addons/document/document_view.xml | 7 +- addons/document/security/ir.model.access.csv | 2 + addons/document/std_index.py | 98 ++++++++++---- addons/document/wizard/__init__.py | 21 +++ .../document/wizard/document_configuration.py | 120 ++++++++++++++++++ .../wizard/document_configuration_view.xml | 50 ++++++++ addons/document_ftp/__init__.py | 2 +- addons/document_ftp/__openerp__.py | 3 +- addons/document_ftp/doc_conf_wizard.py | 117 ----------------- .../document_ftp/security/ir.model.access.csv | 7 +- addons/document_ftp/wizard/__init__.py | 25 ++++ addons/document_ftp/wizard/ftp_browse.py | 61 +++++++++ .../document_ftp/wizard/ftp_browse_view.xml | 40 ++++++ .../document_ftp/wizard/ftp_configuration.py | 55 ++++++++ .../ftp_configuration_view.xml} | 19 +-- 18 files changed, 466 insertions(+), 165 deletions(-) create mode 100644 addons/document/wizard/__init__.py create mode 100644 addons/document/wizard/document_configuration.py create mode 100644 addons/document/wizard/document_configuration_view.xml delete mode 100644 addons/document_ftp/doc_conf_wizard.py create mode 100644 addons/document_ftp/wizard/__init__.py create mode 100644 addons/document_ftp/wizard/ftp_browse.py create mode 100644 addons/document_ftp/wizard/ftp_browse_view.xml create mode 100644 addons/document_ftp/wizard/ftp_configuration.py rename addons/document_ftp/{document_ftp_view.xml => wizard/ftp_configuration_view.xml} (76%) diff --git a/addons/document/__init__.py b/addons/document/__init__.py index 694989bdd79..12306b0499b 100644 --- a/addons/document/__init__.py +++ b/addons/document/__init__.py @@ -27,5 +27,6 @@ import directory_content import directory_report import document import report +import wizard # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/__openerp__.py b/addons/document/__openerp__.py index e7d3f767010..5e1aa939b54 100644 --- a/addons/document/__openerp__.py +++ b/addons/document/__openerp__.py @@ -45,6 +45,7 @@ 'update_xml': [ 'document_view.xml', 'document_data.xml', + 'wizard/document_configuration_view.xml', 'security/document_security.xml', 'security/ir.model.access.csv', 'report/document_report_view.xml', diff --git a/addons/document/document_directory.py b/addons/document/document_directory.py index 1d0bbf3ed7c..e275adcb5c6 100644 --- a/addons/document/document_directory.py +++ b/addons/document/document_directory.py @@ -112,7 +112,7 @@ class document_directory(osv.osv): while d2 and d2.parent_id: s = d2.name + (s and ('/' + s) or '') d2 = d2.parent_id - res.append((d.id, s)) + res.append((d.id, s or d.name)) return res def get_full_path(self, cr, uid, dir_id, context=None): diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml index 29f3617d64f..8fcd791144e 100644 --- a/addons/document/document_view.xml +++ b/addons/document/document_view.xml @@ -193,10 +193,7 @@ - - - @@ -219,7 +216,9 @@ - + + + diff --git a/addons/document/security/ir.model.access.csv b/addons/document/security/ir.model.access.csv index 245bcbffeab..a4412195745 100644 --- a/addons/document/security/ir.model.access.csv +++ b/addons/document/security/ir.model.access.csv @@ -19,3 +19,5 @@ "access_report_document_file_group_system","report.document.file group system","model_report_document_file","base.group_system",1,0,0,0 "access_report_document_wall_group_document_manager","report.document.wall document manager","model_report_document_wall","document.group_document_manager",1,0,0,0 "access_report_document_wall_group_system","report.document.wall group system","model_report_document_wall","base.group_system",1,0,0,0 +"access_document_configuation","document.configuration document manager","model_document_configuration","document.group_document_manager",1,1,1,1 +"access_document_configuation_system","document.configuration group system","model_document_configuration","base.group_system",1,1,1,1 diff --git a/addons/document/std_index.py b/addons/document/std_index.py index c4f7d787d4d..2facb14eeb3 100644 --- a/addons/document/std_index.py +++ b/addons/document/std_index.py @@ -19,10 +19,11 @@ # ############################################################################## +from content_index import indexer, cntIndex +from subprocess import Popen, PIPE import StringIO import odt2txt -from subprocess import Popen, PIPE -from content_index import indexer, cntIndex +import sys, zipfile, xml.dom.minidom def _to_unicode(s): try: @@ -36,6 +37,15 @@ def _to_unicode(s): except UnicodeError: return s +def textToString(element) : + buffer = u"" + for node in element.childNodes : + if node.nodeType == xml.dom.Node.TEXT_NODE : + buffer += node.nodeValue + elif node.nodeType == xml.dom.Node.ELEMENT_NODE : + buffer += textToString(node) + return buffer + class TxtIndex(indexer): def _getMimeTypes(self): return ['text/plain','text/html','text/diff','text/xml', 'text/*', @@ -44,7 +54,7 @@ class TxtIndex(indexer): def _getExtensions(self): return ['.txt', '.py'] - def _doIndexContent(self, content): + def _doIndexContent(self,content): return content cntIndex.register(TxtIndex()) @@ -56,15 +66,24 @@ class PptxIndex(indexer): def _getExtensions(self): return ['.pptx'] - def _doIndexFile(self, fname): - # pptx2txt.pl package not support in windows platform. - # Download pptx2txt package from http://sourceforge.net/projects/pptx2txt/" link. - # To install this tool, just copy pptx2txt.pl to appropriate place (e.g. /usr/bin directory) - fp = Popen(['pptx2txt.pl', fname], shell=False, stdout=PIPE).stdout - fp.read() - file_obj = open(str(fname + ".txt"), "r") - data = file_obj.read() - return _to_unicode(data) + def _doIndexFile(self,fname): + def toString () : + """ Converts the document to a string. """ + buffer = u"" + for val in ["a:t"]: + for paragraph in content.getElementsByTagName(val) : + buffer += textToString(paragraph) + "\n" + return buffer + + data = [] + zip = zipfile.ZipFile(fname) + files = filter(lambda x: x.startswith('ppt/slides/slide'), zip.namelist()) + for i in range(1, len(files) + 1): + content = xml.dom.minidom.parseString(zip.read('ppt/slides/slide%s.xml' % str(i))) + res = toString().encode('ascii','replace') + data.append(res) + + return _to_unicode('\n'.join(data)) cntIndex.register(PptxIndex()) @@ -76,33 +95,60 @@ class DocIndex(indexer): return ['.doc'] def _doIndexFile(self,fname): - fp = Popen(['antiword', fname], shell=False, stdout=PIPE).stdout - return _to_unicode( fp.read()) + #fp = Popen(['antiword', fname], shell=False, stdout=PIPE).stdout + return _to_unicode( 'None') cntIndex.register(DocIndex()) class DocxIndex(indexer): def _getMimeTypes(self): return [ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'] - + def _getExtensions(self): return ['.docx'] - def _doIndexFile(self, fname): - # docx2txt.pl package not support in windows platform. - # Download docx2txt package from "http://sourceforge.net/projects/docx2txt/" link. - # In case, you don't want to use Makefile for installation, you can follow these steps for manual installation. - # Copy docx2txt.pl, docx2txt.sh and docx2txt.config to appropriate place (e.g. /usr/bin directory) . used following command. - # --> cp docx2txt.pl docx2txt.sh docx2txt.config /usr/bin/ + def _doIndexFile(self,fname): + zip = zipfile.ZipFile(fname) + content = xml.dom.minidom.parseString(zip.read("word/document.xml")) + def toString () : + """ Converts the document to a string. """ + buffer = u"" + for val in ["w:p", "w:h", "text:list"]: + for paragraph in content.getElementsByTagName(val) : + buffer += textToString(paragraph) + "\n" + return buffer - fp = Popen(['docx2txt.pl', fname], shell=False, stdout=PIPE).stdout - fp.read() - file_obj = open(str(fname + ".txt"), "r") - data = file_obj.read() - return _to_unicode(data) + res = toString().encode('ascii','replace') + + return _to_unicode(res) cntIndex.register(DocxIndex()) + +class XlsxIndex(indexer): + def _getMimeTypes(self): + return [ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'] + + def _getExtensions(self): + return ['.xlsx'] + + def _doIndexFile(self,fname): + zip = zipfile.ZipFile(fname) + content = xml.dom.minidom.parseString(zip.read("xl/sharedStrings.xml")) + def toString () : + """ Converts the document to a string. """ + buffer = u"" + for val in ["t"]: + for paragraph in content.getElementsByTagName(val) : + buffer += textToString(paragraph) + "\n" + return buffer + + res = toString().encode('ascii','replace') + + return _to_unicode(res) + +cntIndex.register(XlsxIndex()) + class PdfIndex(indexer): def _getMimeTypes(self): return [ 'application/pdf'] diff --git a/addons/document/wizard/__init__.py b/addons/document/wizard/__init__.py new file mode 100644 index 00000000000..b143b583426 --- /dev/null +++ b/addons/document/wizard/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +import document_configuration diff --git a/addons/document/wizard/document_configuration.py b/addons/document/wizard/document_configuration.py new file mode 100644 index 00000000000..a497eb6af90 --- /dev/null +++ b/addons/document/wizard/document_configuration.py @@ -0,0 +1,120 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from osv import osv, fields +class document_configuration(osv.osv_memory): + + _name='document.configuration' + _description = 'Auto Directory Configuration' + _inherit = 'res.config' + + _columns = { + 'sale_order' : fields.boolean('Sale Order', help="Auto directory configuration for Sale Orders and Quotation with report."), + 'product' : fields.boolean('Product', help="Auto directory configuration for Products."), + 'project': fields.boolean('Project', help="Auto directory configuration for Projects."), + } + + + def execute(self, cr, uid, ids, context=None): + conf_id = ids and ids[0] or False + conf = self.browse(cr, uid, conf_id, context) + dir_pool = self.pool.get('document.directory') + data_pool = self.pool.get('ir.model.data') + model_pool = self.pool.get('ir.model') + content_pool = self.pool.get('document.directory.content') + if conf.sale_order and self.pool.get('sale.order'): + # Sale order + dir_data_id = data_pool._get_id(cr, uid, 'document', 'dir_sale_order_all') + if dir_data_id: + sale_dir_id = data_pool.browse(cr, uid, dir_data_id, context=context).res_id + else: + sale_dir_id = data_pool.create(cr, uid, {'name': 'Sale Orders'}) + mid = model_pool.search(cr, uid, [('model','=','sale.order')]) + dir_pool.write(cr, uid, [sale_dir_id], { + 'type':'ressource', + 'ressource_type_id': mid[0], + 'domain': '[]', + }) + # Qutation + dir_data_id = data_pool._get_id(cr, uid, 'document', 'dir_sale_order_quote') + if dir_data_id: + quta_dir_id = data_pool.browse(cr, uid, dir_data_id, context=context).res_id + else: + quta_dir_id = data_pool.create(cr, uid, {'name': 'Sale Quotations'}) + + dir_pool.write(cr, uid, [quta_dir_id], { + 'type':'ressource', + 'ressource_type_id': mid[0], + 'domain': "[('state','=','draft')]", + }) + # Sale Order Report + order_report_data_id = data_pool._get_id(cr, uid, 'sale', 'report_sale_order') + if order_report_data_id: + order_report_id = data_pool.browse(cr, uid, order_report_data_id, context=context).res_id + + content_pool.create(cr, uid, { + 'name': "Print Order", + 'suffix': "_print", + 'report_id': order_report_id, + 'extension': '.pdf', + 'include_name': 1, + 'directory_id': sale_dir_id, + }) + + content_pool.create(cr, uid, { + 'name': "Print Qutation", + 'suffix': "_print", + 'report_id': order_report_id, + 'extension': '.pdf', + 'include_name': 1, + 'directory_id': quta_dir_id, + }) + + + if conf.product and self.pool.get('product.product'): + # Product + dir_data_id = data_pool._get_id(cr, uid, 'document', 'dir_product') + if dir_data_id: + product_dir_id = data_pool.browse(cr, uid, dir_data_id, context=context).res_id + else: + product_dir_id = data_pool.create(cr, uid, {'name': 'Products'}) + + mid = model_pool.search(cr, uid, [('model','=','product.product')]) + dir_pool.write(cr, uid, [product_dir_id], { + 'type':'ressource', + 'ressource_type_id': mid[0], + }) + + if conf.project and self.pool.get('account.analytic.account'): + # Project + dir_data_id = data_pool._get_id(cr, uid, 'document', 'dir_project') + if dir_data_id: + project_dir_id = data_pool.browse(cr, uid, dir_data_id, context=context).res_id + else: + project_dir_id = data_pool.create(cr, uid, {'name': 'Projects'}) + + mid = model_pool.search(cr, uid, [('model','=','account.analytic.account')]) + dir_pool.write(cr, uid, [project_dir_id], { + 'type':'ressource', + 'ressource_type_id': mid[0], + 'domain': '[]', + 'ressource_tree': 1 + }) +document_configuration() diff --git a/addons/document/wizard/document_configuration_view.xml b/addons/document/wizard/document_configuration_view.xml new file mode 100644 index 00000000000..c6f40deb429 --- /dev/null +++ b/addons/document/wizard/document_configuration_view.xml @@ -0,0 +1,50 @@ + + + + Auto Configure Directory + document.configuration + form + + + +
+ Auto Configure +
+ + Resource Directory Configuration + + + Choose the following Resouces to auto directory configuration. + + + 12 + + + + + + + + + + +
+
+
+ + + Auto Configure Directory + ir.actions.act_window + document.configuration + + form + form + new + + + + + + +
+
diff --git a/addons/document_ftp/__init__.py b/addons/document_ftp/__init__.py index 45ec4a6b67f..af514df8985 100644 --- a/addons/document_ftp/__init__.py +++ b/addons/document_ftp/__init__.py @@ -18,7 +18,7 @@ # along with this program. If not, see . # ############################################################################## -import doc_conf_wizard import ftpserver +import wizard # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/__openerp__.py b/addons/document_ftp/__openerp__.py index 18042dabf93..a2b88d0a2a2 100644 --- a/addons/document_ftp/__openerp__.py +++ b/addons/document_ftp/__openerp__.py @@ -33,7 +33,8 @@ 'depends': ['base', 'document'], 'init_xml': [], 'update_xml': [ - 'document_ftp_view.xml', + 'wizard/ftp_configuration_view.xml', + 'wizard/ftp_browse_view.xml', 'security/ir.model.access.csv' ], 'demo_xml': [], diff --git a/addons/document_ftp/doc_conf_wizard.py b/addons/document_ftp/doc_conf_wizard.py deleted file mode 100644 index 0f2f970572e..00000000000 --- a/addons/document_ftp/doc_conf_wizard.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see -# -############################################################################## - -import base64 - -from osv import osv, fields -from osv.orm import except_orm -from tools import config -import urlparse - -import os - -class document_configuration_wizard(osv.osv_memory): - - _name='document.configuration.wizard' - _description = 'Auto Directory Configuration' - _inherit = 'res.config' - _rec_name = 'host' - _columns = { - 'host': fields.char('Address', size=64, - help="Server address or IP and port to which users should connect to for DMS access", - required=True), - } - - _defaults = { - 'host': config.get('ftp_server_host', 'localhost') + ':' + config.get('ftp_server_port', '8021'), - } - - def execute(self, cr, uid, ids, context=None): - conf = self.browse(cr, uid, ids[0], context) - obj=self.pool.get('document.directory') - objid=self.pool.get('ir.model.data') - - if self.pool.get('sale.order'): - id = objid._get_id(cr, uid, 'document', 'dir_sale_order_all') - id = objid.browse(cr, uid, id, context=context).res_id - mid = self.pool.get('ir.model').search(cr, uid, [('model','=','sale.order')]) - obj.write(cr, uid, [id], { - 'type':'ressource', - 'ressource_type_id': mid[0], - 'domain': '[]', - }) - aid = objid._get_id(cr, uid, 'sale', 'report_sale_order') - aid = objid.browse(cr, uid, aid, context=context).res_id - - self.pool.get('document.directory.content').create(cr, uid, { - 'name': "Print Order", - 'suffix': "_print", - 'report_id': aid, - 'extension': '.pdf', - 'include_name': 1, - 'directory_id': id, - }) - id = objid._get_id(cr, uid, 'document', 'dir_sale_order_quote') - id = objid.browse(cr, uid, id, context=context).res_id - obj.write(cr, uid, [id], { - 'type':'ressource', - 'ressource_type_id': mid[0], - 'domain': "[('state','=','draft')]", - }) - - if self.pool.get('product.product'): - id = objid._get_id(cr, uid, 'document', 'dir_product') - id = objid.browse(cr, uid, id, context=context).res_id - mid = self.pool.get('ir.model').search(cr, uid, [('model','=','product.product')]) - obj.write(cr, uid, [id], { - 'type':'ressource', - 'ressource_type_id': mid[0], - }) - - if self.pool.get('stock.location'): - aid = objid._get_id(cr, uid, 'stock', 'report_product_history') - aid = objid.browse(cr, uid, aid, context=context).res_id - - self.pool.get('document.directory.content').create(cr, uid, { - 'name': "Product Stock", - 'suffix': "_stock_forecast", - 'report_id': aid, - 'extension': '.pdf', - 'include_name': 1, - 'directory_id': id, - }) - - if self.pool.get('account.analytic.account'): - id = objid._get_id(cr, uid, 'document', 'dir_project') - id = objid.browse(cr, uid, id, context=context).res_id - mid = self.pool.get('ir.model').search(cr, uid, [('model','=','account.analytic.account')]) - obj.write(cr, uid, [id], { - 'type':'ressource', - 'ressource_type_id': mid[0], - 'domain': '[]', - 'ressource_tree': 1 - }) - - # Update the action for FTP browse. - aid = objid._get_id(cr, uid, 'document_ftp', 'action_document_browse') - aid = objid.browse(cr, uid, aid, context=context).res_id - self.pool.get('ir.actions.url').write(cr, uid, [aid], {'url': 'ftp://'+(conf.host or 'localhost:8021')+'/'}) -document_configuration_wizard() diff --git a/addons/document_ftp/security/ir.model.access.csv b/addons/document_ftp/security/ir.model.access.csv index c9c082f4397..b3ffdbd5350 100644 --- a/addons/document_ftp/security/ir.model.access.csv +++ b/addons/document_ftp/security/ir.model.access.csv @@ -1,3 +1,6 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_document_configuation_wizard","document.configuration.wizard document manager","model_document_configuration_wizard","document.group_document_manager",1,1,1,1 -"access_document_configuation_wizard_sytem","document.configuration.wizard group system","model_document_configuration_wizard","base.group_system",1,1,1,1 +"access_document_ftp_browse","document.ftp.browse document manager","model_document_ftp_browse","document.group_document_manager",1,1,1,1 +"access_document_ftp_browse","document.ftp.browse group system","model_document_ftp_browse","base.group_system",1,1,1,1 +"access_document_ftp_configuation","document.ftp.configuration document manager","model_document_ftp_configuration","document.group_document_manager",1,1,1,1 +"access_document_ftp_configuation_system","document.ftp.configuration group system","model_document_ftp_configuration","base.group_system",1,1,1,1 + diff --git a/addons/document_ftp/wizard/__init__.py b/addons/document_ftp/wizard/__init__.py new file mode 100644 index 00000000000..40997cc6b90 --- /dev/null +++ b/addons/document_ftp/wizard/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +import ftp_browse +import ftp_configuration + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/wizard/ftp_browse.py b/addons/document_ftp/wizard/ftp_browse.py new file mode 100644 index 00000000000..d033302f22a --- /dev/null +++ b/addons/document_ftp/wizard/ftp_browse.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from osv import osv, fields +from tools.translate import _ +from document_ftp import ftpserver +class document_ftp_browse(osv.osv_memory): + _name = 'document.ftp.browse' + _description = 'Document FTP Browse' + + _columns = { + 'url' : fields.char('FTP Server', size=64, required=True), + } + + def default_get(self, cr, uid, fields, context=None): + res = {} + if 'url' in fields: + user_pool = self.pool.get('res.users') + current_user = user_pool.browse(cr, uid, uid, context=context) + dir_pool = self.pool.get('document.directory') + data_pool = self.pool.get('ir.model.data') + aid = data_pool._get_id(cr, uid, 'document_ftp', 'action_document_browse') + aid = data_pool.browse(cr, uid, aid, context=context).res_id + ftp_url = self.pool.get('ir.actions.url').browse(cr, uid, aid, context=context) + url = ftp_url.url and ftp_url.url.split('ftp://') or [] + if url: + url = url[1] + else: + url = '%s:%s' %(ftpserver.HOST, ftpserver.PORT) + res['url'] = 'ftp://%s@%s'%(current_user.login, url) + return res + + def browse_ftp(self, cr, uid, ids, context): + data_id = ids and ids[0] or False + data = self.browse(cr, uid, data_id, context) + final_url = data.url + return { + 'type': 'ir.actions.act_url', + 'url':final_url, + 'target': 'new' + } +document_ftp_browse() + diff --git a/addons/document_ftp/wizard/ftp_browse_view.xml b/addons/document_ftp/wizard/ftp_browse_view.xml new file mode 100644 index 00000000000..44cedccfc3e --- /dev/null +++ b/addons/document_ftp/wizard/ftp_browse_view.xml @@ -0,0 +1,40 @@ + + + + + Document FTP Browse + document.ftp.browse + form + +
+ + + + +