@ -0,0 +1,41 @@ |
|||||
|
========================================== |
||||
|
Basic HR-LinkedIn Connector v10 |
||||
|
========================================== |
||||
|
|
||||
|
The module integrates LinkedIn with Odoo HR Recruitment. |
||||
|
* Share Job Opening Posts With LinkedIn Page. |
||||
|
* Automate Odoo HRMS with LinkedIn. |
||||
|
|
||||
|
|
||||
|
========================================== |
||||
|
Advanced HR-LinkedIn Connector v10 |
||||
|
========================================== |
||||
|
|
||||
|
The module integrates LinkedIn with Odoo HR Recruitment. |
||||
|
* Share Job Opening Posts With LinkedIn Page. |
||||
|
* Retrieve Post Comments and Likes. |
||||
|
* Retrieve Candidates Profile Data From LinkedIn. |
||||
|
* Profile URL of Candidates. |
||||
|
* Automate Odoo HRMS with LinkedIn. |
||||
|
|
||||
|
|
||||
|
Contributor |
||||
|
----------- |
||||
|
* `Nilmar Shereef <https://twitter.com/nilmarshereef>`__ |
||||
|
|
||||
|
Company |
||||
|
------- |
||||
|
* `Cybrosys Technologies <https://cybrosys.com/>`__ |
||||
|
|
||||
|
Contact |
||||
|
------- |
||||
|
* Mail Contact : odoo@cybrosys.com |
||||
|
* Mail Contact : shereef@cybrosys.in |
||||
|
* Mail Contact : info@cybrosys.com |
||||
|
|
||||
|
Further information |
||||
|
=================== |
||||
|
HTML Description: `<static/description/index.html>`__ |
||||
|
Technical instructions: `<doc.requirement.txt>`__ |
||||
|
|
||||
|
Tested on Odoo 10.0 ffba5c688ff74a0630f9f70be1d7760a43a7deba |
@ -0,0 +1,24 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Author: Nilmar Shereef (<shereef@cybrosys.in>) |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
from . import models |
||||
|
|
@ -0,0 +1,48 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Author: Nilmar Shereef (<shereef@cybrosys.in>) |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
{ |
||||
|
'name': 'HR-LinkedIn Integration', |
||||
|
'summary': "Integrates LinkedIn with HR Recruitment", |
||||
|
'description': "Basic module for LnkedIn-HR Recruitment connector", |
||||
|
'category': 'Generic Modules/Human Resources', |
||||
|
'version': "10.0.1.0.0", |
||||
|
'depends': ['hr_recruitment', 'auth_oauth'], |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'website': "https://www.cybrosys.com", |
||||
|
'data': [ |
||||
|
'data/auth_linkedin_data.xml', |
||||
|
'views/recruitment_config_settings.xml', |
||||
|
'views/hr_job_linkedin.xml', |
||||
|
'views/oauth_view.xml', |
||||
|
], |
||||
|
'external_dependencies': |
||||
|
{ |
||||
|
'python': ['mechanize', 'linkedin'], |
||||
|
}, |
||||
|
'images': ['static/description/banner.jpg'], |
||||
|
'license': 'AGPL-3', |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': False, |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data noupdate="1"> |
||||
|
<record id="provider_linkedin" model="auth.oauth.provider"> |
||||
|
<field name="name">LinkedIn</field> |
||||
|
<field name="auth_endpoint">https://www.linkedin.com/oauth/v2/authorization</field> |
||||
|
<field name="scope">r_basicprofile r_emailaddress w_share</field> |
||||
|
<field name="validation_endpoint">https://api.linkedin.com/v1/people/~</field> |
||||
|
<field name="data_endpoint">https://api.linkedin.com/v1/people/~</field> |
||||
|
<field name="css_class">fa fa-linkedin-square</field> |
||||
|
<field name="body">Share post with LinkedIn</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,5 @@ |
|||||
|
Odoo integration module "hr_linkedin_recruitment" depends on the several external python package. |
||||
|
Please ensure that listed packaged has installed in your system: |
||||
|
|
||||
|
* linkedin |
||||
|
* mechanize |
@ -0,0 +1,26 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Author: Nilmar Shereef (<shereef@cybrosys.in>) |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
from . import mechanize_op |
||||
|
from . import recruitment_config |
||||
|
from . import hr_job |
||||
|
from . import auth_outh |
@ -0,0 +1,33 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Author: Nilmar Shereef (<shereef@cybrosys.in>) |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
from odoo import models, fields, api |
||||
|
|
||||
|
|
||||
|
class OAuthProviderLinkedin(models.Model): |
||||
|
|
||||
|
_inherit = 'auth.oauth.provider' |
||||
|
|
||||
|
""" Adding client_secret field because some apps likes twitter, |
||||
|
linkedIn are using this value for its API operations """ |
||||
|
|
||||
|
client_secret = fields.Char(string='Client Secret', help="Only need LinkedIn, Twitter etc..") |
@ -0,0 +1,126 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Author: Nilmar Shereef (<shereef@cybrosys.in>) |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
try: |
||||
|
import mechanize |
||||
|
from linkedin import linkedin |
||||
|
|
||||
|
except ImportError: |
||||
|
_logger.error('Odoo module hr_linkedin_recruitment depends on the several external python package' |
||||
|
'Please read the doc/requirement.txt file inside the module.') |
||||
|
|
||||
|
import requests |
||||
|
import json |
||||
|
import urlparse |
||||
|
from odoo import models, fields, api, _ |
||||
|
from odoo.exceptions import ValidationError |
||||
|
from mechanize_op import MechanizeRedirectHandler |
||||
|
|
||||
|
|
||||
|
class HrJobShare(models.Model): |
||||
|
_inherit = 'hr.job' |
||||
|
|
||||
|
update_key = fields.Char(string='Update Key', readonly=True) |
||||
|
|
||||
|
@api.multi |
||||
|
def share_linkedin(self): |
||||
|
""" Button function for sharing post """ |
||||
|
credential_dict = self.get_authorize() |
||||
|
access_token = credential_dict['access_token'] |
||||
|
li_credential = credential_dict['li_credential'] |
||||
|
|
||||
|
share_data = { |
||||
|
"visibility": {"code": "anyone"}, |
||||
|
"comment": self.description |
||||
|
} |
||||
|
|
||||
|
# URLS |
||||
|
has_access_url = 'https://api.linkedin.com/v1/companies/%s/relation-to-viewer/is-company-share-enabled?format=json'%(li_credential['page_id']) |
||||
|
page_share_url = 'https://api.linkedin.com/v1/companies/%s/shares?format=json'%(li_credential['page_id']) |
||||
|
|
||||
|
response = self.has_acces_request('GET', has_access_url, access_token) |
||||
|
access_response_text = response.json() |
||||
|
if access_response_text: |
||||
|
response = self.share_request('POST', page_share_url, access_token, data=json.dumps(share_data)) |
||||
|
share_response_text = response.json() |
||||
|
share_response_code = response.status_code |
||||
|
if share_response_code == 201: |
||||
|
self.update_key = share_response_text['updateKey'] |
||||
|
|
||||
|
|
||||
|
def share_request(self, method, page_share_url, access_token, data): |
||||
|
""" Function will return UPDATED KEY , [201] if sharing is OK """ |
||||
|
headers = {'x-li-format': 'json', 'Content-Type': 'application/json'} |
||||
|
params = {} |
||||
|
params.update({'oauth2_access_token': access_token}) |
||||
|
kw = dict(data=data, params=params, headers=headers, timeout=60) |
||||
|
req_response = requests.request(method.upper(), page_share_url, **kw) |
||||
|
return req_response |
||||
|
|
||||
|
def get_authorize(self): |
||||
|
""" Supporting function for authenticating operations """ |
||||
|
li_credential = {} |
||||
|
linkedin_auth_provider = self.env.ref('hr_linkedin_recruitment.provider_linkedin') |
||||
|
if linkedin_auth_provider.client_id and linkedin_auth_provider.client_secret: |
||||
|
li_credential['api_key'] = linkedin_auth_provider.client_id |
||||
|
li_credential['secret_key'] = linkedin_auth_provider.client_secret |
||||
|
else: |
||||
|
raise ValidationError(_('LinkedIn Access Credentials are empty.!\n' |
||||
|
'Please fill up in Auth Provider form.')) |
||||
|
|
||||
|
if self.env['ir.values'].get_default('hr.recruitment.config.settings', 'company_page_id'): |
||||
|
li_credential['page_id'] = self.env['ir.values'].get_default('hr.recruitment.config.settings', |
||||
|
'company_page_id') |
||||
|
else: |
||||
|
raise exceptions.Warning(_('Please fill up company page ID in LinkedIn Credential settings.')) |
||||
|
if self.env['ir.values'].get_default('hr.recruitment.config.settings', 'li_username'): |
||||
|
li_credential['un'] = self.env['ir.values'].get_default('hr.recruitment.config.settings', 'li_username') |
||||
|
else: |
||||
|
raise exceptions.Warning(_('Please fill up username in LinkedIn Credential settings.')) |
||||
|
if self.env['ir.values'].get_default('hr.recruitment.config.settings', 'li_password'): |
||||
|
li_credential['pw'] = self.env['ir.values'].get_default('hr.recruitment.config.settings', 'li_password') |
||||
|
else: |
||||
|
raise exceptions.Warning(_('Please fill up password in LinkedIn Credential settings.')) |
||||
|
|
||||
|
# Browser Data Posting And Signing |
||||
|
br = mechanize.Browser() |
||||
|
br.set_cookiejar(mechanize.CookieJar()) |
||||
|
br.handler_classes['_redirect'] = MechanizeRedirectHandler |
||||
|
br.set_handle_redirect(True) |
||||
|
br.set_handle_robots(False) |
||||
|
return_uri = 'http://0.0.0.0:8010' |
||||
|
li_permissions = ['r_basicprofile', 'r_emailaddress', 'w_share', 'rw_company_admin'] |
||||
|
auth = linkedin.LinkedInAuthentication(li_credential['api_key'], |
||||
|
li_credential['secret_key'], |
||||
|
return_uri, |
||||
|
li_permissions) |
||||
|
br.open(auth.authorization_url) |
||||
|
br.select_form(nr=0) |
||||
|
|
||||
|
br.form['session_key'] = li_credential['un'] |
||||
|
br.form['session_password'] = li_credential['pw'] |
||||
|
r = br.submit() |
||||
|
auth.authorization_code = urlparse.parse_qs(urlparse.urlsplit(r.geturl()).query)['code'] |
||||
|
li_suit_credent = {} |
||||
|
li_suit_credent['access_token'] = str(auth.get_access_token().access_token) |
||||
|
li_suit_credent['li_credential'] = li_credential |
||||
|
return li_suit_credent |
@ -0,0 +1,70 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Author: Nilmar Shereef (<shereef@cybrosys.in>) |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
try: |
||||
|
import mechanize |
||||
|
except ImportError: |
||||
|
_logger.error('Odoo module hr_linkedin_recruitment depends on the several external python package' |
||||
|
'Please read the doc/requirement.txt file inside the module.') |
||||
|
import re |
||||
|
from mechanize import _response |
||||
|
from mechanize import _rfc3986 |
||||
|
|
||||
|
|
||||
|
class MechanizeRedirectHandler(mechanize.HTTPRedirectHandler): |
||||
|
def http_error_302(self, req, fp, code, msg, headers): |
||||
|
# Code from mechanize._urllib2_fork.HTTPRedirectHandler: |
||||
|
if 'location' in headers: |
||||
|
newurl = headers.getheaders('location')[0] |
||||
|
elif 'uri' in headers: |
||||
|
newurl = headers.getheaders('uri')[0] |
||||
|
else: |
||||
|
return |
||||
|
newurl = _rfc3986.clean_url(newurl, "latin-1") |
||||
|
newurl = _rfc3986.urljoin(req.get_full_url(), newurl) |
||||
|
|
||||
|
new = self.redirect_request(req, fp, code, msg, headers, newurl) |
||||
|
if new is None: |
||||
|
return |
||||
|
|
||||
|
if hasattr(req, 'redirect_dict'): |
||||
|
visited = new.redirect_dict = req.redirect_dict |
||||
|
if (visited.get(newurl, 0) >= self.max_repeats or |
||||
|
len(visited) >= self.max_redirections): |
||||
|
raise HTTPError(req.get_full_url(), code, |
||||
|
self.inf_msg + msg, headers, fp) |
||||
|
else: |
||||
|
visited = new.redirect_dict = req.redirect_dict = {} |
||||
|
visited[newurl] = visited.get(newurl, 0) + 1 |
||||
|
|
||||
|
fp.read() |
||||
|
fp.close() |
||||
|
|
||||
|
# If the redirected URL doesn't match |
||||
|
new_url = new.get_full_url() |
||||
|
if not re.search('^http(?:s)?\:\/\/.*www\.linkedin\.com', new_url): |
||||
|
return _response.make_response('', headers.items(), new_url, 200, 'OK') |
||||
|
else: |
||||
|
return self.parent.open(new) |
||||
|
|
||||
|
http_error_301 = http_error_303 = http_error_307 = http_error_302 |
||||
|
http_error_refresh = http_error_302 |
@ -0,0 +1,53 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Author: Nilmar Shereef (<shereef@cybrosys.in>) |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# |
||||
|
# This program is free software: you can modify |
||||
|
# it under the terms of the GNU Affero General Public License (AGPL) 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 <https://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
from odoo import models, fields, api |
||||
|
|
||||
|
|
||||
|
class RecruitmentSettings(models.TransientModel): |
||||
|
_inherit = 'hr.recruitment.config.settings' |
||||
|
|
||||
|
company_page_id = fields.Char(string="Company Page ID", help="") |
||||
|
li_username = fields.Char(string="User Name", help="") |
||||
|
li_password = fields.Char(string="Password", help="") |
||||
|
|
||||
|
|
||||
|
@api.multi |
||||
|
def set_linkedin_page_id(self): |
||||
|
""" Set function for LinkedIn credentials """ |
||||
|
return self.env['ir.values'].sudo().set_default( |
||||
|
'hr.recruitment.config.settings', 'company_page_id', self.company_page_id) |
||||
|
|
||||
|
@api.multi |
||||
|
def set_linkedin_username(self): |
||||
|
""" Set function for LinkedIn credentials """ |
||||
|
return self.env['ir.values'].sudo().set_default( |
||||
|
'hr.recruitment.config.settings', 'li_username', self.li_username) |
||||
|
|
||||
|
@api.multi |
||||
|
def set_linkedin_pw(self): |
||||
|
""" Set function for LinkedIn credentials """ |
||||
|
return self.env['ir.values'].sudo().set_default( |
||||
|
'hr.recruitment.config.settings', 'li_password', self.li_password) |
||||
|
|
||||
|
|
||||
|
|
After Width: | Height: | Size: 148 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 33 KiB |
@ -0,0 +1,125 @@ |
|||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h2 class="oe_slogan"> HR-LinkedIn Connector </h2> |
||||
|
<h4 class="oe_slogan"><a href="https://www.cybrosys.com/">Author: Cybrosys Technologies</a></h4> |
||||
|
<h5 class="oe_slogan"><a href="https://www.cybrosys.com/blog/odoo-linkedin-integration-in-hr/">Blog: LinkedIN-HR Integration </a></h5> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h4><p style="margin-left: 41px;">HR Team, Keep smiling for the below reasons:</p></h4> |
||||
|
<ul> |
||||
|
<li style="list-style:none !important;"><span style="color:green;"> ☺</span> Share Recruitment Post to LInkedIn from Odoo.</li> |
||||
|
<li style="list-style:none !important;"><span style="color:green;"> ☺</span> Enlarge Your Audience Range.</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
|
||||
|
<div class="oe_span6"> |
||||
|
<div class="oe_demo oe_picture oe_screenshot"> |
||||
|
<img src="linkedin_banner.jpg"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="oe_span6"> |
||||
|
<p class="oe_mt32"> |
||||
|
This integration module makes your HR recruitment better. |
||||
|
You can share your posts directly to company page of LinkedIn with authorized login.</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_picture oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h2 class="oe_slogan">Setup a LinkedIn App</h2> |
||||
|
<h3 class="oe_slogan">..with proper information..</h3> |
||||
|
</div> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_demo oe_picture oe_screenshot" style="max-height: 100% !important;"> |
||||
|
<img src="https://cybrosys.com/blog/Uploads/BlogImage/odoo-linkedin-integration-in-hr-3.png"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h2 class="oe_slogan">Fill-up App Credentials </h2> |
||||
|
<h3 class="oe_slogan">..activate developer mode & fill-up API keys..</h3> |
||||
|
</div> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_demo oe_picture oe_screenshot"> |
||||
|
<img src="https://cybrosys.com/blog/Uploads/BlogImage/odoo-linkedin-integration-in-hr-4.png"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h2 class="oe_slogan">Configuration of LinkedIn Account Details</h2> |
||||
|
<h3 class="oe_slogan">..Username, Password and Page ID..</h3> |
||||
|
</div> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_demo oe_picture oe_screenshot"> |
||||
|
<img src="https://cybrosys.com/blog/Uploads/BlogImage/odoo-linkedin-integration-in-hr-2.png"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h2 class="oe_slogan">Share Job Requirement With LinkedIn Page</h2> |
||||
|
<h3 class="oe_slogan">..take right candidates from right place..</h3> |
||||
|
</div> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_demo oe_picture oe_screenshot"> |
||||
|
<img src="https://cybrosys.com/blog/Uploads/BlogImage/odoo-linkedin-integration-in-hr-5.png"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<h2 class="oe_slogan">Shared Post at LinkedIn Page</h2> |
||||
|
<h3 class="oe_slogan">..take right candidates from right place..</h3> |
||||
|
</div> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_demo oe_picture oe_screenshot" style="max-height: 100% !important;"> |
||||
|
<img src="https://cybrosys.com/blog/Uploads/BlogImage/odoo-linkedin-integration-in-hr-6.png"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
||||
|
<div class="oe_slogan" style="margin-top:10px !important;"> |
||||
|
<div> |
||||
|
<a class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
||||
|
href="https://www.cybrosys.com/contact/"><i |
||||
|
class="fa fa-phone"></i> Contact Us </a> |
||||
|
<a |
||||
|
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
||||
|
href="https://www.cybrosys.com/odoo-customization-and-installation/"><i |
||||
|
class="fa fa-check-square"></i> Request Customization </a> |
||||
|
<a |
||||
|
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
||||
|
href="https://apps.odoo.com/apps/modules/browse?author=Cybrosys%20Techno%20Solutions"><i |
||||
|
class="fa fa-suitcase"></i> Other Cybro Apps</a> |
||||
|
</div> |
||||
|
<br> |
||||
|
<a href="https://www.cybrosys.com/odoo-customization-and-installation/"> |
||||
|
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
||||
|
</a> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
|
||||
|
|
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 47 KiB |
@ -0,0 +1,19 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<!-- job Form View --> |
||||
|
<record id="hr_job_linkedin_form" model="ir.ui.view"> |
||||
|
<field name="name">hr.job.linkedin.form</field> |
||||
|
<field name="model">hr.job</field> |
||||
|
<field name="inherit_id" ref="hr.view_hr_job_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//button[@name='set_open']" position="after"> |
||||
|
<button name="share_linkedin" string="Share on LinkedIn" type="object" attrs="{'invisible': [('update_key', '!=', False)]}" groups="base.group_user"/> |
||||
|
</xpath> |
||||
|
<xpath expr="//field[@name='description']" position="after"> |
||||
|
<field name="update_key" invisible="True"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,13 @@ |
|||||
|
<?xml version="1.0"?> |
||||
|
<odoo> |
||||
|
<record id="view_auth_oauth_provider_secret_form" model="ir.ui.view"> |
||||
|
<field name="name">auth.oauth.provider.secret.form</field> |
||||
|
<field name="model">auth.oauth.provider</field> |
||||
|
<field name="inherit_id" ref="auth_oauth.view_oauth_provider_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='client_id']" position="after"> |
||||
|
<field name="client_secret"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
</odoo> |
@ -0,0 +1,22 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data> |
||||
|
<!-- Configure Recruitment Settings View --> |
||||
|
<record id="hr_linkedin_recruitment_config" model="ir.ui.view"> |
||||
|
<field name="name">LinkedIn Configure Recruitment</field> |
||||
|
<field name="model">hr.recruitment.config.settings</field> |
||||
|
<field name="inherit_id" ref="hr_recruitment.view_hr_recruitment_configuration"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//group" position="after"> |
||||
|
<group> |
||||
|
<group string="LinkedIn Credentials"> |
||||
|
<field name="company_page_id"/> |
||||
|
<field name="li_username"/> |
||||
|
<field name="li_password" password="True"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
</odoo> |