diff --git a/all_in_one_dynamic_custom_fields/README.rst b/all_in_one_dynamic_custom_fields/README.rst index a55bd153e..e88f57fab 100644 --- a/all_in_one_dynamic_custom_fields/README.rst +++ b/all_in_one_dynamic_custom_fields/README.rst @@ -1,11 +1,11 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 All in One Custom Dynamic Fields ================================ - -All in One Custom Dynamic Fields +The features of module facilitates the addition of fields to any view within a model, +allowing users to specify attributes and properties at their preferred location. Installation ============ @@ -42,4 +42,4 @@ For support and more information, please visit `Our Website `__ \ No newline at end of file +HTML Description: ``__ diff --git a/all_in_one_dynamic_custom_fields/__init__.py b/all_in_one_dynamic_custom_fields/__init__.py index 42e933cbd..9770602d7 100644 --- a/all_in_one_dynamic_custom_fields/__init__.py +++ b/all_in_one_dynamic_custom_fields/__init__.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- -################################################################################### +################################################################################ # # Cybrosys Technologies Pvt. Ltd. # -# Copyright (C) 2022-TODAY Cybrosys Technologies (). +# Copyright (C) 2022-TODAY Cybrosys Technologies () # Author: Cybrosys Techno Solutions () # # This program is free software: you can modify @@ -19,5 +19,5 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -################################################################################### +################################################################################ from . import models diff --git a/all_in_one_dynamic_custom_fields/__manifest__.py b/all_in_one_dynamic_custom_fields/__manifest__.py index c5d6fd9c2..3c6a0aec9 100644 --- a/all_in_one_dynamic_custom_fields/__manifest__.py +++ b/all_in_one_dynamic_custom_fields/__manifest__.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- -################################################################################### +################################################################################ # # Cybrosys Technologies Pvt. Ltd. # -# Copyright (C) 2022-TODAY Cybrosys Technologies (). +# Copyright (C) 2022-TODAY Cybrosys Technologies () # Author: Cybrosys Techno Solutions () # # This program is free software: you can modify @@ -19,26 +19,27 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -################################################################################### +################################################################################ { 'name': 'All in One Dynamic Fields', - 'version': '16.0.1.1.3', - 'summary': 'Create Custom Fields As Per Your Need Without Any Coding.', - 'description': 'All in One Dynamic Fields, All in One Custom Fields, Dynamic Fields, Custom Fields, Create Fields Dynamically', + 'version': '16.0.1.2.4', 'category': 'Extra Tools', + 'summary': 'Create Custom Fields As Per Your Need Without Any Coding.', + 'description': 'All in One Dynamic Fields, All in One Custom Fields, ' + 'Dynamic Fields, Custom Fields, Create Fields Dynamically', 'author': 'Cybrosys Techno Solutions', 'company': 'Cybrosys Techno Solutions', 'maintainer': 'Cybrosys Techno Solutions', 'website': "https://www.cybrosys.com", - 'license': 'AGPL-3', 'depends': ['base'], 'data': [ 'data/widget_data.xml', 'security/security.xml', 'security/ir.model.access.csv', - 'views/dynamic_fields.xml', + 'views/dynamic_fields_views.xml', ], 'images': ['static/description/banner.png'], + 'license': 'AGPL-3', 'installable': True, 'auto_install': False, 'application': False, diff --git a/all_in_one_dynamic_custom_fields/data/widget_data.xml b/all_in_one_dynamic_custom_fields/data/widget_data.xml index f3df52478..2544a08b4 100644 --- a/all_in_one_dynamic_custom_fields/data/widget_data.xml +++ b/all_in_one_dynamic_custom_fields/data/widget_data.xml @@ -2,37 +2,37 @@ - + image Image - + many2many_tags Many2many Tags - + binary Binary - + radio Radio - + priority Priority - - + + monetary Monetary - + selection Selection diff --git a/all_in_one_dynamic_custom_fields/doc/RELEASE_NOTES.md b/all_in_one_dynamic_custom_fields/doc/RELEASE_NOTES.md index 87d1bc569..7aa46580f 100644 --- a/all_in_one_dynamic_custom_fields/doc/RELEASE_NOTES.md +++ b/all_in_one_dynamic_custom_fields/doc/RELEASE_NOTES.md @@ -4,3 +4,8 @@ #### Version 16.0.1.1.3 ##### ADD - Initial commit for All in One Custom Dynamic Fields + +#### 12.06.2024 +#### Version 16.0.1.2.4 +##### UPDATE +- The latest module update includes enhancements to the list view configuration. You can now add the newly created field to the selected list view at the desired position, with the option to enable or disable its visibility by default. \ No newline at end of file diff --git a/all_in_one_dynamic_custom_fields/models/__init__.py b/all_in_one_dynamic_custom_fields/models/__init__.py index 7cd42b061..659612541 100644 --- a/all_in_one_dynamic_custom_fields/models/__init__.py +++ b/all_in_one_dynamic_custom_fields/models/__init__.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- -################################################################################### +################################################################################ # # Cybrosys Technologies Pvt. Ltd. # -# Copyright (C) 2022-TODAY Cybrosys Technologies (). +# Copyright (C) 2024-TODAY Cybrosys Technologies () # Author: Cybrosys Techno Solutions () # # This program is free software: you can modify @@ -19,7 +19,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -################################################################################### +################################################################################ from . import ir_model_fields -from . import field_widgets +from . import dynamic_field_widgets from . import dynamic_fields diff --git a/all_in_one_dynamic_custom_fields/models/field_widgets.py b/all_in_one_dynamic_custom_fields/models/dynamic_field_widgets.py similarity index 64% rename from all_in_one_dynamic_custom_fields/models/field_widgets.py rename to all_in_one_dynamic_custom_fields/models/dynamic_field_widgets.py index 5e388ae11..16f2ff3cf 100644 --- a/all_in_one_dynamic_custom_fields/models/field_widgets.py +++ b/all_in_one_dynamic_custom_fields/models/dynamic_field_widgets.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- -################################################################################### +################################################################################ # # Cybrosys Technologies Pvt. Ltd. # -# Copyright (C) 2022-TODAY Cybrosys Technologies (). +# Copyright (C) 2024-TODAY Cybrosys Technologies () # Author: Cybrosys Techno Solutions () # # This program is free software: you can modify @@ -19,19 +19,20 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -################################################################################### +################################################################################ from odoo import models, fields -class FieldWidgets(models.Model): - """We can't filter a selection field dynamically - so when we select a field its widgets also need to change according to the selected - field type, we can't do it by a 'selection' field, need a 'Many2one' field. +class DynamicFieldWidgets(models.Model): + """We can't filter a selection field dynamically so when we select a + field its widgets also need to change according to the selected field + type, we can't do it by a 'selection' field, need a 'Many2one' field. """ _name = 'dynamic.field.widgets' _rec_name = 'description' _description = 'Field Widgets' - name = fields.Char(string="Name") - description = fields.Char(string="Description") + name = fields.Char(string="Name", help='Name of the record') + description = fields.Char(string="Description", help='Description given to ' + 'the record') diff --git a/all_in_one_dynamic_custom_fields/models/dynamic_fields.py b/all_in_one_dynamic_custom_fields/models/dynamic_fields.py index bc0ce3ba5..e7d0c749e 100644 --- a/all_in_one_dynamic_custom_fields/models/dynamic_fields.py +++ b/all_in_one_dynamic_custom_fields/models/dynamic_fields.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- -################################################################################### +################################################################################ # # Cybrosys Technologies Pvt. Ltd. # -# Copyright (C) 2022-TODAY Cybrosys Technologies (). +# Copyright (C) 2024-TODAY Cybrosys Technologies () # Author: Cybrosys Techno Solutions () # # This program is free software: you can modify @@ -19,12 +19,15 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -################################################################################### +################################################################################ +from xlrd.xlsx import ET + from odoo import api, fields, models, _ from odoo.exceptions import ValidationError class DynamicFields(models.Model): + """Class DynamicFields to create fields dynamically to any model""" _name = 'dynamic.fields' _rec_name = 'field_description' _description = 'Custom Dynamic Fields' @@ -39,49 +42,127 @@ class DynamicFields(models.Model): field_list.remove(('reference', 'reference')) return field_list - position_field = fields.Many2one('ir.model.fields', string='Field Name', - required=True, - ondelete='cascade') + position_field_id = fields.Many2one('ir.model.fields', + string='Field Name', + help='Position Field Name', + required=True, + ondelete='cascade') position = fields.Selection([('before', 'Before'), ('after', 'After')], string='Position', + help='position of the newly created field', required=True) - model_id = fields.Many2one('ir.model', string='Model', required=True, + model_id = fields.Many2one('ir.model', string='Model', + required=True, index=True, ondelete='cascade', help="The model this field belongs to") - ref_model_id = fields.Many2one('ir.model', string='Model', index=True) - selection_field = fields.Char(string="Selection Options") - rel_field = fields.Many2one('ir.model.fields', string='Related Field') + ref_model_id = fields.Many2one('ir.model', string='Model', + index=True, help='Reference model of the ' + 'relational field') + selection_field = fields.Char(string="Selection Options", + help='Selection options for field') + rel_field_id = fields.Many2one('ir.model.fields', + string='Related Field', help='Related field') field_type = fields.Selection(selection='get_possible_field_types', - string='Field Type', required=True) - ttype = fields.Selection(string="Field Type", related='field_type') - widget = fields.Many2one('dynamic.field.widgets', string='Widget') - groups = fields.Many2many('res.groups', 'employee_dynamic_fields_group_rel', - 'field_id', 'group_id') - extra_features = fields.Boolean(string="Show Extra Properties") + string='Field Type', + help='Field type of newly created field', + required=True) + ttype = fields.Selection(string="Field Type", related='field_type', + help='Field type') + widget_id = fields.Many2one('dynamic.field.widgets', + string='Widget', + help='Widget of the newly selected field') + groups = fields.Many2many('res.groups', + 'employee_dynamic_fields_group_rel', + 'field_id', 'group_id', + string='Groups', help='Groups') + is_extra_features = fields.Boolean(string="Show Extra Properties", + help='Show Extra Properties of newly ' + 'field') + created_from_id = fields.Many2one('ir.ui.view', + help='Created form view id for the field', + string='Dynamic created form view') status = fields.Selection([ ('draft', 'Draft'), ('form', 'Field Created'), ('tree', 'Added in Tree View'), ], string='Status', index=True, readonly=True, tracking=True, copy=False, default='draft', - required=True, help='Record Status') + help='Record Status') - form_view_id = fields.Many2one('ir.ui.view', string="Form View ID", + form_view_id = fields.Many2one('ir.ui.view', + string="Form View ID", + help='Form View ID', required=True) form_view_inherit_id = fields.Char(string="Form View Inherit Id", + help="Form View Inherit Id", related='form_view_id.xml_id') - add_field_in_tree = fields.Boolean(string="Add Field to the Tree View", - default=False) - tree_view_id = fields.Many2one('ir.ui.view', string="Tree View ID") + is_add_field_in_tree = fields.Boolean(string="Add Field to the Tree View", + help="Add newly created Field to " + "the Tree View") + tree_view_id = fields.Many2one('ir.ui.view', + string="Tree View ID", help='Tree View ID') tree_view_inherit_id = fields.Char(string="Tree View Inherit Id", + help='Tree View Inherit Id', + readonly=True, related='tree_view_id.xml_id') + tree_field_position = fields.Selection([('before', 'Before'), + ('after', 'After')], + string='Position', + help='Tree field position to the ' + 'selected tree field') + tree_field_ids = fields.Many2many('ir.model.fields', + string='Tree View Fields', + compute='_compute_tree_field_ids', + help='Domain field for tree view fields') + tree_view_field_id = fields.Many2one('ir.model.fields', + string='Tree View Field', + domain="[('id', 'in', " + "tree_field_ids)]", + help='Select a tree view field for ' + 'position of newly created ' + 'field in the tree view') + is_tree_view_toggle = fields.Boolean(string='Visible in tree view', + help='Enable to toggle view the newly ' + 'created view in selected tree ' + 'view') + created_tree_view_id = fields.Many2one('ir.ui.view', + help='Dynamic Created tree view id', + string='Dynamic Tree view id') + + @api.depends('tree_view_id') + def _compute_tree_field_ids(self): + """Compute function to find the tree view fields of selected tree view + in field tree_view_id""" + for rec in self: + if rec.tree_view_id: + field_list = [] + if rec.tree_view_id.xml_id: + tree_fields = ET.fromstring(self.env.ref( + rec.tree_view_id.xml_id).arch).findall(".//field") + for field in tree_fields: + field_list.append(field.get('name')) + inherit_id = rec.tree_view_id.inherit_id \ + if rec.tree_view_id.inherit_id else False + while inherit_id: + if inherit_id.xml_id: + tree_fields = ET.fromstring(self.env.ref( + inherit_id.xml_id).arch).findall(".//field") + for field in tree_fields: + field_list.append(field.get('name')) + inherit_id = inherit_id.inherit_id \ + if inherit_id.inherit_id else False + self.tree_field_ids = self.env['ir.model.fields'].search( + [('model_id', '=', self.model_id.id), + ('name', 'in', field_list)]) + else: + rec.tree_field_ids = False - def create_dynamic_fields(self): + def action_create_dynamic_fields(self): + """Function create Dynamic field""" self.write({'status': 'form'}) if self.field_type == 'monetary' and not self.env[ - 'ir.model.fields'].sudo().search([ - ('model', '=', self.model_id.id), - ('name', '=', 'currency_id')]): + 'ir.model.fields'].sudo().search([('model', '=', self.model_id.id), + ('name', '=', 'currency_id')]): self.env['ir.model.fields'].sudo().create({ 'name': 'x_currency_id', 'field_description': 'Currency', @@ -105,9 +186,9 @@ class DynamicFields(models.Model): 'copied': self.copied, 'is_dynamic_field': True }) - inherit_form_view_name = str( - self.form_view_id.name) + ".inherit.dynamic.custom." + \ - str(self.field_description) + ".field" + inherit_form_view_name = (str( + self.form_view_id.name) + ".inherit.dynamic.custom." + + str(self.field_description) + ".field") xml_id = self.form_view_id.xml_id inherit_id = self.env.ref(xml_id) arch_base = _('' @@ -115,18 +196,18 @@ class DynamicFields(models.Model): '' '' '' - '') % (self.position_field.name, + '') % (self.position_field_id.name, self.position, self.name) - if self.widget: + if self.widget_id: arch_base = _('' '' '' '' '' - '') % (self.position_field.name, + '') % (self.position_field_id.name, self.position, self.name, - self.widget.name) - self.form_view_id = self.env['ir.ui.view'].sudo().create({ + self.widget_id.name) + self.created_from_id = self.env['ir.ui.view'].sudo().create({ 'name': inherit_form_view_name, 'type': 'form', 'model': self.model_id.model, @@ -140,80 +221,82 @@ class DynamicFields(models.Model): 'tag': 'reload', } - def add_field_to_tree_view(self): - if self.add_field_in_tree: - if self.add_field_in_tree: - inherit_tree_view_name = str( - self.tree_view_id.name) + ".inherit.dynamic.custom" + \ - str(self.field_description) + ".field" - tree_view_arch_base = _( - '' - '' - '''''' - '''''' - '''''' - '''''') % self.name - self.tree_view_id = self.env['ir.ui.view'].sudo().create({ - 'name': inherit_tree_view_name, - 'type': 'tree', - 'model': self.model_id.model, - 'mode': 'extension', - 'inherit_id': self.tree_view_id.id, - 'arch_base': tree_view_arch_base, - 'active': True}) - self.write({'status': 'tree'}) - return { - 'type': 'ir.actions.client', - 'tag': 'reload', - } + def action_add_field_to_tree_view(self): + """Function to add created dynamic field to selected tree view""" + if self.is_add_field_in_tree: + inherit_tree_view_name = str( + self.tree_view_id.name) + ".inherit.dynamic.custom" + \ + str(self.field_description) + ".field" + optional = "show" if self.is_tree_view_toggle else "hide" + tree_view_arch_base = (_(f''' + + + + + ''')) + self.created_tree_view_id = self.env['ir.ui.view'].sudo().create({ + 'name': inherit_tree_view_name, + 'type': 'tree', + 'model': self.model_id.model, + 'mode': 'extension', + 'inherit_id': self.tree_view_id.id, + 'arch_base': tree_view_arch_base, + 'active': True}) + self.write({'status': 'tree'}) + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + } else: raise ValidationError( - _('Error! Please select the boolean field Add Field to the Tree View.')) + _('Error! Please select the boolean field Add Field to the ' + 'Tree View.')) - @api.depends('model_id','add_field_in_tree') - @api.onchange('model_id','add_field_in_tree') + @api.onchange('model_id', 'is_add_field_in_tree') def set_domain(self): """Return the fields that currently present in the form""" form_view_ids = self.model_id.view_ids.filtered( - lambda l: l.type == 'form' and l.mode == 'primary') + lambda x: x.type == 'form' and x.mode == 'primary') tree_view_ids = self.model_id.view_ids.filtered( - lambda l: l.type == 'tree' and l.mode == 'primary') - fields = self.env['ir.model.fields'].sudo().search([ + lambda x: x.type == 'tree' and x.mode == 'primary') + fields_domain = self.env['ir.model.fields'].sudo().search([ ('model', '=', self.model_id.model)]) field_list = [] - for rec in fields: + for rec in fields_domain: for field in rec: field_list.append(field.id) return {'domain': { 'form_view_id': [('id', 'in', form_view_ids.ids)], 'tree_view_id': [('id', 'in', tree_view_ids.ids)], - 'position_field': [('id', 'in', field_list)] + 'position_field_id': [('id', 'in', field_list)] }} - @api.depends('field_type') @api.onchange('field_type') def onchange_field_type(self): + """Function to determine domain for field widget""" if self.field_type: if self.field_type == 'binary': - return {'domain': {'widget': [('name', '=', 'image')]}} + return {'domain': {'widget_id': [('name', '=', 'image')]}} elif self.field_type == 'many2many': - return {'domain': {'widget': [ + return {'domain': {'widget_id': [ ('name', 'in', ['many2many_tags', 'binary'])]}} elif self.field_type == 'selection': return {'domain': { - 'widget': [('name', 'in', ['radio', 'priority'])]}} + 'widget_id': [('name', 'in', ['radio', 'priority'])]}} elif self.field_type == 'float': - return {'domain': {'widget': [('name', '=', 'monetary')]}} + return {'domain': {'widget_id': [('name', '=', 'monetary')]}} elif self.field_type == 'many2one': - return {'domain': {'widget': [('name', '=', 'selection')]}} + return {'domain': {'widget_id': [('name', '=', 'selection')]}} else: - return {'domain': {'widget': [('id', '=', False)]}} - return {'domain': {'widget': [('id', '=', False)]}} + return {'domain': {'widget_id': [('id', '=', False)]}} + return {'domain': {'widget_id': [('id', '=', False)]}} def unlink(self): - if self.form_view_id: - self.form_view_id.active = False - if self.tree_view_id: - self.tree_view_id.active = False + """Unlink function to make the created tree view and from view to + inactive""" + if self.created_from_id: + self.created_from_id.active = False + if self.created_tree_view_id: + self.created_tree_view_id.active = False res = super(DynamicFields, self).unlink() return res diff --git a/all_in_one_dynamic_custom_fields/models/ir_model_fields.py b/all_in_one_dynamic_custom_fields/models/ir_model_fields.py index a1655428b..f8ff916f9 100644 --- a/all_in_one_dynamic_custom_fields/models/ir_model_fields.py +++ b/all_in_one_dynamic_custom_fields/models/ir_model_fields.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- -################################################################################### +################################################################################ # # Cybrosys Technologies Pvt. Ltd. # -# Copyright (C) 2022-TODAY Cybrosys Technologies (). +# Copyright (C) 2024-TODAY Cybrosys Technologies () # Author: Cybrosys Techno Solutions () # # This program is free software: you can modify @@ -19,7 +19,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -################################################################################### +################################################################################ from odoo import models, fields @@ -28,4 +28,6 @@ class IrModelFields(models.Model): _inherit = 'ir.model.fields' - is_dynamic_field = fields.Boolean(string="Dynamic Field") + is_dynamic_field = fields.Boolean(string="Dynamic Field", + help="id created using All In One " + "Dynamic Custom Fields") diff --git a/all_in_one_dynamic_custom_fields/security/ir.model.access.csv b/all_in_one_dynamic_custom_fields/security/ir.model.access.csv index 9c05b7930..e8d222874 100644 --- a/all_in_one_dynamic_custom_fields/security/ir.model.access.csv +++ b/all_in_one_dynamic_custom_fields/security/ir.model.access.csv @@ -1,5 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_all_in_one_dynamic_custom_fields_administrator,dynamic.fields,model_dynamic_fields,all_in_one_dynamic_custom_fields.group_all_in_one_dynamic_custom_fields_administrator,1,1,1,1 access_all_in_one_dynamic_custom_fields_user,dynamic.fields,model_dynamic_fields,all_in_one_dynamic_custom_fields.group_all_in_one_dynamic_custom_fields_user,1,0,0,0 -access_dynamic_field_widgets,"dynamic.field.widgets","model_dynamic_field_widgets",,1,1,1,1 - +access_dynamic_field_widgets,dynamic.field.widgets,model_dynamic_field_widgets,base.group_user,1,1,1,1 diff --git a/all_in_one_dynamic_custom_fields/security/security.xml b/all_in_one_dynamic_custom_fields/security/security.xml index 763ab2096..b3e463430 100644 --- a/all_in_one_dynamic_custom_fields/security/security.xml +++ b/all_in_one_dynamic_custom_fields/security/security.xml @@ -1,21 +1,21 @@ - + All in One Custom Dynamic Fields Helps you handle your All-in-One Custom Dynamic Fields Permissions 5 - + User - + Administrator @@ -26,7 +26,5 @@ - - diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/0.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/0.png new file mode 100644 index 000000000..08568152f Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/0.png differ diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/1.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..ae05bf1a9 Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/1.png differ diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/2.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..3e7042358 Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/2.png differ diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/3.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..24ba4faef Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/3.png differ diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/4.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..7adaf0495 Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/4.png differ diff --git a/all_in_one_dynamic_custom_fields/static/description/index.html b/all_in_one_dynamic_custom_fields/static/description/index.html index 2c31ce4ea..32ef23280 100644 --- a/all_in_one_dynamic_custom_fields/static/description/index.html +++ b/all_in_one_dynamic_custom_fields/static/description/index.html @@ -171,14 +171,14 @@

