Fall 5405: CR1 - Neue SST-14 / 15 + Anpassungen SST-01/03
parent
998b1cd90a
commit
834ee07c69
|
|
@ -12,9 +12,8 @@ odoo = odoorpc.ODOO(host, port=port)
|
|||
odoo.login(db, user, pw)
|
||||
|
||||
values = {
|
||||
"firstname": "Max",
|
||||
"midname": "middle",
|
||||
"lastname": "Musterman",
|
||||
"name": "Bier AG",
|
||||
"name2": "Bier2 AG",
|
||||
"street": "Strasse 11",
|
||||
"street2": "Zusatz 1",
|
||||
"zip": "1145",
|
||||
|
|
@ -25,21 +24,18 @@ values = {
|
|||
"mobile": "+43 677 564564",
|
||||
"endkunde": True,
|
||||
"portal_id": "9",
|
||||
"company": "Bier AG",
|
||||
"info_uid": "habe keine",
|
||||
"info_kundennr": "K1234",
|
||||
"email": "max@musterman.at",
|
||||
"line_ids": ["12345"],
|
||||
"line_ids": ["0000"],
|
||||
"opt_out": True,
|
||||
"lang": "de",
|
||||
"collective_bill": False,
|
||||
"retailer": True,
|
||||
"incoterm": "EXW",
|
||||
}
|
||||
|
||||
res_partner_obj = odoo.env['res.partner']
|
||||
|
||||
|
||||
result = res_partner_obj.portal_create_partner(values)
|
||||
result = res_partner_obj.portal_create_company(values)
|
||||
|
||||
print(result)
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
import odoorpc
|
||||
|
||||
host = 'localhost'
|
||||
port = 8080
|
||||
db = 'tz-austria_1'
|
||||
user = 'tz-admin'
|
||||
pw = 'x'
|
||||
|
||||
odoo = odoorpc.ODOO(host, port=port)
|
||||
odoo.login(db, user, pw)
|
||||
|
||||
values = {
|
||||
"firstname": "Max2",
|
||||
"lastname": "Mustemann2",
|
||||
"midname": "M.",
|
||||
"email": "max@musterman.at",
|
||||
"company_odoo_id": "6056",
|
||||
"portal_id": "5556705",
|
||||
"opt_out": True,
|
||||
}
|
||||
|
||||
res_partner_obj = odoo.env['res.partner']
|
||||
|
||||
|
||||
result = res_partner_obj.portal_create_contact(values)
|
||||
|
||||
print(result)
|
||||
|
|
@ -40,6 +40,7 @@
|
|||
'data': [
|
||||
'views/commission_account.xml',
|
||||
'wizards/wizard_confirm_production.xml',
|
||||
'wizards/portal_assign_company.xml',
|
||||
'security/security.xml',
|
||||
'data/dp_custom_data.xml',
|
||||
'data/glaser_company_data.xml',
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ class AccountInvoiceLine(models.Model):
|
|||
_inherit = 'account.invoice.line'
|
||||
|
||||
intrastat_id = fields.Many2one(comodel_name='report.intrastat.code', string='Intrastat Code',
|
||||
compute="_compute_intrastat_id", inverse='_set_intrastat_id')
|
||||
compute="_compute_intrastat_id", inverse='_inverse_intrastat_id')
|
||||
lot_id = fields.Many2one(comodel_name='stock.production.lot', string='Lot')
|
||||
weight = fields.Float(string='Gewicht', compute='_compute_weight')
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ class AccountInvoiceLine(models.Model):
|
|||
for record in self:
|
||||
record.intrastat_id = record.lot_id.intrastat_id.id or record.product_id.intrastat_id.id
|
||||
|
||||
def _set_intrastat_id(self):
|
||||
def _inverse_intrastat_id(self):
|
||||
for record in self:
|
||||
if record.lot_id:
|
||||
record.lot_id.intrastat_id = record.intrastat_id.id
|
||||
|
|
|
|||
|
|
@ -44,4 +44,4 @@ class AbstractHelper(models.AbstractModel):
|
|||
@api.model
|
||||
def _get_specified_fields(self):
|
||||
raise ValidationError(
|
||||
_('Method \'%s\' isn\'t Implemented in model \'%s\'' % (self._get_specified_fields.__name__, self._name)))
|
||||
_('Method \'%s\' isn\'t Implemented in model \'%s\'') % (self._get_specified_fields.__name__, self._name))
|
||||
|
|
|
|||
|
|
@ -61,6 +61,11 @@ class ProductTemplate(models.Model):
|
|||
|
||||
@api.model
|
||||
def create_product(self, vals):
|
||||
"""
|
||||
SST-10
|
||||
:param vals:
|
||||
:return:
|
||||
"""
|
||||
vals = self.remove_not_specified_fields(vals)
|
||||
vals = self.correct_values(vals)
|
||||
product_template = self.with_context(active_test=False).search([('default_code', '=', vals['default_code'])])
|
||||
|
|
@ -78,7 +83,7 @@ class ProductTemplate(models.Model):
|
|||
vals['xcat_id'] = xcat.id
|
||||
else:
|
||||
raise ValidationError(
|
||||
_("X-Kategorie \'%s\' kann nicht zugeordnet werden" % vals['xcat_id']))
|
||||
_("X-Kategorie \'%s\' kann nicht zugeordnet werden") % vals['xcat_id'])
|
||||
|
||||
if vals.get('categ_id', False):
|
||||
categ_id = self.env['product.category'].search([('code', '=', vals['categ_id'])])
|
||||
|
|
@ -86,7 +91,7 @@ class ProductTemplate(models.Model):
|
|||
vals['categ_id'] = categ_id.id
|
||||
else:
|
||||
raise ValidationError(
|
||||
_("Kategorie \'%s\' kann nicht zugeordnet werden" % vals['categ_id']))
|
||||
_("Kategorie \'%s\' kann nicht zugeordnet werden") % vals['categ_id'])
|
||||
|
||||
if vals.get('material_type_id', False):
|
||||
material_type = self.env['material.type'].search([('name', '=', vals['material_type_id'])])
|
||||
|
|
@ -94,7 +99,7 @@ class ProductTemplate(models.Model):
|
|||
vals['material_type_id'] = material_type.id
|
||||
else:
|
||||
raise ValidationError(
|
||||
_("Materialtyp \'%s\' kann nicht zugeordnet werden" % vals['material_type_id']))
|
||||
_("Materialtyp \'%s\' kann nicht zugeordnet werden") % vals['material_type_id'])
|
||||
|
||||
if vals.get('intrastat_id', False):
|
||||
intrastat = self.env['report.intrastat.code'].search([('name', '=', vals['intrastat_id'])])
|
||||
|
|
@ -102,7 +107,7 @@ class ProductTemplate(models.Model):
|
|||
vals['intrastat_id'] = intrastat.id
|
||||
else:
|
||||
raise ValidationError(
|
||||
_("Intrastat-Code \'%s\' kann nicht zugeordnet werden" % vals['intrastat_id']))
|
||||
_("Intrastat-Code \'%s\' kann nicht zugeordnet werden") % vals['intrastat_id'])
|
||||
|
||||
if vals.get('assembly_line_ids', False):
|
||||
assembly_line_ids = []
|
||||
|
|
@ -112,7 +117,7 @@ class ProductTemplate(models.Model):
|
|||
assembly_line_ids.append(assembly_line.id)
|
||||
else:
|
||||
raise ValidationError(
|
||||
_("Produktionslinie \'%s\' kann nicht zugeordnet werden" % assembly_line_code))
|
||||
_("Produktionslinie \'%s\' kann nicht zugeordnet werden") % assembly_line_code)
|
||||
vals['assembly_line_ids'] = [(6, 0, assembly_line_ids)]
|
||||
|
||||
return vals
|
||||
|
|
|
|||
|
|
@ -19,14 +19,14 @@
|
|||
#
|
||||
##############################################################################
|
||||
import json
|
||||
|
||||
import requests
|
||||
from odoo.addons.component.core import Component
|
||||
from odoo.addons.queue_job.job import job
|
||||
|
||||
from odoo import tools, api, fields, models, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
from odoo.addons.queue_job.job import job
|
||||
from odoo.addons.component.core import Component
|
||||
|
||||
|
||||
class PartnerEventListener(Component):
|
||||
_name = 'res.partner.listener'
|
||||
|
|
@ -55,10 +55,13 @@ class Partner(models.Model):
|
|||
def _default_country_id(self):
|
||||
return self.env.ref('base.at')
|
||||
|
||||
company = fields.Char(string='Unternehmen')
|
||||
name2 = fields.Char('Unternehmensname 2')
|
||||
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')
|
||||
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')
|
||||
line_ids = fields.Many2many(comodel_name='res.line', string='Produktionslinien')
|
||||
portal_id = fields.Char(string='Portal-ID')
|
||||
partner_sector_id = fields.Many2one(comodel_name='res.partner.sector', string='Branche')
|
||||
|
|
@ -74,35 +77,62 @@ class Partner(models.Model):
|
|||
('portal_id_uniq', 'unique(portal_id)', 'Die Portal-ID muss eindeutig sein')
|
||||
]
|
||||
|
||||
@api.one
|
||||
@api.multi
|
||||
@api.constrains('is_company', 'vat')
|
||||
def _check_unique_vat(self):
|
||||
if not self.vat or (not self.is_company and self.parent_id):
|
||||
return
|
||||
partners = self.search([('is_company', '=', True),
|
||||
('vat', '=', self.vat),
|
||||
('id', '!=', self.id)])
|
||||
if partners:
|
||||
raise ValidationError(_("UID-Exists: Es sind bereits folgende Unternehmen mit der selben USt. ID vorhanden: %s") % [p.name for p in partners])
|
||||
for record in self:
|
||||
if not record.vat or (not record.is_company and record.parent_id):
|
||||
continue
|
||||
partners = self.search([('is_company', '=', True),
|
||||
('vat', '=', self.vat),
|
||||
('id', '!=', self.id)])
|
||||
if partners:
|
||||
raise ValidationError(_("UID-Exists: Es sind bereits folgende Unternehmen mit der selben USt. ID "
|
||||
"vorhanden: %s") % [p.name for p in partners])
|
||||
|
||||
@api.model
|
||||
def portal_create_partner(self, vals):
|
||||
def portal_create_company(self, vals):
|
||||
"""
|
||||
SST-01
|
||||
:param vals:
|
||||
:return:
|
||||
"""
|
||||
vals = self.with_context(sst_1=True).remove_not_specified_fields(vals)
|
||||
vals = self.correct_values(vals)
|
||||
if not vals.get('active', False):
|
||||
vals['active'] = False
|
||||
vals['is_company'] = True
|
||||
vals['portal_pending'] = True
|
||||
self.create(vals)
|
||||
return True
|
||||
|
||||
@api.model
|
||||
def portal_create_contact(self, vals):
|
||||
"""
|
||||
SST-14
|
||||
:param vals:
|
||||
:return:
|
||||
"""
|
||||
vals = self.with_context(sst_14=True).remove_not_specified_fields(vals)
|
||||
vals = self.correct_values(vals)
|
||||
if not vals.get('active', False):
|
||||
vals['active'] = False
|
||||
return self.create(vals).id
|
||||
|
||||
@api.model
|
||||
def pg_create_company(self, vals):
|
||||
"""
|
||||
SST-11
|
||||
:param vals:
|
||||
:return:
|
||||
"""
|
||||
vals = self.with_context(sst_11=True).remove_not_specified_fields(vals)
|
||||
vals = self.correct_values(vals)
|
||||
partner = self.with_context(active_test=False).search([('ref', '=', vals['ref'])])
|
||||
if partner:
|
||||
if not partner.is_company:
|
||||
raise ValidationError(
|
||||
_("Der Partner mit der Internen Referenz '%s' ist kein Unternehmen" % vals['ref']))
|
||||
_("Der Partner mit der Internen Referenz '%s' ist kein Unternehmen") % vals['ref'])
|
||||
partner.write(vals)
|
||||
else:
|
||||
if not vals.get('is_company', False):
|
||||
|
|
@ -120,7 +150,7 @@ class Partner(models.Model):
|
|||
vals['country_id'] = country.id
|
||||
else:
|
||||
raise ValidationError(
|
||||
_("Das Land mit dem ISO-Code \'%s\' kann nicht zugeordnet werden" % vals['country_id']))
|
||||
_("Das Land mit dem ISO-Code \'%s\' kann nicht zugeordnet werden") % vals['country_id'])
|
||||
|
||||
if vals.get('line_ids', False):
|
||||
line_ids = self.env['res.line'].search([('name', 'in', vals['line_ids'])])
|
||||
|
|
@ -128,7 +158,7 @@ class Partner(models.Model):
|
|||
vals['line_ids'] = [(6, 0, line_ids.ids)]
|
||||
else:
|
||||
raise ValidationError(
|
||||
_("Die Produktionslinie mit dem Code \'%s\' kann nicht zugeordnet werden" % vals['line_ids']))
|
||||
_("Die Produktionslinie mit dem Code \'%s\' kann nicht zugeordnet werden") % vals['line_ids'])
|
||||
|
||||
if vals.get('lang', False):
|
||||
temp = vals['lang']
|
||||
|
|
@ -138,7 +168,7 @@ class Partner(models.Model):
|
|||
vals['lang'] = selection[0]
|
||||
break
|
||||
if not vals['lang']:
|
||||
raise ValidationError(_("Die Sprache mit dem Code \'%s\' kann nicht zugeordnet werden" % temp))
|
||||
raise ValidationError(_("Die Sprache mit dem Code \'%s\' kann nicht zugeordnet werden") % temp)
|
||||
|
||||
if vals.get('partner_sector_id', False):
|
||||
branche = self.env['res.partner.sector'].search(
|
||||
|
|
@ -146,7 +176,7 @@ class Partner(models.Model):
|
|||
if branche:
|
||||
vals['partner_sector_id'] = branche.id
|
||||
else:
|
||||
raise ValidationError(_("Die Branche \'%s\' kann nicht zugeordnet werden" % vals['partner_sector_id']))
|
||||
raise ValidationError(_("Die Branche \'%s\' kann nicht zugeordnet werden") % vals['partner_sector_id'])
|
||||
|
||||
if vals.get('property_payment_term_id', False):
|
||||
payment_term = self.env['account.payment.term'].search(
|
||||
|
|
@ -154,8 +184,9 @@ class Partner(models.Model):
|
|||
if payment_term:
|
||||
vals['property_payment_term_id'] = payment_term.id
|
||||
else:
|
||||
raise ValidationError(_("Die Zahlungsbedingung mit dem Code \'%s\' kann nicht zugeordnet werden" % vals[
|
||||
'property_payment_term_id']))
|
||||
raise ValidationError(
|
||||
_("Die Zahlungsbedingung mit dem Code \'%s\' kann nicht zugeordnet werden") % vals[
|
||||
'property_payment_term_id'])
|
||||
|
||||
if vals.get('property_product_pricelist', False):
|
||||
product_pricelist = self.env['product.pricelist'].search(
|
||||
|
|
@ -163,8 +194,8 @@ class Partner(models.Model):
|
|||
if product_pricelist:
|
||||
vals['property_product_pricelist'] = product_pricelist[0].id
|
||||
else:
|
||||
raise ValidationError(_("Die Preisliste mit der Währung \'%s\' kann nicht zugeordnet werden" % vals[
|
||||
'property_product_pricelist']))
|
||||
raise ValidationError(_("Die Preisliste mit der Währung \'%s\' kann nicht zugeordnet werden") % vals[
|
||||
'property_product_pricelist'])
|
||||
|
||||
if vals.get('retail_partner_id', False):
|
||||
retail_partner = self.env['res.partner'].search(
|
||||
|
|
@ -172,8 +203,9 @@ class Partner(models.Model):
|
|||
if retail_partner:
|
||||
vals['retail_partner_id'] = retail_partner.id
|
||||
else:
|
||||
raise ValidationError(_("Der Händler mit der Internen Referenz \'%s\' kann nicht zugeordnet werden" % vals[
|
||||
'retail_partner_id']))
|
||||
raise ValidationError(
|
||||
_("Der Händler mit der Internen Referenz \'%s\' kann nicht zugeordnet werden") % vals[
|
||||
'retail_partner_id'])
|
||||
|
||||
if vals.get('incoterm', False):
|
||||
incoterm = self.env['stock.incoterms'].search(
|
||||
|
|
@ -182,8 +214,24 @@ class Partner(models.Model):
|
|||
vals['sale_incoterm_id'] = incoterm.id
|
||||
del vals['incoterm']
|
||||
else:
|
||||
raise ValidationError(_("Die Lieferbedingung mit dem Code \'%s\' kann nicht zugeordnet werden" % vals[
|
||||
'incoterm']))
|
||||
raise ValidationError(
|
||||
_("Die Lieferbedingung mit dem Code \'%s\' kann nicht zugeordnet werden") % vals['incoterm'])
|
||||
|
||||
if vals.get('company_odoo_id', False):
|
||||
parent_id = self.env['res.partner'].search([('id', '=', vals['company_odoo_id'])])
|
||||
if parent_id:
|
||||
vals['parent_id'] = parent_id.id
|
||||
vals['street'] = parent_id.street
|
||||
vals['street2'] = parent_id.street2
|
||||
vals['city'] = parent_id.city
|
||||
vals['zip'] = parent_id.zip
|
||||
vals['country_id'] = parent_id.country_id.id
|
||||
vals['supplier'] = parent_id.supplier
|
||||
vals['customer'] = parent_id.customer
|
||||
vals['lang'] = parent_id.lang
|
||||
del vals['company_odoo_id']
|
||||
else:
|
||||
raise ValidationError(_("Unternehmen mit Odoo-ID \'%s\' existiert nicht") % vals['company_odoo_id'])
|
||||
|
||||
return vals
|
||||
|
||||
|
|
@ -192,13 +240,14 @@ class Partner(models.Model):
|
|||
common_list = ['street', 'street2', 'zip', 'city', 'country_id', 'fax', 'phone', 'mobile',
|
||||
'endkunde', 'line_ids', 'lang', 'portal_id', 'email', 'opt_out']
|
||||
if self.env.context.get('sst_1', False):
|
||||
common_list.extend(['firstname', 'lastname', 'midname', 'company', 'info_kundennr',
|
||||
'info_uid', 'collective_bill', 'retailer', 'incoterm'])
|
||||
common_list.extend(['name', 'name2', 'info_kundennr', 'info_uid', 'retailer'])
|
||||
return common_list
|
||||
elif self.env.context.get('sst_11', False):
|
||||
common_list.extend(['name', 'ref', 'partner_sector_id', 'comment', 'vat', 'property_payment_term_id',
|
||||
'property_pricelist_id', 'date_vat_check', 'active', 'property_product_pricelist',
|
||||
'retail_partner_id', 'retailer', 'info_uid'])
|
||||
elif self.env.context.get('sst_14', False):
|
||||
common_list.extend(['firstname', 'lastname', 'midname', 'company_odoo_id', 'portal_id'])
|
||||
return common_list
|
||||
else:
|
||||
return super(Partner, self)._get_specified_fields()
|
||||
|
|
@ -215,7 +264,7 @@ class Partner(models.Model):
|
|||
@job
|
||||
def job_export_portal_price(self, partner_id):
|
||||
if not partner_id.portal_id:
|
||||
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
|
||||
data = []
|
||||
for item in pricelist.item_ids:
|
||||
|
|
|
|||
|
|
@ -94,6 +94,13 @@ class SaleOrder(models.Model):
|
|||
|
||||
@api.model
|
||||
def pg_get_orders(self, line, state, limit):
|
||||
"""
|
||||
SST-4
|
||||
:param line:
|
||||
:param state:
|
||||
:param limit:
|
||||
:return:
|
||||
"""
|
||||
line_id = self.env['res.line'].search([('name', '=', line)])
|
||||
orders = self.search([('line_id', '=', line_id.id), ('assembly_state', '=', state)], order='id ASC',
|
||||
limit=limit)
|
||||
|
|
@ -127,13 +134,22 @@ class SaleOrder(models.Model):
|
|||
|
||||
@api.model
|
||||
def pg_create_quotation(self, vals):
|
||||
"""
|
||||
SST-3
|
||||
:param vals:
|
||||
:return:
|
||||
"""
|
||||
if not vals.get('portal_id', False):
|
||||
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'])
|
||||
partner = self.env['res.partner'].search([('portal_id', '=', vals['portal_id'])])
|
||||
if not partner.parent_id:
|
||||
raise ValidationError(
|
||||
_('Zu dem Kontakt mit der portal-ID %s existiert kein Unternehmen') % vals['portal_id'])
|
||||
vals['partner_id'] = partner.parent_id.id
|
||||
if not partner:
|
||||
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'])
|
||||
delivery_partner = self.env['res.partner']
|
||||
delivery_vals = {}
|
||||
if vals.get('portal_delivery_id', False):
|
||||
|
|
@ -236,7 +252,7 @@ class SaleOrder(models.Model):
|
|||
vals['line_id'] = line_id.id
|
||||
else:
|
||||
raise ValidationError(
|
||||
_("Produktionslinie \'%s\' kann nicht zugeordnet werden" % vals['line_id']))
|
||||
_("Produktionslinie \'%s\' kann nicht zugeordnet werden") % vals['line_id'])
|
||||
return vals
|
||||
|
||||
@api.model
|
||||
|
|
@ -351,7 +367,7 @@ class SaleOrderLine(models.Model):
|
|||
vals['product_id'] = product_id.id
|
||||
else:
|
||||
raise ValidationError(
|
||||
_("Produkt \'%s\' kann nicht zugeordnet werden" % vals['product_id']))
|
||||
_("Produkt \'%s\' kann nicht zugeordnet werden") % vals['product_id'])
|
||||
return vals
|
||||
|
||||
@api.multi
|
||||
|
|
|
|||
|
|
@ -1,35 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_partner_address_form" model="ir.ui.view">
|
||||
<field name="name">view_partner_address_form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_address_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="street" position="before">
|
||||
<field name="company"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_partner_form" model="ir.ui.view">
|
||||
<field name="name">view_partner_form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/form/sheet/group/group[1]/label" position="before">
|
||||
<field name="company"/>
|
||||
<xpath expr="//sheet" position="before">
|
||||
<header>
|
||||
<button name="%(portal_assign_company_action)d" string="Unternehmen zuordnen" type="action"
|
||||
class="btn-danger" attrs="{'invisible':[('portal_pending','=',False)]}"/>
|
||||
</header>
|
||||
</xpath>
|
||||
<xpath expr="//h1" position="after">
|
||||
<h3>
|
||||
<field name="name2" attrs="{'invisible': [('is_company', '=', False)]}"/>
|
||||
</h3>
|
||||
</xpath>
|
||||
|
||||
<field name="opt_out" position="attributes">
|
||||
<attribute name="groups"/>
|
||||
</field>
|
||||
|
||||
<xpath expr="//field[@name='child_ids']/form/sheet/group/group[1]/label"
|
||||
position="before">
|
||||
<field name="company"/>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//page[@name='internal_notes']/field[@name='comment']" position="replace">
|
||||
<group name="description">
|
||||
<group string="Interner Hinweis">
|
||||
|
|
@ -52,6 +44,7 @@
|
|||
|
||||
<xpath expr="//field[@name='category_id']" position="after">
|
||||
<field name="endkunde"/>
|
||||
<field name="portal_pending" attrs="{'invisible': [('portal_pending', '=', False)]}"/>
|
||||
<field name="partner_sector_id"/>
|
||||
</xpath>
|
||||
|
||||
|
|
@ -68,7 +61,7 @@
|
|||
<field name="name">Neue Portalkunden</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.partner</field>
|
||||
<field name="domain">[('active','=',False), ('portal_id','!=',False), ('is_company','=',False)]</field>
|
||||
<field name="domain">[('active','=',False), ('portal_pending','=',True)]</field>
|
||||
<field name="target">current</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
|
|
|
|||
|
|
@ -1 +1,2 @@
|
|||
from . import wizard_confirm_production
|
||||
from . import portal_assign_company
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
# 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
|
||||
|
||||
|
||||
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': int(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:
|
||||
raise ValidationError(_('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.'))
|
||||
|
||||
partner.write({'portal_pending': False, 'active': True})
|
||||
|
||||
return self.send_to_portal(partner.portal_id, partner.id)
|
||||
|
||||
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.'))
|
||||
if not self.main_partner_id.portal_id:
|
||||
self.main_partner_id.portal_id = partner.portal_id
|
||||
self.send_to_portal(self.main_partner_id.portal_id, self.main_partner_id.id)
|
||||
partner.unlink()
|
||||
|
||||
return self.env.ref('base.action_partner_form').read()[0]
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- 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). -->
|
||||
|
||||
<odoo>
|
||||
|
||||
<record id="portal_assign_company_form_view" model="ir.ui.view">
|
||||
<field name="name">portal_assign_company_form_view</field>
|
||||
<field name="model">portal.assign_company</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Wizard Confirm Production">
|
||||
<group>
|
||||
<p>Sobald das Unternehmen aus dem Portal zugewiesen bzw. aktiviert wurde,
|
||||
wird die Kunde-Preisliste an das Portal übergeben und Aufträge aus dem Portal
|
||||
können durchgeführt werden.
|
||||
</p>
|
||||
</group>
|
||||
<group>
|
||||
<field name="main_partner_id"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="button_activate" string="Als Neu Aktivieren" class="btn-danger" type="object"
|
||||
attrs="{'invisible': [('main_partner_id', '!=', False)]}"/>
|
||||
<button name="button_assign" string="Unternehmen zuweisen" class="btn-danger" type="object"
|
||||
attrs="{'invisible': [('main_partner_id', '=', False)]}"/>
|
||||
<button string="Abbrechen" class="btn-default" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="portal_assign_company_action" model="ir.actions.act_window">
|
||||
<field name="name">Unternehmen zuordnen</field>
|
||||
<field name="res_model">portal.assign_company</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
</odoo>
|
||||
|
|
@ -21,7 +21,7 @@ class WizardConfirmProduction(models.TransientModel):
|
|||
if so.assembly_state == 'created' and so.state == 'sale':
|
||||
so.assembly_state = 'approved'
|
||||
else:
|
||||
raise ValidationError(_('Auftrag %s: Bitte prüfen Sie den PG-Status und/oder Auftragsstatus.' % so.name))
|
||||
raise ValidationError(_('Auftrag %s: Bitte prüfen Sie den PG-Status und/oder Auftragsstatus.') % so.name)
|
||||
action = self.env.ref('sale.action_orders').read()[0]
|
||||
action['domain'] = [('id', 'in', active_ids)]
|
||||
return action
|
||||
|
|
|
|||
|
|
@ -44,4 +44,3 @@ class AccountInvoiceWithIntrastat(models.AbstractModel):
|
|||
'field_set_in_lines': self._field_set_in_lines,
|
||||
'formatLang': self._formatLang,
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue