multicompany - extension: prefix for portal_id

develop
Andreas Osim 2019-09-30 12:03:25 +02:00
parent 1eed11dce6
commit cd4a666466
6 changed files with 83 additions and 6 deletions

View File

@ -29,6 +29,7 @@ class Company(models.Model):
eori_nr = fields.Char(string='EORI-Nr')
fax = fields.Char(related='partner_id.fax')
portal_prefix = fields.Char(string='Portal-Prefix')
@api.model
def set_company_logo(self, company, logo):

View File

@ -27,6 +27,9 @@ from odoo.addons.queue_job.job import job
from odoo import tools, api, fields, models, _
from odoo.exceptions import ValidationError
from dateutil.relativedelta import relativedelta
from email.utils import formataddr
import dateutil.parser
import datetime
@ -71,6 +74,7 @@ class Partner(models.Model):
info_kundennr = fields.Char(string='Info-Kundennr.')
info_uid = fields.Char(string='Info-UID')
endkunde = fields.Boolean(string='Endkunde', help='Beschreibt, ob es ein Endkunde ist')
root = fields.Boolean(string='Stammfirma', help='Diese Firma ist die Stammfirma des Kunden')
portal_pending = fields.Boolean('Erwarte Zuordnung', help='Wird vom Portal bei neuen Unternehmen gesetzt. '
'Sobald das Unternehmen manuell zugewiesen wurde, '
'wird das Flag wieder entfernt')
@ -176,6 +180,48 @@ class Partner(models.Model):
:param vals:
:return:
"""
# portal_url = tools.config.get('portal_url')
# portal_url = self.env['ir.config_parameter'].sudo().get_param('ribbon.name')
portal_url = self.env['ir.config_parameter'].get_param('ribbon.name')
self.with_context(sst_1=True).check_not_specified_fields(vals)
vals = self.correct_values(vals)
portal_prefix = self.env.user.company_id.portal_prefix
if portal_prefix:
vals['portal_id'] = portal_prefix + '.' + vals['portal_id']
if not vals.get('active', False):
vals['active'] = False
vals['is_company'] = True
vals['portal_pending'] = True
vals['root'] = True
# send mail activity to usergroup(with group 'informieren bei neuem Portalkunden, if new company was created
recordset = self.create(vals)
users = self.env.ref('dp_custom.group_inform_on_new_company').users
for user in users:
values = {
'user_id': user.id,
'date_deadline': fields.Date.today(),
'activity_type_id': self.env.ref('mail.mail_activity_data_todo').id,
'activity_category': 'default',
'res_id': recordset.id,
'res_model': recordset._name,
'res_model_id': self.env.ref('base_partner_sequence.model_res_partner').id,
'summary': 'Es wurde ein neuer Portalkunde angelegt'
}
self.env['mail.activity'].create(values)
return True
@api.model
def portal_create_company____1(self, vals):
"""
SST-01
:param vals:
:return:
"""
self.with_context(sst_1=True).check_not_specified_fields(vals)
vals = self.correct_values(vals)
if not vals.get('active', False):
@ -211,6 +257,9 @@ class Partner(models.Model):
"""
self.with_context(sst_14=True).check_not_specified_fields(vals)
vals = self.correct_values(vals)
portal_prefix = self.env.user.company_id.portal_prefix
if portal_prefix:
vals['portal_id'] = portal_prefix + '.' + vals['portal_id']
return self.create(vals).id
@api.model
@ -449,8 +498,9 @@ class Partner(models.Model):
raise ValidationError(_("Der Partner mit der ID %s hat keine Portal-ID") % partner_id.id)
pricelist = partner_id.property_product_pricelist
lPortal_id = partner_id.commercial_partner_id.portal_id.split('.')[1]
data = {
'customer_id': partner_id.commercial_partner_id.portal_id,
'customer_id': lPortal_id,
'pricelist_id': pricelist.id,
'pricelist_name': pricelist.name,
}
@ -463,8 +513,12 @@ class Partner(models.Model):
if response.status_code == 428:
self.env['product.pricelist.item'].job_export_portal_pricelist(pricelist.id)
else:
data = response.json()
error_string = data.get('errors', [])
try:
data = response.json()
error_string = data.get('errors', [])
except:
error_string = response.reason
raise ValidationError(_('Rabatt konnte nicht gesetzt werden. '
'Status Code: %s, Reason: %s') % (response.status_code, error_string))

View File

@ -163,7 +163,10 @@ class SaleOrder(models.Model):
def _compute_quote_name(self):
for record in self:
if record.state in ['draft', 'sent']:
record.quote_name = record.name.replace('ATOC', 'ATOF')
# record.quote_name = record.name.replace('ATOC', 'ATOF')
prefix = record.name[:3]
newprefix = prefix.replace('OC', 'OF')
record.quote_name = record.name.replace(prefix, newprefix)
else:
record.quote_name = record.name
@ -227,6 +230,7 @@ class SaleOrder(models.Model):
:param vals:
:return:
"""
# print('1')
if not vals.get('portal_id', False):
raise ValidationError(
_("Der Kunde mit der Portal-ID \'%s\' kann nicht zugeordnet werden") % vals['portal_id'])
@ -236,12 +240,14 @@ class SaleOrder(models.Model):
_('Zu dem Kontakt mit der portal-ID %s existiert kein Unternehmen') % vals['portal_id'])
partner = partner.parent_id
vals['partner_id'] = partner.id
# print('2')
if not partner:
raise ValidationError(
_("Der Kunde mit der Portal-ID \'%s\' kann nicht zugeordnet werden") % vals['portal_id'])
del vals['portal_id']
delivery_partner = self.env['res.partner']
delivery_vals = {}
# print('3')
if vals.get('portal_delivery_id', False):
delivery_partner = self.env['res.partner'].search([('portal_id', '=', vals['portal_delivery_id'])])
delivery_vals['portal_id'] = vals['portal_delivery_id']
@ -251,35 +257,44 @@ class SaleOrder(models.Model):
delivery_vals[key.replace('delivery_', '')] = vals[key]
del vals[key]
# print('4')
delivery_partner.with_context(delivery_partner=True).check_not_specified_fields(delivery_vals)
delivery_vals = delivery_partner.correct_values(delivery_vals)
delivery_vals['parent_id'] = partner.id
if delivery_partner:
# print('4a')
allowed_update_keys = ['firstname', 'lastname', 'midname', 'email', 'phone']
for key in list(delivery_vals.keys()):
if key not in allowed_update_keys:
del delivery_vals[key]
# print('4a1')
delivery_partner.write(delivery_vals)
# print('4a2')
else:
# print('4b')
if not delivery_vals.get('type', False):
delivery_vals['type'] = 'delivery'
delivery_vals['property_delivery_carrier_id'] = partner.property_delivery_carrier_id.id
delivery_partner = delivery_partner.create(delivery_vals)
# print('5')
attachment_vals = vals.pop('attachment_ids', False)
order_line_vals = vals.get('order_lines', False)
# if 'attachment_ids' in vals: del vals['attachment_ids']
del vals['order_lines']
# print('6')
self.check_not_specified_fields(vals)
vals = self.correct_values(vals)
payment_term = partner.property_payment_term_id
if partner.retail_partner_id:
payment_term = partner.retail_partner_id.property_payment_term_id
addr = partner.address_get(['delivery', 'invoice'])
# print('7')
vals['partner_invoice_id'] = vals.setdefault('partner_invoice_id', addr['invoice'])
partner_invoice_id = self.env['res.partner'].browse([vals['partner_invoice_id']])
fiscal_position_id = False
# print('8')
if partner_invoice_id:
if partner_invoice_id.property_account_position_id:
fiscal_position_id = partner_invoice_id.property_account_position_id.id
@ -293,6 +308,7 @@ class SaleOrder(models.Model):
'incoterm': partner.sale_incoterm_id.id,
'carrier_id': delivery_partner.property_delivery_carrier_id.id
})
# print('9')
order_id = self.create(vals)
if attachment_vals:
order_id.pg_create_sale_order_attachments(attachment_vals)

View File

@ -8,6 +8,7 @@
<field name="arch" type="xml">
<field name="company_registry" position="after">
<field name="eori_nr"/>
<field name="portal_prefix"/>
</field>
<field name="email" position="before">
<field name="fax" string="Fax"/>

View File

@ -63,6 +63,7 @@
<field name="info_uid"/>
<field name="portal_id"/>
<field name="portal_export_pending"/>
<field name="root"/>
<field name="line_ids" widget="many2many_tags"/>
</group>
</group>

View File

@ -36,8 +36,12 @@ class PortalAssignCompany(models.TransientModel):
self.ensure_one()
portal_url = tools.config.get('portal_url')
application_id = tools.config.get('portal_secret')
try:
lPortal_id = portal_id.split('.')[1]
except:
lPortal_id = portal_id
data = {
'portal_id': portal_id,
'portal_id': lPortal_id,
'company_odoo_id': odoo_id
}
response = requests.post(portal_url + '/api/v1/set-odoo-id/?secret=' + application_id,
@ -63,7 +67,7 @@ class PortalAssignCompany(models.TransientModel):
raise ValidationError(_('Der Partner konnte nicht gefunden werden.'))
# Wichtig hier ist, dass dieser Call vor dem ersten Write stattfindet, da das Portal
# parallel einen Call absetzt, dann dann blockieren würde.
# parallel einen Call absetzt, der dann blockieren würde.
self.send_to_portal(partner.portal_id, partner.id)
partner.write({'portal_pending': False, 'active': True})