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'}
 |