From 61b7f5034d0d2b8b609dd99fe32766e48ed99114 Mon Sep 17 00:00:00 2001 From: "Jiten (OpenERP)" Date: Tue, 12 Jun 2012 18:14:54 +0530 Subject: [PATCH] [ADD] Add linkedin module for integration linkedin with openerp. bzr revid: jra@tinyerp.com-20120612124454-78zfn48kerp93c5z --- addons/web_linkedin/__init__.py | 2 + addons/web_linkedin/__openerp__.py | 27 + addons/web_linkedin/res_config.py | 52 ++ addons/web_linkedin/res_config_view.xml | 26 + addons/web_linkedin/res_partner_view.xml | 36 + .../web_linkedin/static/src/css/linkedin.css | 39 + .../static/src/img/Linkedin_blue.png | Bin 0 -> 5435 bytes .../static/src/img/Linkedin_grey.png | Bin 0 -> 2748 bytes addons/web_linkedin/static/src/img/icon.png | Bin 0 -> 38257 bytes .../static/src/img/linkedin-profile.gif | Bin 0 -> 2244 bytes .../web_linkedin/static/src/img/loading.png | Bin 0 -> 5260 bytes .../static/src/img/twitt-follow.png | Bin 0 -> 12908 bytes addons/web_linkedin/static/src/js/linkedin.js | 667 ++++++++++++++++++ .../web_linkedin/static/src/xml/linkedin.xml | 124 ++++ addons/web_linkedin/web_linkedin.py | 72 ++ 15 files changed, 1045 insertions(+) create mode 100644 addons/web_linkedin/__init__.py create mode 100644 addons/web_linkedin/__openerp__.py create mode 100644 addons/web_linkedin/res_config.py create mode 100644 addons/web_linkedin/res_config_view.xml create mode 100644 addons/web_linkedin/res_partner_view.xml create mode 100644 addons/web_linkedin/static/src/css/linkedin.css create mode 100644 addons/web_linkedin/static/src/img/Linkedin_blue.png create mode 100644 addons/web_linkedin/static/src/img/Linkedin_grey.png create mode 100644 addons/web_linkedin/static/src/img/icon.png create mode 100644 addons/web_linkedin/static/src/img/linkedin-profile.gif create mode 100644 addons/web_linkedin/static/src/img/loading.png create mode 100644 addons/web_linkedin/static/src/img/twitt-follow.png create mode 100644 addons/web_linkedin/static/src/js/linkedin.js create mode 100644 addons/web_linkedin/static/src/xml/linkedin.xml create mode 100644 addons/web_linkedin/web_linkedin.py diff --git a/addons/web_linkedin/__init__.py b/addons/web_linkedin/__init__.py new file mode 100644 index 00000000000..92b70f98cf8 --- /dev/null +++ b/addons/web_linkedin/__init__.py @@ -0,0 +1,2 @@ +import res_config +import web_linkedin \ No newline at end of file diff --git a/addons/web_linkedin/__openerp__.py b/addons/web_linkedin/__openerp__.py new file mode 100644 index 00000000000..680bef0c47b --- /dev/null +++ b/addons/web_linkedin/__openerp__.py @@ -0,0 +1,27 @@ +{ + "name" : "LinkedIn Integration", + 'version': '0.1', + 'category': 'Tools', + 'complexity': "easy", + "description": + """ + OpenERP Web LinkedIn module. + This module provides the Integration of the LinkedIn with OpenERP. + """, + 'update_xml': [ + 'res_partner_view.xml', + 'res_config_view.xml', + ], + "depends" : ["base"], + "js": [ + "static/src/js/*.js" + ], + "css": [ + "static/src/css/*.css" + ], + 'qweb': [ + "static/src/xml/*.xml" + ], + 'installable': True, + 'auto_install': False, +} diff --git a/addons/web_linkedin/res_config.py b/addons/web_linkedin/res_config.py new file mode 100644 index 00000000000..e3e70237086 --- /dev/null +++ b/addons/web_linkedin/res_config.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (C) 2004-2012 OpenERP S.A. (). +# +# 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 base_config_settings(osv.osv_memory): + _inherit = 'base.config.settings' + _name = 'base.config.settings' + _columns = { + 'default_linkedin_api_key': fields.char('LinkedIn API key', size=128, required=True, default_model='res.company', + help="""Give API key of linkedin."""), + 'generate_key': fields.text('Go to URL', readonly=True, + help="""If you have not generate linkedin API Key yet than Go to URL to generate and enter it in above text field."""), + } + _defaults = { + 'generate_key': "To find contact persons from LinkedIn "\ + "\n====================================="\ + "\n* Go to this URL : www.linkedin.com/secure/developer "\ + "\n* Add New Application and fill the form,"\ + "\n - JavaScript API Domain is Your domain name (e.g. abc.com),"\ + "\n - You can give multiple domain (e.g. abc.com, xyz.com)"\ + "\n - programming tools is Javascript"\ + '\n* Copy the "API Key" and paste it in the field "LinkedIn API Key" here above".' + } + + def execute(self, cr, uid, ids, context=None): + super(base_config_settings,self).execute(cr, uid, ids, context=context) + company_obj = self.pool.get('res.company') + data = self.browse(cr, uid, ids[0], context=context) + company_id = company_obj._company_default_get(cr, uid, 'res.users', context=context) + company_obj.write(cr, uid, [company_id], {'default_linkedin_api_key': data.default_linkedin_api_key}, context=context) + +base_config_settings() +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/web_linkedin/res_config_view.xml b/addons/web_linkedin/res_config_view.xml new file mode 100644 index 00000000000..2fef772d0b6 --- /dev/null +++ b/addons/web_linkedin/res_config_view.xml @@ -0,0 +1,26 @@ + + + + General Settings + base.config.settings + + form + 20 + + + + + + + + + + + + + + + + + + diff --git a/addons/web_linkedin/res_partner_view.xml b/addons/web_linkedin/res_partner_view.xml new file mode 100644 index 00000000000..6b8725f60fe --- /dev/null +++ b/addons/web_linkedin/res_partner_view.xml @@ -0,0 +1,36 @@ + + + + + res.partner.linkedin.inherit + res.partner + form + + + + + + + + + + + + + + res.company.linkedin.inherit + res.company + form + + + + + + + + + + + + + diff --git a/addons/web_linkedin/static/src/css/linkedin.css b/addons/web_linkedin/static/src/css/linkedin.css new file mode 100644 index 00000000000..0ca3dc90ac9 --- /dev/null +++ b/addons/web_linkedin/static/src/css/linkedin.css @@ -0,0 +1,39 @@ +.ul-ldn-dropdown { + list-style: none outside none; + padding: 1px; + max-height: 500px; + margin: 0px; + background-color: rgb(255, 255, 255); + border: 1px solid rgb(153, 153, 153); +} + +.li-ldn-dropdown { + margin: 0px; + display: block; + cursor: default; + padding: 3px; + border: 1px solid rgb(255, 255, 255); + background-color: transparent; +} +.li-ldn-dropdown td{ + font-size:10px; + font-weight:normal; + padding: 2px 2px 0px; +} + +.li-ldn-dropdown:hover { + margin: 0px; + display: block; + cursor: pointer; + border: 1px solid rgb(10, 36, 106); + background-color: rgb(182, 189, 210) +} + +.search-box { + background: none repeat scroll 0 0%, -moz-linear-gradient(#EFEFEF, #D8D8D8) repeat scroll 0 0 transparent; + background: none repeat scroll 0 0%, -webkit-linear-gradient(#EFEFEF, #D8D8D8) repeat scroll 0 0 transparent; + border: 1px solid #ABABAB; + border-radius: 3px 3px 3px 3px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + max-height: 450px; +} diff --git a/addons/web_linkedin/static/src/img/Linkedin_blue.png b/addons/web_linkedin/static/src/img/Linkedin_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..c37d0218f7d64711a93bf02cd0469faad5dba9a5 GIT binary patch literal 5435 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 literal 0 HcmV?d00001 diff --git a/addons/web_linkedin/static/src/img/Linkedin_grey.png b/addons/web_linkedin/static/src/img/Linkedin_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..726e012f2209fdd3d40c825f99a23cdd29b9d145 GIT binary patch literal 2748 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 literal 0 HcmV?d00001 diff --git a/addons/web_linkedin/static/src/img/twitt-follow.png b/addons/web_linkedin/static/src/img/twitt-follow.png new file mode 100644 index 0000000000000000000000000000000000000000..684813a1ee409af31bd3c4cd197951e1c72fdc51 GIT binary patch literal 12908 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 WR*i`F>{WsQ0000Loading....');*/ + var temp = 0; + $(head).find('script').each( function(i,val) { + if($(val).attr('src')=="http://platform.linkedin.com/in.js"){ + temp = 1; + } + }); + if(temp != 1) { + head.appendChild( tag ); + } + this.notification = new instance.web.Notification(this); + this.notification.appendTo(this.$element); + this.$element.find(".linkedin_icon").click( this.do_load_linkedin ); + this.removeTemplate(); + if(this.view.fields['name'].get_value()!=false){ + /* if value get then display button of profile url */ + if (this.view.fields['profile_id'].get_value() || this.view.datarecord['profile_id']) { + this.setTemplate(this.view.datarecord['profile_id'] , false ); + } + /* if value get then display button of twitter */ + if (this.view.fields['twitter_id'].get_value() || this.view.datarecord['twitter_id']) { + this.setTemplate( false, this.view.datarecord['twitter_id']); + } + } + if (this.view.datarecord['linkedin_id']) { + if (this.view.datarecord['profile_id'] && !this.view.datarecord['twitter_id']) { + if (this.$element.find('#twitterid')) { + this.$element.find('#twitterid').remove(); + } + } + else if (!this.view.datarecord['profile_id'] && this.view.datarecord['twitter_id']) { + if (this.$element.find('#profileid')) { + this.$element.find('#profileid').remove(); + } + } + }else{ + this.removeTemplate(); + } + } else { + this.removeTemplate(); + if(this.view.fields['name'].get_value()!=false){ + var tagtr = document.createElement('tr'); + tagtr.id = "profiletwittor-tr"; + this.$element.append(tagtr); + /* if value get then display button of profile url */ + if (this.view.fields['profile_id'] && this.view.datarecord['profile_id']) { + this.setTemplate( this.view.datarecord['profile_id'] , false ); + } + /* if value get then display button of twitter */ + if (this.view.fields['twitter_id'] && this.view.datarecord['twitter_id']) { + this.setTemplate( false, this.view.datarecord['twitter_id'] ); + } + } + } + }, + APIKeyWarning: function(e) { + e.message= "Linkedin API Key is not registerd/correct.\n Go to Settings, 'General Settings' menu and follow steps to register the LinkedIn API Key."; + instance.web.dialog($(QWeb.render("CrashManager.warning", _t(e))), { + title: _t("Linkedin API Key Warning"), + modal: true, + height: 200, + width: 500, + buttons: [ + { + text: _t("Ok"), + click: function() { $(this).dialog("close"); } + }] + }); + }, + setTemplate: function( URL, AccountName ) { + if(AccountName){ + var AccountName = AccountName.replace(/[^a-zA-Z 0-9]+/g, ''); + Twitt = "https://twitter.com/intent/follow?original_referer=http%3A%2F%2Flocalhost%3A8069%2Fweb%2Fwebclient%2Fhome&screen_name="+AccountName+"&source=followbutton&variant=2.0" + this.$element.find('tr#profiletwittor-tr').append(QWeb.render('TwitterURL',{'URLID': Twitt, 'account': AccountName})) + }else if(URL){ + this.$element.find('tr#profiletwittor-tr').append(QWeb.render('ProfileURL',{'URLID': URL })) + } + }, + removeTemplate: function( flag ) { + if (flag) { + this.$element.find('#searchresults').remove(); + } else { + if (this.$element.find('#profileid')) { + this.$element.find('#profileid').remove(); + } + if (this.$element.find('#twitterid')) { + this.$element.find('#twitterid').remove(); + } + } + }, + /* Load Linkedin Data On search */ + do_load_linkedin: function( e ) { + var self = this; + this.msg_Counter=0; /* used to display notification, when record not found on Linkedin search */ + this.removeTemplate( 1 ); + if(!this.apikey){ + this.APIKeyWarning(this.APIWarning); + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + return false; + } + if (IN.ENV.auth.oauth_token) { + if (self.$element.find("input").val()) { + self.$element.find('#loader').show(); + $('.linkedin_icon').css('display', 'none'); + /* People Search */ + IN.API.Raw("/people-search:(people:(id,first-name,last-name,picture-url,public-profile-url,formatted-name,location,phone-numbers,im-accounts,main-address,headline))") + .params({ + "first-name": self.$element.find("input").val(), + "count" : 4 + }) + .result( self.do_fetch_detail ); + /* Company Search */ + IN.API.Raw("/company-search:(companies:(id,name,description,industry,logo-url,website-url,locations,twitter-id))") + .params({ + "keywords": self.$element.find("input").val(), + "count" : 4 + }) + .result( self.do_fetch_detail ); + }else{ + this.notification.warn(_t("Linkedin Search"), _t("Please Enter Required Field.")); + } + } + else { + self.do_authorize(); + } + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + }, + do_authorize: function(resultCallback){ + this.check_authorized(); + if (this.isAuthorized == false){ + IN.User.authorize(resultCallback); + } + }, + check_authorized: function(){ + this.isAuthorized = IN.User.isAuthorized(); + }, + /* Fetch Result from Linkedin and set in searchbox */ + do_fetch_detail: function(result, metadata) { + var self = this; + if (result.people) { + if (result.people._total==0) { + this.msg_Counter++; + } + var count = 0; + for (i in result.people.values) { + var temp = self.validName(result.people.values[i].firstName, result.people.values[i].lastName) + if (temp) { + count++; + } + } + if (count == 4 || count==result.people._total) { + result.people._total = 0; + } + this.resultcontact = result; + }else if (result.companies) { + if (result.companies._total == 0) { + this.msg_Counter++; + } + this.resultcompany = result; + } + this.removeTemplate( 1 ); + if (this.msg_Counter == 2) { + // dialog box + /*new instance.web.dialog($(QWeb.render("SearchWarning")), { + title: _t("Linkedin Search"), + modal: true, + buttons: [ + {text: _t("Ok"), click: function() { $(this).dialog("close"); }} + ] + });*/ + // notification + this.notification.warn(_t("Linkedin Search"), _t("Record Not Found.")); + this.$element.find('#loader').hide(); + if(this.view.fields['linkedin_id']){ + if(this.view.datarecord['linkedin_id']){ + this.$element.find('#linkedindefault').hide(); + this.$element.find('#linkedinrecord').show(); + }else{ + this.$element.find('#linkedinrecord').hide(); + this.$element.find('#linkedindefault').show(); + } + } + } else { + if (this.resultcontact || this.resultcompany) { + this.$element.find('#linkedin-field-name').append(QWeb.render( 'Linkedincontact', {'result' : this.resultcontact, 'resultcompany' : this.resultcompany})) ; + } + } + if(this.$element.find('#searchresults .search-box ul li')){ + this.$element.find('#loader').hide(); + if(this.view.fields['linkedin_id']){ + if(this.view.datarecord['linkedin_id']){ + this.$element.find('#linkedindefault').hide(); + this.$element.find('#linkedinrecord').show(); + }else{ + this.$element.find('#linkedinrecord').hide(); + this.$element.find('#linkedindefault').show(); + } + } + } + this.$element.find('#searchresults .search-box ul li').click( function() { + self.getdata( this ); + }); + $(document).click( function() { + self.removeTemplate( 1 ); + }); + }, + /* Selected record's data fetched */ + getdata: function( e ) { + var self = this; + if (this.resultcontact) { + for (i in this.resultcontact.people.values) { + if (self.resultcontact.people.values[i].id == $(e).attr('id')) { + self.removeTemplate( 1 ); + this.getTwitterAccount( self.resultcontact.people.values[i] ) + } + } + } + if(this.resultcompany){ + for ( i in this.resultcompany.companies.values ) { + if ( self.resultcompany.companies.values[i].id == $(e).attr('id') ) { + self.removeTemplate( 1 ); + self.map_values(self.resultcompany.companies.values[i]); + } + } + } + }, + /* Based on Linkedin Id of record fetch Twitter Account Detail for People */ + getTwitterAccount: function( values, flag, mainfield ){ + var self = this; + IN.API.Profile(values.id).fields('twitter-accounts') + .result(function(acname){ + values.twitterAccounts = acname.values[0].twitterAccounts + if(flag){ + self.map_values(values, flag, mainfield); + }else{ + self.map_values(values); + } + }); + }, + /* Mapping of Linkedin Fields with res.partner Fields + linkedinrecord : contains linkedin record's data + flag : indicates mapping of People search record or for company's contacts/connections (people) + if(flag) mapping for contacts of company + if(!flag) mapping for people search + mainfield : class of child_ids field + */ + map_values: function (linkedinrecord, flag, mainfield){ + var self = this, tempdata = {}, temp_data = 0, id = this.view.datarecord.id; + _(this.view.fields).each(function (field, f) { + if (f=='name') { + if (!flag) { + if (linkedinrecord.formattedName) { + field.set_value(linkedinrecord['formattedName'] || false); + } else if(linkedinrecord.name) { + field.set_value(linkedinrecord['name'] || false); + } + } else { + tempdata[f] = linkedinrecord.firstName+' '+linkedinrecord.lastName; + } + } + else if (f=='property_account_payable') { + if(flag == 1)tempdata[f] = field.get_value() + } + else if (f=='property_account_receivable') { + if(flag == 1)tempdata[f] = field.get_value() + } + else if (f=='type') { + (flag == 1) ? tempdata[f] = field.get_value() : field.get_value(); + } + else if (f=='linkedin_id') { + (flag == 1) ? tempdata[f] = linkedinrecord['id'] : field.set_value(linkedinrecord['id']); + } + else if (f=='profile_id') { + if (linkedinrecord.publicProfileUrl) { + (flag == 1) ? tempdata[f] = linkedinrecord.publicProfileUrl : field.set_value(linkedinrecord.publicProfileUrl); + } else { + field.set_value(false); + tempdata[f] = false; + } + } + else if (f=='twitter_id') { + if (linkedinrecord.twitterAccounts && linkedinrecord.twitterAccounts._total >= 1) { + (flag == 1) ? tempdata[f] = linkedinrecord.twitterAccounts.values[0].providerAccountName : field.set_value(linkedinrecord.twitterAccounts.values[0].providerAccountName); + }else if (linkedinrecord.twitterId) { + (flag == 1) ? tempdata[f] = linkedinrecord.twitterId : field.set_value(linkedinrecord.twitterId); + } else { + (flag == 1) ? tempdata[f] = false : field.set_value(false); + } + } + else if (f=='mobile') { + if (!flag && linkedinrecord.phoneNumbers && linkedinrecord['phoneNumbers']._total>=1 && linkedinrecord['phoneNumbers'].values[0].phoneType == "mobile") { + field.set_value( linkedinrecord['phoneNumbers'].values[0].phoneNumber || false ); + }else if (flag == 1) { + tempdata[f] = field.get_value(); + } else { + field.set_value(false); + } + } + else if (f=='phone') { + if (!flag && linkedinrecord.phoneNumbers && linkedinrecord['phoneNumbers']._total>=1 && linkedinrecord['phoneNumbers'].values[0].phoneType != "mobile") { + field.set_value(linkedinrecord['phoneNumbers'].values[0].phoneNumber || false); + } else if(flag == 1) { + tempdata[f] = field.get_value(); + } else { + field.set_value(false); + } + } + else if (f=='email') { + if (!flag && linkedinrecord.imAccounts && linkedinrecord['imAccounts']._total>=1) { + field.set_value(linkedinrecord['imAccounts'].values[0].imAccountName); + } else if(flag == 1) { + tempdata[f] = field.get_value(); + } else { + field.set_value(false); + } + } + else if (f=='photo') { + if (!flag) { + if (linkedinrecord.pictureUrl && linkedinrecord['pictureUrl']) { + /* Fetch binary data from URL for People */ + self.rpc('/web_linkedin/binary/url2binary',{'url':linkedinrecord['pictureUrl']},function(data){ + field.set_value(data); + }); + } else if (linkedinrecord.logoUrl && linkedinrecord['logoUrl']) { + /* Fetch binary data from URL for Company */ + self.rpc('/web_linkedin/binary/url2binary',{'url':linkedinrecord['logoUrl']},function(data){ + field.set_value(data); + }); + } else { + field.set_value(false); + } + } + else{ + if (linkedinrecord['pictureUrl']) { + temp_data = 1; + /* Fetch binary data from URL for contact of Company */ + self.rpc('/web_linkedin/binary/url2binary',{'url':linkedinrecord['pictureUrl']}).done(function(res){ + tempdata[f] = res; + self.set_o2mdata(tempdata,mainfield) + }); + } else { + tempdata[f] = "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 TkSuQmCC"; + } + } + } + else if (f=='street') { + if (!flag && linkedinrecord.mainAddress && linkedinrecord['mainAddress']) { + field.set_value(linkedinrecord['mainAddress']); + } else if(flag == 1) { + tempdata[f] = field.get_value(); + } else { + field.set_value(false); + } + } + else if (f=='country_id') { + if (!flag && linkedinrecord.location && linkedinrecord['location']) { + field.field.domain = [['code', '=', linkedinrecord['location'].country['code'].toUpperCase()]]; + (new instance.web.DataSetSearch(self, field.field.relation,field.field.context,field.field.domain)).read_slice(['id','name'],{}).then(function(res){ + field.original_value = [res[0].id, res[0].name]; + field.set_value(res[0].id) + }) + } else if (!flag && linkedinrecord.locations && linkedinrecord.locations._total>0) { + if (linkedinrecord.locations.values[0].address['country-code']) { + field.field.domain = ['code', '=', linkedinrecord.locations.values[0].address['country-code'].toUpperCase()]; + (new instance.web.DataSetSearch(self, field.field.relation,field.field.context,field.field.domain)).read_slice(['id','name'],{}).then(function(res){ + field.original_value = [res[0].id, res[0].name]; + field.set_value(res[0].id) + }) + } else { + field.set_value(false); + } + } else if(flag == 1) { + tempdata[f] = field.get_value(); + } else { + field.set_value(false); + } + } + else if (f=='city') { + if (!flag && linkedinrecord.location && linkedinrecord['location']) { + field.set_value(linkedinrecord['location'].name.split(' ')[0] || false); + } else if (!flag && linkedinrecord.locations && linkedinrecord.locations._total>0) { + if (linkedinrecord.locations.values[0].address['city']) { + field.set_value(linkedinrecord.locations.values[0].address['city']); + } else { + field.set_value(false); + } + } else if (flag == 1) { + tempdata[f] = field.get_value(); + } else { + field.set_value(false); + } + } + else if (f=='website') { + if (!flag && linkedinrecord.websiteUrl) { + field.set_value(linkedinrecord['websiteUrl'] || false); + } else if (flag == 1) { + tempdata[f] = field.get_value(); + } else { + field.set_value(false); + } + } + else if (f=='customer') { + if(flag == 1)tempdata[f] = true; + } + else if (f=='supplier') { + } + else if (f=='active') { + (flag == 1) ? tempdata[f] = true : field.set_value(true); + } + else if (f=='is_company') { + if (!flag && linkedinrecord.formattedName) { + field.set_value(false); + } else { + field.set_value(true); + tempdata[f] = false; + } + } + else if (f=='zip') { + if (!flag && linkedinrecord.locations && linkedinrecord.locations._total>0) { + if (linkedinrecord.locations.values[0].address['postalCode']) { + field.set_value(linkedinrecord.locations.values[0].address['postalCode']); + } else { + field.set_value(false); + } + }else if (flag == 1) { + tempdata[f] = field.get_value(); + } else { + field.set_value(false); + } + } + else if (f=='parent_id') { + if (!flag && linkedinrecord.formattedName) { + field.set_value(false); + } else if (!flag && linkedinrecord.name) { + field.set_value(false); + } else { + if (linkedinrecord.formattedName) { + tempdata[f] = [id,self.view.fields['name'].get_value()]; + } + } + } + else if (f=='fax') { + if (!flag && linkedinrecord.locations && linkedinrecord.locations._total>0) { + if (linkedinrecord.locations.values[0].contactInfo['fax']) { + field.set_value(linkedinrecord.locations.values[0].contactInfo['fax']); + } else { + field.set_value(false); + } + } else if (flag == 1) { + tempdata[f] = field.get_value(); + } else { + field.set_value(false); + } + } + else if (f=='use_parent_address') { + (flag == 1) ? tempdata[f] = true : field.set_value(false); + } + else if (f=='child_ids') { + /* For Company Set value of child_ids field */ + if (!flag && linkedinrecord.name) { + self.$element.find('#loader').show(); + $('.linkedin_icon').css('display', 'none'); + /* Fetch contact of Company */ + IN.API.Raw("/people-search:(people:(id,first-name,last-name,formatted-name,picture-url,publicProfileUrl,phone-numbers,im-accounts,main-address,location,relation-to-viewer:(related-connections)))") + //"id", "firstName", "lastName", "pictureUrl", "publicProfileUrl", "formatted-name", "headline", "location", "industry", "languages", "phone-numbers", "im-accounts", "main-address" + .params({ + "company-name" : linkedinrecord.name, + "current-company": true, + "count" : 25 + }) + .result( function (getresult){ + if(getresult.people._total==0){ + self.$element.find('#loader').hide(); + if(self.view.fields['linkedin_id']){ + if(self.view.datarecord['linkedin_id']){ + self.$element.find('#linkedindefault').hide(); + self.$element.find('#linkedinrecord').show(); + }else{ + self.$element.find('#linkedinrecord').hide(); + self.$element.find('#linkedindefault').show(); + } + } + } + self.totalids = [],self.updteids = []; + _(field.dataset.ids).each( function(i) { + if (typeof(i)=="number") { + self.totalids.push(i); + var mobile = self.view.fields['mobile'].get_value(); + var phone = self.view.fields['phone'].get_value(); + var email = self.view.fields['email'].get_value(); + var fax = self.view.fields['fax'].get_value(); + var website = self.view.fields['website'].get_value(); + var zip = self.view.fields['zip'].get_value(); + var city = self.view.fields['city'].get_value(); + var country_id = self.view.fields['country_id'].get_value(); + var street = self.view.fields['street'].get_value(); + field.dataset.write(i,{'mobile':mobile,'phone':phone,'email':email,'fax':fax,'website':website,'zip':zip,'city':city,'country_id':country_id,'street':street},{}); + } + }); + field.dataset.ids = self.totalids; + var counter = 0;/* Indicates All searched records are Invalid or valid */ + self.t_count=0; + self.o2m_count = 0; + for (i in getresult.people.values) { + var connectTemp = self.validName(getresult.people.values[i].firstName, getresult.people.values[i].lastName) + if (connectTemp) { + counter++; + } else { + self.t_count++; + self.getTwitterAccount(getresult.people.values[i], 1, field); + } + } + if (getresult.people._count) { + var total_Count = getresult.people._count; + }else if (getresult.people._total) { + var total_Count = getresult.people._total; + } + /* If counter == total no. of people then all searched records are invalid */ + if (counter == total_Count) { + field.dataset.to_create = []; + field.dataset.ids = []; + field.reload_current_view(); + }else if(getresult.people._total == 0 || getresult.people._count == 0){ + field.dataset.ids = self.totalids; + field.reload_current_view(); + } + }); + } + /* For People Set value of child_ids field */ + else if (!flag && linkedinrecord.formattedName) { + field.set_value(false); + field.set({'invisible':true}); + } + /* For Contact of company Set value of child_ids field */ + else { + tempdata[f] = false; + } + } + else { + (flag == 1) ? tempdata[f] = false : field.set_value(false); + } + field._dirty_flag = true; + field.on('changed_value', self, function() { + if (!flag) { + self.view.do_onchange(field); + self.view.on_form_changed(true); + self.view.do_notify_change(); + } + }); + }); + if (!flag) { + this.removeTemplate(); + if (linkedinrecord.publicProfileUrl) { + this.setTemplate( linkedinrecord.publicProfileUrl , false ); + } + if (linkedinrecord.twitterId) { + this.setTemplate( false , linkedinrecord.twitterId ); + } + if (linkedinrecord.twitterAccounts && linkedinrecord.twitterAccounts._total >= 1) { + this.setTemplate( false , linkedinrecord.twitterAccounts.values[0].providerAccountName ); + } + } + if (flag && temp_data == 0) { + self.set_o2mdata(tempdata, mainfield); + } + }, + /* Update existing value of child_ids field */ + set_childids: function( ids ) { + var self = this; + _(ids).each(function(i){ + self.view.fields['child_ids'].dataset.set_ids(self.view.fields['child_ids'].dataset.ids.concat([i])); + self.view.fields['child_ids'].dataset.write(i, {"parent_id":false}, {}); + }); + }, + /* Set/create o2m contacts of child_ids field */ + set_o2mdata: function(data,field){ + var self = this; + self.o2m_count++; + field.dataset.create(data).then( function(r) { + self.totalids.push(r.result); + field.dataset.set_ids(field.dataset.ids.concat([r.result])); + field.dataset.on_change(); + }).then(); + field.dataset.ids = self.totalids; + field.reload_current_view(); + if (self.t_count == self.o2m_count) { + self.$element.find('#loader').hide(); + //$('.linkedin_icon').css('display', 'block'); + if(this.view.fields['linkedin_id']){ + if(this.view.datarecord['linkedin_id']){ + this.$element.find('#linkedindefault').hide(); + this.$element.find('#linkedinrecord').show(); + }else{ + this.$element.find('#linkedinrecord').hide(); + this.$element.find('#linkedindefault').show(); + } + } + } + }, + /* Name of Searched Linkedin Record is valid or Not */ + validName: function(fname, lname){ + if ((fname == "Private" || fname == "private") || (lname == "Private" || lname == "private") || (fname == "" && lname == "")) { + return true; + } else { + return false; + } + } + }); +}; +// vim:et fdc=0 fdl=0: diff --git a/addons/web_linkedin/static/src/xml/linkedin.xml b/addons/web_linkedin/static/src/xml/linkedin.xml new file mode 100644 index 00000000000..9321e54787d --- /dev/null +++ b/addons/web_linkedin/static/src/xml/linkedin.xml @@ -0,0 +1,124 @@ + + + + + + + + + + +
+ + +
+ + + Search on LinkedIn + Search on LinkedIn + + + +
+
+
+ + + + + View profile on LinkedIn + + + + + + + + Follow + + + + +
Record Not Found.
+
+ +
+ +
+
+ + + + + + + +
+ + +
    +
  • + + + + + +
    + + + + + + + +
    + +
    +
  • +
