diff options
| author | Arnaud Pineux <api@openerp.com> | 2012-11-13 14:49:11 +0100 |
|---|---|---|
| committer | Arnaud Pineux <api@openerp.com> | 2012-11-13 14:49:11 +0100 |
| commit | 7b76c5216e64cedd201cd0cab2a3fa80fdc66901 (patch) | |
| tree | 1efb5083771c94a55d8d143033b43a8f7d1ebbdf /addons/google_docs | |
| parent | e6541e77913f3d408fe25897810323265d9e9b20 (diff) | |
| parent | f8d9112ef7d4f18bb7a3a19fafc6194eb09caa0a (diff) | |
[MERGE] fix the phone call to opportunity to quotation
lp bug: https://launchpad.net/bugs/1017353 fixed
bzr revid: api@openerp.com-20121113134911-gd4o1zj6ixtu83hm
Diffstat (limited to 'addons/google_docs')
| -rw-r--r-- | addons/google_docs/__openerp__.py | 4 | ||||
| -rw-r--r-- | addons/google_docs/google_docs.py | 35 | ||||
| -rw-r--r-- | addons/google_docs/res_config_user_view.xml | 29 | ||||
| -rw-r--r-- | addons/google_docs/static/src/js/gdocs.js | 63 | ||||
| -rw-r--r-- | addons/google_docs/static/src/xml/gdocs.xml | 8 |
5 files changed, 86 insertions, 53 deletions
diff --git a/addons/google_docs/__openerp__.py b/addons/google_docs/__openerp__.py index b02f2e912fc..2d064fdb8a9 100644 --- a/addons/google_docs/__openerp__.py +++ b/addons/google_docs/__openerp__.py @@ -27,13 +27,13 @@ 'category': 'Tools', 'installable': True, 'auto_install': False, - 'web': True, 'js': ['static/src/js/gdocs.js'], + 'qweb': ['static/src/xml/gdocs.xml'], 'data': [ 'security/ir.model.access.csv', 'res_config_user_view.xml' ], - 'depends': ['google_base_account'], + 'depends': ['google_base_account','document'], 'description': """ Module to attach a google document to any model. ================================================ diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py index 270c105daab..462c8240810 100644 --- a/addons/google_docs/google_docs.py +++ b/addons/google_docs/google_docs.py @@ -17,7 +17,8 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## - +from datetime import datetime +from tools import DEFAULT_SERVER_DATETIME_FORMAT from osv import osv, fields from tools.translate import _ try: @@ -26,8 +27,11 @@ try: from gdata.client import RequestError from gdata.docs.service import DOCUMENT_LABEL import gdata.auth + from gdata.docs.data import Resource except ImportError: - raise osv.except_osv(_('Google Docs Error!'), _('Please install gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list.')) + import logging + _logger = logging.getLogger(__name__) + _logger.warning("Please install latest gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list") class google_docs_ir_attachment(osv.osv): _inherit = 'ir.attachment' @@ -58,7 +62,8 @@ class google_docs_ir_attachment(osv.osv): #login with the base account google module client = self._auth(cr, uid, context=context) # create the document in google docs - local_resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL) + title = "%s %s" % (context.get("name","Untitled Document."), datetime.today().strftime(DEFAULT_SERVER_DATETIME_FORMAT)) + local_resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL,title=title) #create a new doc in Google Docs gdocs_resource = client.post(entry=local_resource, uri='https://docs.google.com/feeds/default/private/full/') # create an ir.attachment into the db @@ -66,10 +71,12 @@ class google_docs_ir_attachment(osv.osv): 'res_model': res_model, 'res_id': res_id, 'type': 'url', - 'name': _('Google Doc'), + 'name': title, 'url': gdocs_resource.get_alternate_link().href, }, context=context) - return gdocs_resource.resource_id.text + return {'resource_id': gdocs_resource.resource_id.text, + 'title': title, + 'url': gdocs_resource.get_alternate_link().href} def copy_gdoc(self, cr, uid, res_model, res_id, name_gdocs, gdoc_template_id, context=None): ''' @@ -86,7 +93,7 @@ class google_docs_ir_attachment(osv.osv): try: original_resource = client.get_resource_by_id(gdoc_template_id) #copy the document you choose in the configuration - copy_resource = client.copy_resource(original_resource, 'copy_%s' % original_resource.title.text) + copy_resource = client.copy_resource(original_resource, name_gdocs) except: raise osv.except_osv(_('Google Docs Error!'), _("Your resource id is not correct. You can find the id in the google docs URL.")) # create an ir.attachment @@ -111,7 +118,8 @@ class google_docs_ir_attachment(osv.osv): a length of 1 element only (batch processing is not supported in the code, though nothing really prevent it) :return: the google document object created ''' - assert len(ids) == 1, 'Creating google docs may only be done by one at a time' + if len(ids) != 1: + raise osv.except_osv(_('Google Docs Error!'), _("Creating google docs may only be done by one at a time.")) res_id = ids[0] pool_ir_attachment = self.pool.get('ir.attachment') pool_gdoc_config = self.pool.get('google.docs.config') @@ -122,7 +130,10 @@ class google_docs_ir_attachment(osv.osv): google_docs_config = pool_gdoc_config.search(cr, uid, [('model_id', '=', res_model)], context=context) if google_docs_config: name_gdocs = pool_gdoc_config.browse(cr, uid, google_docs_config, context=context)[0].name_template - name_gdocs = name_gdocs % model_fields_dic + try: + name_gdocs = name_gdocs % model_fields_dic + except: + raise osv.except_osv(_('Key Error!'), _("Your Google Doc Name Pattern's key does not found in object.")) google_template_id = pool_gdoc_config.browse(cr, uid, google_docs_config[0], context=context).gdocs_resource_id google_document = pool_ir_attachment.copy_gdoc(cr, uid, res_model, res_id, name_gdocs, google_template_id, context=context) else: @@ -134,16 +145,16 @@ class config(osv.osv): _description = "Google Docs templates config" _columns = { - 'model_id': fields.many2one('ir.model', 'Model'), - 'gdocs_resource_id': fields.char('Google resource ID', size=64,help=''' + 'model_id': fields.many2one('ir.model', 'Model', required=True), + 'gdocs_resource_id': fields.char('Google Resource ID to Use as Template', size=64, help=''' This is the id of the template document, on google side. You can find it thanks to its URL: *for a text document with url like `https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is `document:123456789` *for a spreadsheet document with url like `https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, the ID is `spreadsheet:123456789` *for a presentation (slide show) document with url like `https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id.p`, the ID is `presentation:123456789` *for a drawing document with url like `https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is `drawings:123456789` ... -'''), - 'name_template': fields.char('GDoc name template ', size=64, help='This is the name which appears on google side'), +''', required=True), + 'name_template': fields.char('Google Doc Name Pattern', size=64, help='Choose how the new google docs will be named, on google side. Eg. gdoc_%(field_name)s', required=True), } _defaults = { diff --git a/addons/google_docs/res_config_user_view.xml b/addons/google_docs/res_config_user_view.xml index 4aabba3ac5a..e6c4223735f 100644 --- a/addons/google_docs/res_config_user_view.xml +++ b/addons/google_docs/res_config_user_view.xml @@ -8,9 +8,10 @@ <field name="name">google_docs.config.tree</field> <field name="model">google.docs.config</field> <field name="arch" type="xml"> - <group name="default_filters" position="inside"> + <tree string="Google Docs Configuration"> <field name="model_id"/> - </group> + <field name="name_template"/> + </tree> </field> </record> @@ -18,11 +19,25 @@ <field name="name">google_docs.config.form</field> <field name="model">google.docs.config</field> <field name="arch" type="xml"> - <group colspan='4'> - <field name="model_id"/> - <field name='gdocs_resource_id'/> - <field name='name_template'/> - </group> + <form string="Google Docs Configuration" version="7.0"> + <group> + <field name="model_id"/> + <label for='gdocs_resource_id'/> + <div> + <field name='gdocs_resource_id'/> + <p class="oe_grey"> +This is the id of the template document, on google side. You can find it thanks to its URL: +<ul> +<li>for a text document with url like `https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is `document:123456789`</li> +<li>for a spreadsheet document with url like `https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, the ID is `spreadsheet:123456789`</li> +<li>for a presentation (slide show) document with url like `https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id.p`, the ID is `presentation:123456789`</li> +<li>for a drawing document with url like `https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is `drawings:123456789`</li> +</ul> + </p> + </div> + <field name='name_template'/> + </group> + </form> </field> </record> diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js index 8f41a9d7b21..45e1d09d42c 100644 --- a/addons/google_docs/static/src/js/gdocs.js +++ b/addons/google_docs/static/src/js/gdocs.js @@ -1,41 +1,40 @@ openerp.google_docs = function(instance, m) { -var _t = instance.web._t; +var _t = instance.web._t, + QWeb = instance.web.qweb; - instance.web.Sidebar = instance.web.Sidebar.extend({ - on_attachments_loaded: function(attachments) { - self = this - self._super(attachments); - // if attachment contains a google doc url do nothing - // else display a button to create a google doc - var flag = false; - _.each(attachments, function(i) { - if (i.url && i.url.match('/docs.google.com/')) { flag = true; } + instance.web.Sidebar.include({ + redraw: function() { + var self = this; + this._super.apply(this, arguments); + self.$el.find('.oe_sidebar_add_attachment').after(QWeb.render('AddGoogleDocumentItem', {widget: self})) + self.$el.find('.oe_sidebar_add_google_doc').on('click', function (e) { + self.on_google_doc(); }); - if (! flag) { - this.add_items('files', [ - { label: _t('Google Doc'), callback: self.on_google_doc }, - ]); - } }, on_google_doc: function() { var self = this; - var form = self.getParent(); - form.sidebar_context().then(function (context) { - var ds = new instance.web.DataSet(this, 'ir.attachment', context); - ds.call('google_doc_get', [form.dataset.model, [form.datarecord.id], context], function(r) { - if (r == 'False') { - var params = { - error: response, - message: _t("The user google credentials are not set yet. Contact your administrator for help.") + var view = self.getParent(); + var ids = ( view.fields_view.type != "form" )? view.groups.get_selection().ids : [ view.datarecord.id ]; + if( !_.isEmpty(ids) ){ + view.sidebar_context().done(function (context) { + var ds = new instance.web.DataSet(this, 'ir.attachment', context); + ds.call('google_doc_get', [view.dataset.model, ids, context]).done(function(r) { + if (r == 'False') { + var params = { + error: response, + message: _t("The user google credentials are not set yet. Contact your administrator for help.") + } + $(openerp.web.qweb.render("DialogWarning", params)).dialog({ + title: _t("User Google credentials are not yet set."), + modal: true, + }); } - $(openerp.web.qweb.render("DialogWarning", params)).dialog({ - title: _t("User Google credentials are not yet set."), - modal: true, - }); - } - form.reload(); + }).done(function(r){ + window.open(r.url,"_blank"); + view.reload(); + }); }); - }) + } } - }) -} + }); +}; diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_docs/static/src/xml/gdocs.xml new file mode 100644 index 00000000000..0c8d9c3b01f --- /dev/null +++ b/addons/google_docs/static/src/xml/gdocs.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- vim:fdl=1: +--> +<templates id="template" xml:space="preserve"> +<t t-name="AddGoogleDocumentItem"> + <li class="oe_sidebar_add_google_doc"><span><b>Add Google Doc...</b></span></li> +</t> +</templates> |