Open the module and Click Create Button to create new custom fields and fill the details.Then click the Create Field.

- +

Model

Select the model for which you want to create a custom field.

- +
@@ -186,14 +186,14 @@

Field Type

Choose the field type

- +

List / Tree View

The custom field also we can add to the module List/Tree view.

- +
@@ -209,7 +209,7 @@

Sale Order Tree/List View

A new custom field is created in the sale order tree view.

- + diff --git a/all_in_one_dynamic_custom_fields/views/dynamic_fields.xml b/all_in_one_dynamic_custom_fields/views/dynamic_fields.xml deleted file mode 100644 index 289d182d5..000000000 --- a/all_in_one_dynamic_custom_fields/views/dynamic_fields.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - - custom_dynamic_fields_view_tree - dynamic.fields - - - - - - - - - - - - custom_dynamic_fields_view_form - dynamic.fields - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - Custom Dynamic Fields - dynamic.fields - tree,form - -

- Create New Custom Dynamic Field! -

-
-
- - - - - - -
diff --git a/all_in_one_dynamic_custom_fields/views/dynamic_fields_views.xml b/all_in_one_dynamic_custom_fields/views/dynamic_fields_views.xml new file mode 100644 index 000000000..3deac28b0 --- /dev/null +++ b/all_in_one_dynamic_custom_fields/views/dynamic_fields_views.xml @@ -0,0 +1,116 @@ + + + + + dynamic.fields.view.tree + dynamic.fields + + + + + + + + + + + + dynamic.fields.view.form + dynamic.fields + +
+
+
+ + + + + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + Custom Dynamic Fields + dynamic.fields + tree,form + +

+ Create New Custom Dynamic Field! +

+
+
+ + + + + +