91 lines
3.7 KiB
Python
91 lines
3.7 KiB
Python
# Copyright 2018-Today datenpol gmbh (<http://www.datenpol.at>)
|
|
# License OPL-1 or later (https://www.odoo.com/documentation/user/11.0/legal/licenses/licenses.html#licenses).
|
|
import json
|
|
|
|
import requests
|
|
|
|
from odoo import tools, api, fields, models, _
|
|
from odoo.exceptions import ValidationError, UserError
|
|
|
|
|
|
class PortalAssignCompany(models.TransientModel):
|
|
_name = 'portal.assign_company'
|
|
_description = 'Unternehmen zuordnen'
|
|
|
|
main_partner_id = fields.Many2one('res.partner', 'Zugewiesenes Unternehmen', domain=[('is_company', '=', True)])
|
|
|
|
@api.onchange('main_partner_id')
|
|
def _onchange_main_partner_id(self):
|
|
for record in self:
|
|
if record.main_partner_id and record.main_partner_id.portal_id:
|
|
return {
|
|
'warning': {
|
|
'title': _('Warning!'),
|
|
'message': _('Achtung: Das ausgewählte Unternehmen ist bereits mit dem Portal verknüpft. '
|
|
'Wenn Sie das Unternehmen zuweisen, dann könnte es zu Problemen im Portal kommen'),
|
|
}
|
|
}
|
|
|
|
def send_to_portal(self, portal_id, odoo_id):
|
|
"""
|
|
SST-15
|
|
:param portal_id:
|
|
:param odoo_id:
|
|
:return:
|
|
"""
|
|
self.ensure_one()
|
|
portal_url = tools.config.get('portal_url')
|
|
application_id = tools.config.get('portal_secret')
|
|
data = {
|
|
'portal_id': portal_id,
|
|
'company_odoo_id': odoo_id
|
|
}
|
|
response = requests.post(portal_url + '/api/v1/set-odoo-id/?secret=' + application_id,
|
|
data=json.dumps(data))
|
|
if response.status_code != 200:
|
|
error_content = True
|
|
error_msg = ""
|
|
try:
|
|
error_msg = json.loads(response.content.decode())
|
|
except Exception:
|
|
error_content = False
|
|
|
|
if error_content and error_msg.get('errors'):
|
|
raise UserError(_('%s') % (error_msg.get('errors')[0]))
|
|
else:
|
|
raise UserError(_('Die Odoo id konnte für den partner nicht gesetzt werden. '
|
|
'Status Code: %s, Reason: %s') % (response.status_code, response.reason))
|
|
|
|
def button_activate(self):
|
|
self.ensure_one()
|
|
partner = self.env['res.partner'].browse(self.env.context.get('active_ids', []))
|
|
if not partner:
|
|
raise ValidationError(_('Der Partner konnte nicht gefuden werden.'))
|
|
|
|
# Wichtig hier ist, dass dieser Call vor dem ersten Write stattfindet, da das Portal
|
|
# parallel einen Call absetzt, dann dann blockieren würde.
|
|
self.send_to_portal(partner.portal_id, partner.id)
|
|
partner.write({'portal_pending': False, 'active': True})
|
|
|
|
return True
|
|
|
|
def button_assign(self):
|
|
self.ensure_one()
|
|
if self.main_partner_id:
|
|
partner = self.env['res.partner'].browse(self.env.context.get('active_ids', []))
|
|
if not partner:
|
|
raise ValidationError(_('Der Partner konnte nicht gefuden werden.'))
|
|
portal_id = partner.portal_id
|
|
|
|
# Wichtig hier ist, dass dieser Call vor dem ersten Write stattfindet, da das Portal
|
|
# parallel einen Call absetzt, dann dann blockieren würde.
|
|
self.send_to_portal(portal_id, self.main_partner_id.id)
|
|
partner.unlink()
|
|
if not self.main_partner_id.portal_id:
|
|
self.main_partner_id.portal_id = portal_id
|
|
|
|
action = self.env.ref('base.action_partner_form').read()[0]
|
|
action['res_id'] = self.main_partner_id.id
|
|
return action
|
|
return {'type': 'ir.actions.act_window_close'}
|