+ + +
+
+
\ No newline at end of file diff --git a/addons/web_linkedin/web_linkedin.py b/addons/web_linkedin/web_linkedin.py new file mode 100644 index 00000000000..77327b92bde --- /dev/null +++ b/addons/web_linkedin/web_linkedin.py @@ -0,0 +1,72 @@ +# -*- 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 +import urllib2 +import xmlrpclib +import zlib + +from web import common +openerpweb = common.http + +from osv import fields, osv + +class company(osv.osv): + _inherit = 'res.company' + _columns = { + 'default_linkedin_api_key': fields.char('LinkedIn API key', size=128), + } + +company() + +class res_partner(osv.osv): + _inherit = 'res.partner' + + _columns = { + 'linkedin_id': fields.char('Linkedin Id', size=64), + 'twitter_id': fields.char('Twitter', size=128), + 'profile_id': fields.char('Profile URL', size=240), + } + + def fields_view_get(self, cr, user, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): + company_obj = self.pool.get('res.company') + res = super(res_partner, self).fields_view_get(cr, user, view_id, view_type, context, toolbar=toolbar, submenu=submenu) + company_id = company_obj._company_default_get(cr, user, 'res.users', context=context) + linkedin_api_key = company_obj.browse(cr, user, company_id, context=context).default_linkedin_api_key + fields = res['fields'] + if fields.get('name'): + ctx = fields.get('name').get('context') + if ctx is None: + ctx = {} + ctx.update({'api_key': linkedin_api_key}) + fields.get('name')['context'] = ctx + return res + +res_partner() + +class Binary(openerpweb.Controller): + _cp_path = "/web_linkedin/binary" + + @openerpweb.jsonrequest + def url2binary(self, req,url): + bfile = urllib2.urlopen(url) + return base64.b64encode(bfile.read()) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: