bzr revid: fp@tinyerp.com-20120605164422-uq33qejpdf9mx77o
This commit is contained in:
Fabien Pinckaers 2012-06-05 18:44:22 +02:00
commit 141adaf84f
23 changed files with 211 additions and 199 deletions

View File

@ -3031,6 +3031,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
return res
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
if context is None:context = {}
res = super(wizard_multi_charts_accounts, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
cmp_select = []
acc_template_obj = self.pool.get('account.chart.template')

View File

@ -13,9 +13,11 @@
<separator string="title" position="attributes">
<attribute name="string">Configure Your Chart of Accounts</attribute>
</separator>
<xpath expr="//label[@string='description']" position="attributes">
<attribute name="string">The default Chart of Accounts is matching your country selection. If no certified Chart of Accounts exists for your specified country, a generic one can be installed and will be selected by default.</attribute>
</xpath>
<!-- Removed description from main view.-->
<!--<xpath expr="//label[@string='description']" position="attributes">-->
<!-- <attribute name="string">The default Chart of Accounts is matching your country selection. If no certified Chart of Accounts exists for your specified country, a generic one can be installed and will be selected by default.</attribute>-->
<!--</xpath>-->
<xpath expr="//button[@string='Install Modules']" position="attributes">
<attribute name="string">Configure</attribute>
</xpath>

View File

@ -297,7 +297,7 @@
<field name="state" class="oe_form_inline"/>
<field name="number"/>
</h1>
<label string"Concerns" for="name" class="oe_form_readonly_hidden"/>
<label string="Concerns" for="name" class="oe_form_readonly_hidden"/>
<h2>
<field name="name" placeholder="Project XYZ"/>
</h2>

View File

@ -94,6 +94,7 @@ class account_installer(osv.osv_memory):
raise osv.except_osv(_('No unconfigured company !'), _("There are currently no company without chart of account. The wizard will therefore not be executed."))
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
if context is None:context = {}
res = super(account_installer, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
cmp_select = []
# display in the widget selection only the companies that haven't been configured yet

View File

@ -393,74 +393,74 @@
id="account_analytic_journal_print" parent="account.next_id_40"/>
#
# Statistics
# Statistics [where is this object in py file ?]
#
<record id="report_hr_timesheet_invoice_journal_form" model="ir.ui.view">
<field name="name">report.hr.timesheet.invoice.journal.form</field>
<field name="model">report.hr.timesheet.invoice.journal</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Analytic Entries Stats">
<group col="4">
<field name="name"/>
<field name="account_id"/>
<field name="journal_id"/>
</group>
</form>
</field>
</record>
<record id="report_hr_timesheet_invoice_journal_tree" model="ir.ui.view">
<field name="name">report.hr.timesheet.invoice.journal.tree</field>
<field name="model">report.hr.timesheet.invoice.journal</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Analytic Entries Stats">
<field name="name"/>
<field name="month"/>
<field name="account_id"/>
<field name="journal_id"/>
<field name="quantity"/>
<field name="revenue"/>
<field name="cost"/>
</tree>
</field>
</record>
<record id="report_hr_timesheet_invoice_journal_graph" model="ir.ui.view">
<field name="name">report.hr.timesheet.invoice.journal.graph</field>
<field name="model">report.hr.timesheet.invoice.journal</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Analytic Entries Stats" type="bar">
<field name="name"/>
<field name="month"/>
<field name="cost" operator="+"/>
<field name="revenue" operator="+"/>
<field group="True" name="journal_id"/>
</graph>
</field>
</record>
<record id="report_hr_timesheet_invoice_journal_search" model="ir.ui.view">
<field name="name">report.hr.timesheet.invoice.journal.search</field>
<field name="model">report.hr.timesheet.invoice.journal</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Analytic Entries Stats">
<group>
<filter icon="terp-go-year" string="This Year" domain="[('name','=',time.strftime('%%Y'))]" help="Sale journal in this year"/>
<filter icon="terp-go-month" string="This Month" domain="[('month','=',time.strftime('%%m'))]" help="Sale journal in this month"/>
<separator orientation="vertical"/>
<field name="name"/>
<field name="month"/>
<field name="account_id"/>
</group>
</search>
</field>
</record>
<!--<record id="report_hr_timesheet_invoice_journal_form" model="ir.ui.view">-->
<!-- <field name="name">report.hr.timesheet.invoice.journal.form</field>-->
<!-- <field name="model">report.hr.timesheet.invoice.journal</field>-->
<!-- <field name="type">form</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <form string="Analytic Entries Stats">-->
<!-- <group col="4">-->
<!-- <field name="name"/>-->
<!-- <field name="account_id"/>-->
<!-- <field name="journal_id"/>-->
<!-- </group>-->
<!-- </form>-->
<!-- </field>-->
<!--</record>-->
<!---->
<!---->
<!--<record id="report_hr_timesheet_invoice_journal_tree" model="ir.ui.view">-->
<!-- <field name="name">report.hr.timesheet.invoice.journal.tree</field>-->
<!-- <field name="model">report.hr.timesheet.invoice.journal</field>-->
<!-- <field name="type">tree</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <tree string="Analytic Entries Stats">-->
<!-- <field name="name"/>-->
<!-- <field name="month"/>-->
<!-- <field name="account_id"/>-->
<!-- <field name="journal_id"/>-->
<!-- <field name="quantity"/>-->
<!-- <field name="revenue"/>-->
<!-- <field name="cost"/>-->
<!-- </tree>-->
<!-- </field>-->
<!--</record>-->
<!---->
<!--<record id="report_hr_timesheet_invoice_journal_graph" model="ir.ui.view">-->
<!-- <field name="name">report.hr.timesheet.invoice.journal.graph</field>-->
<!-- <field name="model">report.hr.timesheet.invoice.journal</field>-->
<!-- <field name="type">graph</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <graph string="Analytic Entries Stats" type="bar">-->
<!-- <field name="name"/>-->
<!-- <field name="month"/>-->
<!-- <field name="cost" operator="+"/>-->
<!-- <field name="revenue" operator="+"/>-->
<!-- <field group="True" name="journal_id"/>-->
<!-- </graph>-->
<!-- </field>-->
<!--</record>-->
<!---->
<!--<record id="report_hr_timesheet_invoice_journal_search" model="ir.ui.view">-->
<!-- <field name="name">report.hr.timesheet.invoice.journal.search</field>-->
<!-- <field name="model">report.hr.timesheet.invoice.journal</field>-->
<!-- <field name="type">search</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <search string="Analytic Entries Stats">-->
<!-- <group>-->
<!-- <filter icon="terp-go-year" string="This Year" domain="[('name','=',time.strftime('%%Y'))]" help="Sale journal in this year"/>-->
<!-- <filter icon="terp-go-month" string="This Month" domain="[('month','=',time.strftime('%%m'))]" help="Sale journal in this month"/>-->
<!-- <separator orientation="vertical"/>-->
<!-- <field name="name"/>-->
<!-- <field name="month"/>-->
<!-- <field name="account_id"/>-->
<!-- </group>-->
<!-- </search>-->
<!-- </field>-->
<!--</record>-->
<act_window
context="{'search_default_account_id': [active_id], 'search_default_user_id': False, 'default_account_id': active_id}"

View File

@ -91,6 +91,7 @@ class report_aged_receivable(osv.osv):
def fields_view_get(self, cr, user, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
""" To call the init() method timely
"""
if context is None:context = {}
if not self.called:
self.init(cr, user)
self.called = True # To make sure that init doesn't get called multiple times

View File

@ -60,6 +60,7 @@ class account_invoice_refund(osv.osv_memory):
}
def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False):
if context is None:context = {}
journal_obj = self.pool.get('account.journal')
user_obj = self.pool.get('res.users')
# remove the entry with key 'form_view_ref', otherwise fields_view_get crashes

View File

@ -77,56 +77,57 @@ class account_move_journal(osv.osv_memory):
@return: Returns a dict that contains definition for fields, views, and toolbars
"""
if context is None:context = {}
res = super(account_move_journal, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
if not view_id:
return res
period_pool = self.pool.get('account.period')
journal_pool = self.pool.get('account.journal')
journal_id = self._get_journal(cr, uid, context)
period_id = self._get_period(cr, uid, context)
journal = False
if journal_id:
journal = journal_pool.read(cr, uid, [journal_id], ['name'])[0]['name']
journal_string = _("Journal: %s") % tools.ustr(journal)
else:
journal_string = _("Journal: All")
period = False
if period_id:
period = period_pool.browse(cr, uid, [period_id], ['name'])[0]['name']
period_string = _("Period: %s") % tools.ustr(period)
separator_string = _("Open Journal Items !")
cancel_string = _("Cancel")
open_string = _("Open")
view = """<?xml version="1.0" encoding="utf-8"?>
<form string="Standard entries">
<separator string="%s" colspan="4"/>
<field name="target_move" />
<newline/>
<group colspan="4" >
<label width="300" string="%s"/>
if context:
if not view_id:
return res
period_pool = self.pool.get('account.period')
journal_pool = self.pool.get('account.journal')
journal_id = self._get_journal(cr, uid, context)
period_id = self._get_period(cr, uid, context)
journal = False
if journal_id:
journal = journal_pool.read(cr, uid, [journal_id], ['name'])[0]['name']
journal_string = _("Journal: %s") % tools.ustr(journal)
else:
journal_string = _("Journal: All")
period = False
if period_id:
period = period_pool.browse(cr, uid, [period_id], ['name'])[0]['name']
period_string = _("Period: %s") % tools.ustr(period)
separator_string = _("Open Journal Items !")
cancel_string = _("Cancel")
open_string = _("Open")
view = """<?xml version="1.0" encoding="utf-8"?>
<form string="Standard entries">
<separator string="%s" colspan="4"/>
<field name="target_move" />
<newline/>
<label width="300" string="%s"/>
</group>
<group colspan="4" col="4">
<label string ="" colspan="2"/>
<button icon="gtk-cancel" special="cancel" string="%s"/>
<button icon="terp-gtk-go-back-rtl" string="%s" name="action_open_window" default_focus="1" type="object"/>
</group>
</form>""" % (separator_string, journal_string, period_string, cancel_string, open_string)
view = etree.fromstring(view.encode('utf8'))
xarch, xfields = self._view_look_dom_arch(cr, uid, view, view_id, context=context)
view = xarch
res.update({
'arch': view
})
<group colspan="4" >
<label width="300" string="%s"/>
<newline/>
<label width="300" string="%s"/>
</group>
<group colspan="4" col="4">
<label string ="" colspan="2"/>
<button icon="gtk-cancel" special="cancel" string="%s"/>
<button icon="terp-gtk-go-back-rtl" string="%s" name="action_open_window" default_focus="1" type="object"/>
</group>
</form>""" % (separator_string, journal_string, period_string, cancel_string, open_string)
view = etree.fromstring(view.encode('utf8'))
xarch, xfields = self._view_look_dom_arch(cr, uid, view, view_id, context=context)
view = xarch
res.update({
'arch': view
})
return res
def action_open_window(self, cr, uid, ids, context=None):

View File

@ -67,6 +67,7 @@ class account_common_report(osv.osv_memory):
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
if context is None:context = {}
res = super(account_common_report, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=False)
if context.get('active_model', False) == 'account.account' and view_id:
doc = etree.XML(res['arch'])

View File

@ -86,6 +86,7 @@ class account_voucher(osv.osv):
Add domain 'allow_check_writting = True' on journal_id field and remove 'widget = selection' on the same
field because the dynamic domain is not allowed on such widget
"""
if not context: context = {}
res = super(account_voucher, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)
doc = etree.XML(res['arch'])
nodes = doc.xpath("//field[@name='journal_id']")

View File

@ -46,6 +46,7 @@ class payment_order_create(osv.osv_memory):
}
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
if not context: context = {}
res = super(payment_order_create, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=False)
if context and 'line_ids' in context:
doc = etree.XML(res['arch'])

View File

@ -317,11 +317,6 @@
<notebook colspan="4">
<page string="Sales Purchase">
<field name="sales_purchase_active"/>
<separator colspan="4" string="State of Mind Computation"/>
<field name="som_interval"/>
<field name="som_interval_max"/>
<field name="som_interval_decrease"/>
<field name="som_interval_default"/>
<separator colspan="4" string="Segmentation Test"/>
<field colspan="4" name="segmentation_line" widget="one2many_list" nolabel="1"/>
</page>

View File

@ -100,20 +100,20 @@
<field name="value" eval="'ir.actions.act_window,'+str(action_idea_idea_categ_open)" />
</record>
<!-- Idea statistics Form View -->
<!-- Idea statistics Form View [where is python class for this view ?]-->
<record model="ir.ui.view" id="view_idea_stat_form">
<field name="name">idea.stat.form</field>
<field name="model">idea.stat</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="stat">
<field name="avgscore" />
<field name="nbr_comments" />
<field name="nbr_votes" />
</form>
</field>
</record>
<!--<record model="ir.ui.view" id="view_idea_stat_form">-->
<!-- <field name="name">idea.stat.form</field>-->
<!-- <field name="model">idea.stat</field>-->
<!-- <field name="type">form</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <form string="stat">-->
<!-- <field name="avgscore" />-->
<!-- <field name="nbr_comments" />-->
<!-- <field name="nbr_votes" />-->
<!-- </form>-->
<!-- </field>-->
<!--</record>-->
<!--Vote For Idea Tree View -->

View File

@ -9,7 +9,7 @@
<field name="inherit_id" ref="base.view_users_form_simple_modif"/>
<field name="arch" type="xml">
<data>
<field name="menu_tips" position="after">
<field name="context_tz" position="after">
<field name="notification_email_pref" readonly="0"/>
</field>
</data>
@ -23,7 +23,7 @@
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<data>
<field name="menu_tips" position="after">
<field name="context_tz" position="after">
<field name="notification_email_pref"/>
</field>
<xpath expr="/form/sheet" position="after">

View File

@ -891,39 +891,41 @@
<field name="filter" eval="True"/>
<field name="search_view_id" ref="view_mrp_production_filter"/>
</record>
<!-- Where is object in py file?-->
<record id="mrp_production_lot_form_view" model="ir.ui.view">
<field name="name">mrp.production.lot.line.form</field>
<field name="model">mrp.production.lot.line</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Production Products">
<field colspan="4" name="move_id" on_change="onchange_lot_line_id(lot_id)"/>
<field name="name"/>
<field name="product_id"/>
<field name="product_qty"/>
<field name="product_uom"/>
<field name="product_uos_qty" groups="product.group_uos"/>
<field name="product_uos" groups="product.group_uos"/>
<field name="tracking_id"/>
</form>
</field>
</record>
<record id="mrp_production_lot_tree_view" model="ir.ui.view">
<field name="name">mrp.production.lot.line.tree</field>
<field name="model">mrp.production.lot.line</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Production Products Consommation">
<field name="product_id"/>
<field name="product_qty"/>
<field name="product_uom"/>
<field name="product_uos_qty" groups="product.group_uos"/>
<field name="product_uos" groups="product.group_uos"/>
<field name="tracking_id"/>
</tree>
</field>
</record>
<!--<record id="mrp_production_lot_form_view" model="ir.ui.view">-->
<!-- <field name="name">mrp.production.lot.line.form</field>-->
<!-- <field name="model">mrp.production.lot.line</field>-->
<!-- <field name="type">form</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <form string="Production Products">-->
<!-- <field colspan="4" name="move_id" on_change="onchange_lot_line_id(lot_id)"/>-->
<!-- <field name="name"/>-->
<!-- <field name="product_id"/>-->
<!-- <field name="product_qty"/>-->
<!-- <field name="product_uom"/>-->
<!-- <field name="product_uos_qty" groups="product.group_uos"/>-->
<!-- <field name="product_uos" groups="product.group_uos"/>-->
<!-- <field name="tracking_id"/>-->
<!-- </form>-->
<!-- </field>-->
<!--</record>-->
<!--<record id="mrp_production_lot_tree_view" model="ir.ui.view">-->
<!-- <field name="name">mrp.production.lot.line.tree</field>-->
<!-- <field name="model">mrp.production.lot.line</field>-->
<!-- <field name="type">tree</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <tree string="Production Products Consommation">-->
<!-- <field name="product_id"/>-->
<!-- <field name="product_qty"/>-->
<!-- <field name="product_uom"/>-->
<!-- <field name="product_uos_qty" groups="product.group_uos"/>-->
<!-- <field name="product_uos" groups="product.group_uos"/>-->
<!-- <field name="tracking_id"/>-->
<!-- </tree>-->
<!-- </field>-->
<!--</record>-->
<record id="mrp_production_product_form_view" model="ir.ui.view">
<field name="name">mrp.production.product.line.form</field>

