diff --git a/ext/custom-addons/dp_custom/models/res_company.py b/ext/custom-addons/dp_custom/models/res_company.py index 97fd75c6..d99355e1 100644 --- a/ext/custom-addons/dp_custom/models/res_company.py +++ b/ext/custom-addons/dp_custom/models/res_company.py @@ -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): diff --git a/ext/custom-addons/dp_custom/models/res_partner.py b/ext/custom-addons/dp_custom/models/res_partner.py index 35b6b089..4b25d05b 100644 --- a/ext/custom-addons/dp_custom/models/res_partner.py +++ b/ext/custom-addons/dp_custom/models/res_partner.py @@ -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)) diff --git a/ext/custom-addons/dp_custom/models/sale.py b/ext/custom-addons/dp_custom/models/sale.py index 3f56cda0..edb94dd6 100644 --- a/ext/custom-addons/dp_custom/models/sale.py +++ b/ext/custom-addons/dp_custom/models/sale.py @@ -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) diff --git a/ext/custom-addons/dp_custom/views/res_company_views.xml b/ext/custom-addons/dp_custom/views/res_company_views.xml index 6b526078..ba666ce5 100644 --- a/ext/custom-addons/dp_custom/views/res_company_views.xml +++ b/ext/custom-addons/dp_custom/views/res_company_views.xml @@ -8,6 +8,7 @@ + diff --git a/ext/custom-addons/dp_custom/views/res_partner_views.xml b/ext/custom-addons/dp_custom/views/res_partner_views.xml index 0543251c..a33149f7 100644 --- a/ext/custom-addons/dp_custom/views/res_partner_views.xml +++ b/ext/custom-addons/dp_custom/views/res_partner_views.xml @@ -63,6 +63,7 @@ + diff --git a/ext/custom-addons/dp_custom/wizards/portal_assign_company.py b/ext/custom-addons/dp_custom/wizards/portal_assign_company.py index eebf2bb0..359a9aae 100644 --- a/ext/custom-addons/dp_custom/wizards/portal_assign_company.py +++ b/ext/custom-addons/dp_custom/wizards/portal_assign_company.py @@ -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})