@ -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> |