multicompany - extension: prefix for portal_id
parent
1eed11dce6
commit
cd4a666466
|
|
@ -29,6 +29,7 @@ class Company(models.Model):
|
||||||
|
|
||||||
eori_nr = fields.Char(string='EORI-Nr')
|
eori_nr = fields.Char(string='EORI-Nr')
|
||||||
fax = fields.Char(related='partner_id.fax')
|
fax = fields.Char(related='partner_id.fax')
|
||||||
|
portal_prefix = fields.Char(string='Portal-Prefix')
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def set_company_logo(self, company, logo):
|
def set_company_logo(self, company, logo):
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,9 @@ from odoo.addons.queue_job.job import job
|
||||||
from odoo import tools, api, fields, models, _
|
from odoo import tools, api, fields, models, _
|
||||||
from odoo.exceptions import ValidationError
|
from odoo.exceptions import ValidationError
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
|
|
||||||
|
from email.utils import formataddr
|
||||||
|
|
||||||
import dateutil.parser
|
import dateutil.parser
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
|
@ -71,6 +74,7 @@ class Partner(models.Model):
|
||||||
info_kundennr = fields.Char(string='Info-Kundennr.')
|
info_kundennr = fields.Char(string='Info-Kundennr.')
|
||||||
info_uid = fields.Char(string='Info-UID')
|
info_uid = fields.Char(string='Info-UID')
|
||||||
endkunde = fields.Boolean(string='Endkunde', help='Beschreibt, ob es ein Endkunde ist')
|
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. '
|
portal_pending = fields.Boolean('Erwarte Zuordnung', help='Wird vom Portal bei neuen Unternehmen gesetzt. '
|
||||||
'Sobald das Unternehmen manuell zugewiesen wurde, '
|
'Sobald das Unternehmen manuell zugewiesen wurde, '
|
||||||
'wird das Flag wieder entfernt')
|
'wird das Flag wieder entfernt')
|
||||||
|
|
@ -176,6 +180,48 @@ class Partner(models.Model):
|
||||||
:param vals:
|
:param vals:
|
||||||
:return:
|
: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)
|
self.with_context(sst_1=True).check_not_specified_fields(vals)
|
||||||
vals = self.correct_values(vals)
|
vals = self.correct_values(vals)
|
||||||
if not vals.get('active', False):
|
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)
|
self.with_context(sst_14=True).check_not_specified_fields(vals)
|
||||||
vals = self.correct_values(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
|
return self.create(vals).id
|
||||||
|
|
||||||
@api.model
|
@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)
|
raise ValidationError(_("Der Partner mit der ID %s hat keine Portal-ID") % partner_id.id)
|
||||||
|
|
||||||
pricelist = partner_id.property_product_pricelist
|
pricelist = partner_id.property_product_pricelist
|
||||||
|
lPortal_id = partner_id.commercial_partner_id.portal_id.split('.')[1]
|
||||||
data = {
|
data = {
|
||||||
'customer_id': partner_id.commercial_partner_id.portal_id,
|
'customer_id': lPortal_id,
|
||||||
'pricelist_id': pricelist.id,
|
'pricelist_id': pricelist.id,
|
||||||
'pricelist_name': pricelist.name,
|
'pricelist_name': pricelist.name,
|
||||||
}
|
}
|
||||||
|
|
@ -463,8 +513,12 @@ class Partner(models.Model):
|
||||||
if response.status_code == 428:
|
if response.status_code == 428:
|
||||||
self.env['product.pricelist.item'].job_export_portal_pricelist(pricelist.id)
|
self.env['product.pricelist.item'].job_export_portal_pricelist(pricelist.id)
|
||||||
else:
|
else:
|
||||||
data = response.json()
|
try:
|
||||||
error_string = data.get('errors', [])
|
data = response.json()
|
||||||
|
error_string = data.get('errors', [])
|
||||||
|
except:
|
||||||
|
error_string = response.reason
|
||||||
|
|
||||||
raise ValidationError(_('Rabatt konnte nicht gesetzt werden. '
|
raise ValidationError(_('Rabatt konnte nicht gesetzt werden. '
|
||||||
'Status Code: %s, Reason: %s') % (response.status_code, error_string))
|
'Status Code: %s, Reason: %s') % (response.status_code, error_string))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,10 @@ class SaleOrder(models.Model):
|
||||||
def _compute_quote_name(self):
|
def _compute_quote_name(self):
|
||||||
for record in self:
|
for record in self:
|
||||||
if record.state in ['draft', 'sent']:
|
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:
|
else:
|
||||||
record.quote_name = record.name
|
record.quote_name = record.name
|
||||||
|
|
||||||
|
|
@ -227,6 +230,7 @@ class SaleOrder(models.Model):
|
||||||
:param vals:
|
:param vals:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
# print('1')
|
||||||
if not vals.get('portal_id', False):
|
if not vals.get('portal_id', False):
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_("Der Kunde mit der Portal-ID \'%s\' kann nicht zugeordnet werden") % vals['portal_id'])
|
_("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'])
|
_('Zu dem Kontakt mit der portal-ID %s existiert kein Unternehmen') % vals['portal_id'])
|
||||||
partner = partner.parent_id
|
partner = partner.parent_id
|
||||||
vals['partner_id'] = partner.id
|
vals['partner_id'] = partner.id
|
||||||
|
# print('2')
|
||||||
if not partner:
|
if not partner:
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_("Der Kunde mit der Portal-ID \'%s\' kann nicht zugeordnet werden") % vals['portal_id'])
|
_("Der Kunde mit der Portal-ID \'%s\' kann nicht zugeordnet werden") % vals['portal_id'])
|
||||||
del vals['portal_id']
|
del vals['portal_id']
|
||||||
delivery_partner = self.env['res.partner']
|
delivery_partner = self.env['res.partner']
|
||||||
delivery_vals = {}
|
delivery_vals = {}
|
||||||
|
# print('3')
|
||||||
if vals.get('portal_delivery_id', False):
|
if vals.get('portal_delivery_id', False):
|
||||||
delivery_partner = self.env['res.partner'].search([('portal_id', '=', vals['portal_delivery_id'])])
|
delivery_partner = self.env['res.partner'].search([('portal_id', '=', vals['portal_delivery_id'])])
|
||||||
delivery_vals['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]
|
delivery_vals[key.replace('delivery_', '')] = vals[key]
|
||||||
del vals[key]
|
del vals[key]
|
||||||
|
|
||||||
|
# print('4')
|
||||||
delivery_partner.with_context(delivery_partner=True).check_not_specified_fields(delivery_vals)
|
delivery_partner.with_context(delivery_partner=True).check_not_specified_fields(delivery_vals)
|
||||||
delivery_vals = delivery_partner.correct_values(delivery_vals)
|
delivery_vals = delivery_partner.correct_values(delivery_vals)
|
||||||
delivery_vals['parent_id'] = partner.id
|
delivery_vals['parent_id'] = partner.id
|
||||||
|
|
||||||
if delivery_partner:
|
if delivery_partner:
|
||||||
|
# print('4a')
|
||||||
allowed_update_keys = ['firstname', 'lastname', 'midname', 'email', 'phone']
|
allowed_update_keys = ['firstname', 'lastname', 'midname', 'email', 'phone']
|
||||||
for key in list(delivery_vals.keys()):
|
for key in list(delivery_vals.keys()):
|
||||||
if key not in allowed_update_keys:
|
if key not in allowed_update_keys:
|
||||||
del delivery_vals[key]
|
del delivery_vals[key]
|
||||||
|
# print('4a1')
|
||||||
delivery_partner.write(delivery_vals)
|
delivery_partner.write(delivery_vals)
|
||||||
|
# print('4a2')
|
||||||
else:
|
else:
|
||||||
|
# print('4b')
|
||||||
if not delivery_vals.get('type', False):
|
if not delivery_vals.get('type', False):
|
||||||
delivery_vals['type'] = 'delivery'
|
delivery_vals['type'] = 'delivery'
|
||||||
delivery_vals['property_delivery_carrier_id'] = partner.property_delivery_carrier_id.id
|
delivery_vals['property_delivery_carrier_id'] = partner.property_delivery_carrier_id.id
|
||||||
delivery_partner = delivery_partner.create(delivery_vals)
|
delivery_partner = delivery_partner.create(delivery_vals)
|
||||||
|
|
||||||
|
# print('5')
|
||||||
attachment_vals = vals.pop('attachment_ids', False)
|
attachment_vals = vals.pop('attachment_ids', False)
|
||||||
order_line_vals = vals.get('order_lines', False)
|
order_line_vals = vals.get('order_lines', False)
|
||||||
# if 'attachment_ids' in vals: del vals['attachment_ids']
|
# if 'attachment_ids' in vals: del vals['attachment_ids']
|
||||||
del vals['order_lines']
|
del vals['order_lines']
|
||||||
|
# print('6')
|
||||||
self.check_not_specified_fields(vals)
|
self.check_not_specified_fields(vals)
|
||||||
vals = self.correct_values(vals)
|
vals = self.correct_values(vals)
|
||||||
payment_term = partner.property_payment_term_id
|
payment_term = partner.property_payment_term_id
|
||||||
if partner.retail_partner_id:
|
if partner.retail_partner_id:
|
||||||
payment_term = partner.retail_partner_id.property_payment_term_id
|
payment_term = partner.retail_partner_id.property_payment_term_id
|
||||||
addr = partner.address_get(['delivery', 'invoice'])
|
addr = partner.address_get(['delivery', 'invoice'])
|
||||||
|
# print('7')
|
||||||
vals['partner_invoice_id'] = vals.setdefault('partner_invoice_id', addr['invoice'])
|
vals['partner_invoice_id'] = vals.setdefault('partner_invoice_id', addr['invoice'])
|
||||||
partner_invoice_id = self.env['res.partner'].browse([vals['partner_invoice_id']])
|
partner_invoice_id = self.env['res.partner'].browse([vals['partner_invoice_id']])
|
||||||
fiscal_position_id = False
|
fiscal_position_id = False
|
||||||
|
# print('8')
|
||||||
if partner_invoice_id:
|
if partner_invoice_id:
|
||||||
if partner_invoice_id.property_account_position_id:
|
if partner_invoice_id.property_account_position_id:
|
||||||
fiscal_position_id = partner_invoice_id.property_account_position_id.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,
|
'incoterm': partner.sale_incoterm_id.id,
|
||||||
'carrier_id': delivery_partner.property_delivery_carrier_id.id
|
'carrier_id': delivery_partner.property_delivery_carrier_id.id
|
||||||
})
|
})
|
||||||
|
# print('9')
|
||||||
order_id = self.create(vals)
|
order_id = self.create(vals)
|
||||||
if attachment_vals:
|
if attachment_vals:
|
||||||
order_id.pg_create_sale_order_attachments(attachment_vals)
|
order_id.pg_create_sale_order_attachments(attachment_vals)
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="company_registry" position="after">
|
<field name="company_registry" position="after">
|
||||||
<field name="eori_nr"/>
|
<field name="eori_nr"/>
|
||||||
|
<field name="portal_prefix"/>
|
||||||
</field>
|
</field>
|
||||||
<field name="email" position="before">
|
<field name="email" position="before">
|
||||||
<field name="fax" string="Fax"/>
|
<field name="fax" string="Fax"/>
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@
|
||||||
<field name="info_uid"/>
|
<field name="info_uid"/>
|
||||||
<field name="portal_id"/>
|
<field name="portal_id"/>
|
||||||
<field name="portal_export_pending"/>
|
<field name="portal_export_pending"/>
|
||||||
|
<field name="root"/>
|
||||||
<field name="line_ids" widget="many2many_tags"/>
|
<field name="line_ids" widget="many2many_tags"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,12 @@ class PortalAssignCompany(models.TransientModel):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
portal_url = tools.config.get('portal_url')
|
portal_url = tools.config.get('portal_url')
|
||||||
application_id = tools.config.get('portal_secret')
|
application_id = tools.config.get('portal_secret')
|
||||||
|
try:
|
||||||
|
lPortal_id = portal_id.split('.')[1]
|
||||||
|
except:
|
||||||
|
lPortal_id = portal_id
|
||||||
data = {
|
data = {
|
||||||
'portal_id': portal_id,
|
'portal_id': lPortal_id,
|
||||||
'company_odoo_id': odoo_id
|
'company_odoo_id': odoo_id
|
||||||
}
|
}
|
||||||
response = requests.post(portal_url + '/api/v1/set-odoo-id/?secret=' + application_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.'))
|
raise ValidationError(_('Der Partner konnte nicht gefunden werden.'))
|
||||||
|
|
||||||
# Wichtig hier ist, dass dieser Call vor dem ersten Write stattfindet, da das Portal
|
# 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)
|
self.send_to_portal(partner.portal_id, partner.id)
|
||||||
partner.write({'portal_pending': False, 'active': True})
|
partner.write({'portal_pending': False, 'active': True})
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue