You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

155 lines
6.5 KiB

# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
import logging
import requests
from werkzeug.urls import url_encode
from werkzeug.urls import url_join
from odoo import models, fields, _
from odoo.exceptions import ValidationError
_logger = logging.getLogger(__name__)
class HrJobShare(models.Model):
"""recruitment of different job positions"""
_inherit = 'hr.job'
update_key = fields.Char(string='Update Key', readonly=True)
access_token = fields.Char(string='Access Token',help='Access token for your linkedin app')
comments = fields.Boolean(default=False,string='Likes Comments',help='Which is used to visible the like comment retrieving button')
like_comment = fields.Boolean(default=False,string='Likes comment',help='Which is used to visible the smart buttons of likes and comments')
post_likes = fields.Integer(string='Likes Count', help="Total Number of likes in the shared post")
post_commands = fields.Integer(string='Comments Count', help="Total Number of Comments in the shared post")
def _get_linkedin_post_redirect_uri(self):
"""finding redirecting url"""
return url_join(self.get_base_url(), '/linkedin/redirect')
def share_linkedin(self):
""" Button function for sharing post """
self.comments = True
linkedin_auth_provider = self.env.ref('hr_linkedin_recruitment.provider_linkedin')
if linkedin_auth_provider.client_id and linkedin_auth_provider.client_secret:
linkedin_client_id = linkedin_auth_provider.client_id
params = {
'response_type': 'code',
'client_id': linkedin_client_id,
'redirect_uri': self._get_linkedin_post_redirect_uri(),
'state': self.id,
'scope': 'r_liteprofile r_emailaddress w_member_social r_1st_connections_size r_ads r_ads_reporting '
'r_basicprofile r_organization_admin r_organization_social rw_ads rw_organization_admin '
'w_member_social w_organization_social',
}
else:
raise ValidationError(_('LinkedIn Access Credentials are empty.!\n'
'Please fill up in Auth Provider form.'))
return {
'type': 'ir.actions.act_url',
'url': 'https://www.linkedin.com/oauth/v2/authorization?%s' % url_encode(params),
'target': 'self'
}
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_urn(self, method, has_access_url, access_token):
""" Function will return TRUE if credentials user has the access to update """
headers = {'x-li-format': 'json', 'Content-Type': 'application/json'}
params = {}
params.update({'oauth2_access_token': access_token})
kw = dict(params=params, headers=headers, timeout=60)
req_response = requests.request(method.upper(), has_access_url, **kw)
return req_response
def user_response_like(self):
"""return the likes"""
return
def likes_comments(self):
"""retrieving total count of likes and comments"""
self.like_comment = True
urn = self.access_token.split('+')[1]
url = "https://api.linkedin.com/rest/socialActions/" + urn
payload = {}
headers = {
'LinkedIn-Version': '202208',
'Authorization': 'Bearer ' + self.access_token.split('+')[0],
}
response = requests.request("GET", url, headers=headers, data=payload)
response_comm_like = response.json()
self.post_likes = response_comm_like['likesSummary']['totalLikes']
self.post_commands = response_comm_like["commentsSummary"]['aggregatedTotalComments']
comment_url = "https://api.linkedin.com/v2/socialActions/" + urn + "/comments"
headers = {
'LinkedIn-Version': '202208',
'Authorization': 'Bearer ' + self.access_token.split('+')[0],
}
response = requests.request("GET", comment_url, headers=headers, data=payload)
response_commets = response.json()
if response_commets["elements"]:
self.env['linkedin.comments'].create({
'linkedin_comments': response_commets["elements"][0]['message']['text'],
})
else:
pass
def user_response_commends(self):
"""return the comments of the shared post"""
return {
'type': 'ir.actions.act_window',
'target': 'current',
'name': _('Linkedin'),
'view_mode': 'tree',
'res_model': 'linkedin.comments',
}
def view_shared_post(self):
"""Direct link for viewing the shared post page in linkedin"""
url = "https://api.linkedin.com/v2/me"
payload = ""
headers = {
'LinkedIn-Version': '202208',
'Authorization': 'Bearer ' + self.access_token.split('+')[0],
}
response = requests.request("GET", url, headers=headers, data=payload)
response_activity = response.json()
activity_urn = response_activity["vanityName"]
return {
'type': 'ir.actions.act_url',
'url': 'https://www.linkedin.com/in/%s' % activity_urn + '/recent-activity/',
'target': 'self'
}