From a9c60d6bdc4c729e159d9613077967a0c19448a2 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Sat, 12 Jun 2010 08:02:36 +0530 Subject: [PATCH] [IMP] document_ftp * Browse FTP Wizard * Auto Directory Configuration Wizard bzr revid: hmo@tinyerp.com-20100612023236-h54w0256v89irxgh --- addons/document_ftp/__init__.py | 2 +- addons/document_ftp/__openerp__.py | 3 +- addons/document_ftp/doc_conf_wizard.py | 149 ------------------ addons/document_ftp/wizard/__init__.py | 24 +++ .../wizard/document_configuration.py | 121 ++++++++++++++ .../document_configuration_view.xml} | 28 ++-- addons/document_ftp/wizard/ftp_browse.py | 53 +++++++ .../document_ftp/wizard/ftp_browse_view.xml | 40 +++++ 8 files changed, 250 insertions(+), 170 deletions(-) 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/document_configuration.py rename addons/document_ftp/{document_ftp_view.xml => wizard/document_configuration_view.xml} (67%) create mode 100644 addons/document_ftp/wizard/ftp_browse.py create mode 100644 addons/document_ftp/wizard/ftp_browse_view.xml 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..92ecac1d4ed 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_browse_view.xml', + 'wizard/document_configuration_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 1399bc276b5..00000000000 --- a/addons/document_ftp/doc_conf_wizard.py +++ /dev/null @@ -1,149 +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 -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.", required=True), - } - - def detect_ip_addr(self, cr, uid, context=None): - def _detect_ip_addr(self, cr, uid, context=None): - from array import array - import socket - from struct import pack, unpack - - try: - import fcntl - except ImportError: - fcntl = None - - if not fcntl: # not UNIX: - host = socket.gethostname() - ip_addr = socket.gethostbyname(host) - else: # UNIX: - # get all interfaces: - nbytes = 128 * 32 - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - names = array('B', '\0' * nbytes) - outbytes = unpack('iL', fcntl.ioctl( s.fileno(), 0x8912, pack('iL', nbytes, names.buffer_info()[0])))[0] - namestr = names.tostring() - ifaces = [namestr[i:i+32].split('\0', 1)[0] for i in range(0, outbytes, 32)] - - for ifname in [iface for iface in ifaces if iface != 'lo']: - ip_addr = socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, pack('256s', ifname[:15]))[20:24]) - break - return ip_addr - - try: - ip_addr = _detect_ip_addr(self, cr, uid, context) - except: - ip_addr = 'localhost' - return ip_addr - - _defaults = { - 'host': detect_ip_addr, - } - - 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/wizard/__init__.py b/addons/document_ftp/wizard/__init__.py new file mode 100644 index 00000000000..22971249113 --- /dev/null +++ b/addons/document_ftp/wizard/__init__.py @@ -0,0 +1,24 @@ +# -*- 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 document_configuration + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/wizard/document_configuration.py b/addons/document_ftp/wizard/document_configuration.py new file mode 100644 index 00000000000..e7966c2e3a4 --- /dev/null +++ b/addons/document_ftp/wizard/document_configuration.py @@ -0,0 +1,121 @@ +# -*- 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 document_ftp import ftpserver +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_ftp/document_ftp_view.xml b/addons/document_ftp/wizard/document_configuration_view.xml similarity index 67% rename from addons/document_ftp/document_ftp_view.xml rename to addons/document_ftp/wizard/document_configuration_view.xml index d3f4c09498c..c6f40deb429 100644 --- a/addons/document_ftp/document_ftp_view.xml +++ b/addons/document_ftp/wizard/document_configuration_view.xml @@ -1,22 +1,8 @@ - - Browse Files - ftp://localhost:8021/ - - - - - Auto Configure Directory - document.configuration.wizard + document.configuration form @@ -25,17 +11,21 @@ Auto Configure - FTP Server Configuration + Resource Directory Configuration - Choose the address for the Document Management System's FTP server. + Choose the following Resouces to auto directory configuration. 12 - + + + + + @@ -45,7 +35,7 @@ Auto Configure Directory ir.actions.act_window - document.configuration.wizard + document.configuration form form diff --git a/addons/document_ftp/wizard/ftp_browse.py b/addons/document_ftp/wizard/ftp_browse.py new file mode 100644 index 00000000000..06c9766997b --- /dev/null +++ b/addons/document_ftp/wizard/ftp_browse.py @@ -0,0 +1,53 @@ +# -*- 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) + res['url'] = '%s@%s:%d'%(current_user.login, ftpserver.HOST, ftpserver.PORT) + 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) + ftp_url = 'ftp://' + final_url = ftp_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..a32f93e096f --- /dev/null +++ b/addons/document_ftp/wizard/ftp_browse_view.xml @@ -0,0 +1,40 @@ + + + + + Document FTP Browse + document.ftp.browse + form + +
+ + + + +