Fall 5405: CR1 - Neue SST-14 / 15 + Anpassungen SST-01/03

develop
Ahmed Aly 2018-03-30 09:09:04 +02:00
parent 998b1cd90a
commit 834ee07c69
14 changed files with 271 additions and 70 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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',

View File

@ -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

View File

@ -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))

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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>

View File

@ -1 +1,2 @@
from . import wizard_confirm_production
from . import portal_assign_company

View File

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

View File

@ -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>

View File

@ -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

View File

@ -44,4 +44,3 @@ class AccountInvoiceWithIntrastat(models.AbstractModel):
'field_set_in_lines': self._field_set_in_lines,
'formatLang': self._formatLang,
}