for view in self.browse(cr, uid, ids, context):
# RNG-based validation is not possible anymore with 7.0 forms
# TODO 7.0: provide alternative assertion-based validation!
+ # TODO 7.0: and do the tests on the result of fields_view_get instead of each arch.
view_docs = [etree.fromstring(view.arch.encode('utf8'))]
if view_docs[0].tag == 'data':
# A <data> element is a wrapper for multiple root nodes
import re
import urllib
import zipimport
+import base64
-from openerp import modules, pooler, release, tools
+from openerp import modules, pooler, release, tools, addons
from openerp.tools.parse_version import parse_version
from openerp.tools.translate import _
from openerp.osv import fields, osv, orm
res[key][k] = "\n".join(sorted(v))
return res
+ def _get_icon_image(self, cr, uid, ids, field_name=None, arg=None, context=None):
+ res = dict.fromkeys(ids, '')
+ for module in self.browse(cr, uid, ids, context=context):
+ path = addons.get_module_resource(module.name, 'static', 'src', 'img', 'icon.png')
+ if path:
+ image_file = tools.file_open(path, 'rb')
+ try:
+ res[module.id] = image_file.read().encode('base64')
+ finally:
+ image_file.close()
+ return res
+
_columns = {
'name': fields.char("Technical Name", size=128, readonly=True, required=True, select=True),
'category_id': fields.many2one('ir.module.category', 'Category', readonly=True, select=True),
'certificate' : fields.char('Quality Certificate', size=64, readonly=True),
'application': fields.boolean('Application', readonly=True),
'icon': fields.char('Icon URL', size=128),
+ 'icon_image': fields.function(_get_icon_image, string='Icon', type="binary"),
}
_defaults = {
<header>
<button name="button_install" states="uninstalled" string="Install" icon="terp-gtk-jump-to-ltr" type="object" class="oe_form_button_hi"/>
<button name="button_upgrade" states="installed" string="Upgrade" icon="terp-gtk-go-back-rtl" type="object" class="oe_form_button_hi"/>
- <button name="button_uninstall" states="installed" string="Uninstall (beta)"
- icon="terp-dialog-close" type="object"
- confirm="Do you confirm the uninstallation of this module? This will permanently erase all data currently stored by the module!"/>
+ <button name="button_uninstall" states="installed" string="Uninstall (beta)" icon="terp-dialog-close" type="object"
+ confirm="Do you confirm the uninstallation of this module? This will permanently erase all data currently stored by the module!"/>
<button name="button_uninstall_cancel" states="to remove" string="Cancel Uninstall" icon="gtk-cancel" type="object"/>
<button name="button_upgrade_cancel" states="to upgrade" string="Cancel Upgrade" icon="gtk-cancel" type="object"/>
<button name="button_install_cancel" states="to install" string="Cancel Install" icon="gtk-cancel" type="object"/>
</header>
<sheet>
<div class="oe_right oe_form_button_box">
- <field name="icon" widget='image'/>
+ <field name="icon_image" widget="image"/>
</div>
<div class="oe_form_title">
<label for="shortdesc" class="oe_form_readonly_hidden"/>
</page>
<page string="Technical Data">
<group col="4">
- <field name="name"/>
<field name="demo"/>
<field name="application"/>
</group>
</field>
</page>
<page string="Features" attrs="{'invisible':[('state','!=','installed')]}">
- <separator string="Created Menus"/>
+ <label for="menus_by_module" string="Created Menus"/>
<field name="menus_by_module"/>
- <separator string="Created Views"/>
+ <label for="views_by_module" string="Created Views"/>
<field name="views_by_module"/>
- <separator string="Defined Reports"/>
+ <label for="reports_by_module" string="Defined Reports"/>
<field name="reports_by_module"/>
</page>
</notebook>
return result
- def _get_bank_data(self, cr, uid, ids, field_names, arg, context=None):
- """ Read the 'address' functional fields. """
- result = {}
- for company in self.browse(cr, uid, ids, context=context):
- r = []
- for bank in company.bank_ids:
- if bank.footer:
- r.append(bank.name_get(context=context)[0][1])
- result[company.id] = ' | '.join(r)
- return result
-
def _set_address_data(self, cr, uid, company_id, name, value, arg, context=None):
""" Write the 'address' functional fields. """
company = self.browse(cr, uid, company_id, context=context)
'partner_id': fields.many2one('res.partner', 'Partner', required=True),
'rml_header1': fields.char('Report Header / Company Slogan', size=200, help="Appears by default on the top right corner of your printed documents."),
'rml_footer1': fields.char('General Information Footer', size=200),
- 'rml_footer2': fields.function(_get_bank_data, type="char", string='Bank Accounts Footer', size=250, help="This field is computed automatically based on bank accounts defined, having the display on footer checkbox set."),
+ 'rml_footer2': fields.char('Bank Accounts Footer', size=250, help="Write here your bank accounts for customer payments."),
'rml_header': fields.text('RML Header', required=True),
'rml_header2': fields.text('RML Internal Header', required=True),
'rml_header3': fields.text('RML Internal Header', required=True),