View File

@ -34,7 +34,7 @@ def get_journal(self, cr, uid, context=None):
@param context: A standard dictionary
@return :Return the list of journal
"""
journal_obj = self.pool.get('account.journal')
statement_obj = self.pool.get('account.bank.statement')
@ -42,7 +42,7 @@ def get_journal(self, cr, uid, context=None):
obj_ids = statement_obj.search(cr, uid, [('state', '=', 'open'), ('user_id', '=', uid), ('journal_id', 'in', j_ids)], context=context)
res = statement_obj.read(cr, uid, obj_ids, ['journal_id'], context=context)
res = [(r['journal_id']) for r in res]
if not len(res):
if not len(res) and context:
raise osv.except_osv(_('Error !'), _('You do not have any open cash register. You must create a payment method or open a cash register.'))
return res

View File

@ -818,7 +818,7 @@ class task(base_stage, osv.osv):
#
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
users_obj = self.pool.get('res.users')
if context is None: context = {}
# read uom as admin to avoid access rights issues, e.g. for portal/share users,
# this should be safe (no context passed to avoid side-effects)
obj_tm = users_obj.browse(cr, 1, uid, context=context).company_id.project_time_mode_id

View File

@ -15,7 +15,6 @@
<field name="user_id"/>
<field name="remaining_hours"/>
<field name="kanban_state"/>
<field name="stage_id"/>
<field name="state" groups="base.group_no_one"/>
</tree>
</field>
@ -32,18 +31,21 @@
</graph>
</field>
</record>
<record id="view_task_history_burndown_graph" model="ir.ui.view">
<field name="name">project.task.history.burndown.graph</field>
<field name="model">project.task.history.burndown</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Burndown Chart of Tasks" type="bar">
<field name="date"/>
<field name="remaining_hours" operator="+"/>
<field name="type_id" group="True"/>
</graph>
</field>
</record>
<!-- Where is this object in py file ? -->
<!--<record id="view_task_history_burndown_graph" model="ir.ui.view">-->
<!-- <field name="name">project.task.history.burndown.graph</field>-->
<!-- <field name="model">project.task.history.burndown</field>-->
<!-- <field name="type">graph</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <graph string="Burndown Chart of Tasks" type="bar">-->
<!-- <field name="date"/>-->
<!-- <field name="remaining_hours" operator="+"/>-->
<!-- <field name="type_id" group="True"/>-->
<!-- </graph>-->
<!-- </field>-->
<!--</record>-->
<record id="view_task_history_search" model="ir.ui.view">
@ -92,18 +94,18 @@
parent="project_report_task" />
<record id="action_view_task_history_burndown" model="ir.actions.act_window">
<field name="name">Burndown Chart</field>
<field name="res_model">project.task.history.cumulative</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
<field name="view_id" ref="view_task_history_burndown_graph"/>
<field eval="False" name="filter"/>
<field name="context">{"search_default_open":1, "search_default_this_month": 1, "search_default_project_id": project_id}</field>
</record>
<menuitem action="action_view_task_history_burndown"
id="menu_action_view_task_history_burndown"
parent="project_report_task" />
<!--<record id="action_view_task_history_burndown" model="ir.actions.act_window">-->
<!-- <field name="name">Burndown Chart</field>-->
<!-- <field name="res_model">project.task.history.cumulative</field>-->
<!-- <field name="view_type">form</field>-->
<!-- <field name="view_mode">graph,tree</field>-->
<!-- <field name="view_id" ref="view_task_history_burndown_graph"/>-->
<!-- <field eval="False" name="filter"/>-->
<!-- <field name="context">{"search_default_open":1, "search_default_this_month": 1, "search_default_project_id": project_id}</field>-->
<!--</record>-->
<!--<menuitem action="action_view_task_history_burndown"-->
<!-- id="menu_action_view_task_history_burndown"-->
<!-- parent="project_report_task" />-->
</data>

View File

@ -9,7 +9,7 @@
<field name="type">form</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page[@string='History']" position="attributes">
<xpath expr="//page[@string='History']" position="attributes">
<attribute name="invisible">False</attribute>
</xpath>
</field>

View File

@ -101,6 +101,7 @@ class project_task(osv.osv):
return True
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
if not context: context = {}
res = super(project_task,self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
search_extended = False
timebox_obj = self.pool.get('project.gtd.timebox')

View File

@ -53,6 +53,7 @@ class report_webkit_actions(osv.osv_memory):
@param context: A standard dictionary
@return: New arch of view.
"""
if not context: context = {}
res = super(report_webkit_actions, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
record_id = context and context.get('active_id', False) or False
active_model = context.get('active_model')

View File

@ -36,6 +36,7 @@ class stock_change_product_qty(osv.osv_memory):
}
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
if context is None: context = {}
fvg = super(stock_change_product_qty, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu)
product_id = context and context.get('active_id', False) or False

View File

@ -7,7 +7,7 @@
<field name="type">form</field>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page[@string='Configuration']" position="inside">
<xpath expr="//page[@string='Configuration']" position="inside">
<field name="ldaps" nolabel="1" colspan="4">
<form string="LDAP Configuration">
<field name="ldap_server"/>