diff --git a/employee_dynamic_fields/README.rst b/employee_dynamic_fields/README.rst new file mode 100644 index 000000000..d85a12b67 --- /dev/null +++ b/employee_dynamic_fields/README.rst @@ -0,0 +1,43 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Employee Dynamic Fields +======================= + +Employee Dynamic Fields + +Installation +============ +- www.odoo.com/documentation/13.0/setup/install.html +- Install our custom addon + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +* Developer: + Cybrosys Techno Solutions + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ \ No newline at end of file diff --git a/employee_dynamic_fields/__init__.py b/employee_dynamic_fields/__init__.py new file mode 100644 index 000000000..350976f47 --- /dev/null +++ b/employee_dynamic_fields/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies (). +# Author: Ajmal JK () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### + +from . import models +from . import wizard diff --git a/employee_dynamic_fields/__manifest__.py b/employee_dynamic_fields/__manifest__.py new file mode 100644 index 000000000..5fe9a553a --- /dev/null +++ b/employee_dynamic_fields/__manifest__.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### + +{ + 'name': 'Employee Dynamic Fields', + 'version': '13.0.1.0.0', + 'summary': """Ability To Add Custom Fields in Employee From User Level""", + 'description': """Ability To Add Custom Fields in Employee From User Level,Employee Custom Fields, + Employee Dynamic Fields, odoo13, Dynamic Employee Fields, Dynamic Fields, Create Dynamic Fields, Community odoo Studio""", + 'category': 'Extra Tools', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['hr'], + 'data': [ + 'data/widget_data.xml', + 'security/ir.model.access.csv', + 'security/employee_security_group.xml', + 'wizard/employee_fields_view.xml', + 'views/ir_fields_search_view.xml', + ], + 'images': ['static/description/banner.png'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/employee_dynamic_fields/data/widget_data.xml b/employee_dynamic_fields/data/widget_data.xml new file mode 100644 index 000000000..8f1ba671a --- /dev/null +++ b/employee_dynamic_fields/data/widget_data.xml @@ -0,0 +1,40 @@ + + + + + + image + Image + + + + many2many_tags + Many2many Tags + + + + binary + Binary + + + + radio + Radio + + + + priority + Priority + + + + monetary + Monetary + + + + selection + Selection + + + diff --git a/employee_dynamic_fields/doc/RELEASE_NOTES.md b/employee_dynamic_fields/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..7204794f5 --- /dev/null +++ b/employee_dynamic_fields/doc/RELEASE_NOTES.md @@ -0,0 +1,9 @@ +## Module + +#### 07.04.2020 +#### Version 13.0.1.0.0 +##### ADD + +- Initial Commit for employee_dynamic_fields + + diff --git a/employee_dynamic_fields/models/__init__.py b/employee_dynamic_fields/models/__init__.py new file mode 100644 index 000000000..eac19c54f --- /dev/null +++ b/employee_dynamic_fields/models/__init__.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# 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 + + diff --git a/employee_dynamic_fields/models/field_widgets.py b/employee_dynamic_fields/models/field_widgets.py new file mode 100644 index 000000000..7c988b421 --- /dev/null +++ b/employee_dynamic_fields/models/field_widgets.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### + +from odoo import api, 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. + """ + + _name = 'employee.field.widgets' + _rec_name = 'description' + _description = 'Field Widgets' + + name = fields.Char(string="Name") + description = fields.Char(string="Description") diff --git a/employee_dynamic_fields/models/ir_model_fields.py b/employee_dynamic_fields/models/ir_model_fields.py new file mode 100644 index 000000000..dafdf9ff0 --- /dev/null +++ b/employee_dynamic_fields/models/ir_model_fields.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### + +from odoo import api, models, fields, _ + + +class IrModelFields(models.Model): + """Adding a new field to understand the dynamically created fields.""" + + _inherit = 'ir.model.fields' + + is_employee_dynamic = fields.Boolean(string="Dynamic Field") diff --git a/employee_dynamic_fields/security/employee_security_group.xml b/employee_dynamic_fields/security/employee_security_group.xml new file mode 100644 index 000000000..a925aa4cc --- /dev/null +++ b/employee_dynamic_fields/security/employee_security_group.xml @@ -0,0 +1,8 @@ + + + + + Create Employee Custom Fields + + + diff --git a/employee_dynamic_fields/security/ir.model.access.csv b/employee_dynamic_fields/security/ir.model.access.csv new file mode 100644 index 000000000..f872a12c8 --- /dev/null +++ b/employee_dynamic_fields/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink +"access_wizard_employee_dynamic_fields_base_user","wizard.employee.dynamic.fields.base.user","model_employee_dynamic_fields","base.group_user",1,1,1,1 +"access_employee_field_widgets_base_user","wizard.employee.field.widgets.base.user","model_employee_field_widgets","base.group_user",1,1,1,1 + diff --git a/employee_dynamic_fields/static/description/banner.png b/employee_dynamic_fields/static/description/banner.png new file mode 100644 index 000000000..ab7b93af3 Binary files /dev/null and b/employee_dynamic_fields/static/description/banner.png differ diff --git a/employee_dynamic_fields/static/description/icon.png b/employee_dynamic_fields/static/description/icon.png new file mode 100644 index 000000000..6c3471a38 Binary files /dev/null and b/employee_dynamic_fields/static/description/icon.png differ diff --git a/employee_dynamic_fields/static/description/images/banner_barcode_scanning.jpeg b/employee_dynamic_fields/static/description/images/banner_barcode_scanning.jpeg new file mode 100644 index 000000000..529143e4e Binary files /dev/null and b/employee_dynamic_fields/static/description/images/banner_barcode_scanning.jpeg differ diff --git a/employee_dynamic_fields/static/description/images/banner_currency_total.png b/employee_dynamic_fields/static/description/images/banner_currency_total.png new file mode 100644 index 000000000..6153ed719 Binary files /dev/null and b/employee_dynamic_fields/static/description/images/banner_currency_total.png differ diff --git a/employee_dynamic_fields/static/description/images/banner_customer_sequence.jpeg b/employee_dynamic_fields/static/description/images/banner_customer_sequence.jpeg new file mode 100644 index 000000000..7451342d6 Binary files /dev/null and b/employee_dynamic_fields/static/description/images/banner_customer_sequence.jpeg differ diff --git a/employee_dynamic_fields/static/description/images/banner_previous_rates.jpeg b/employee_dynamic_fields/static/description/images/banner_previous_rates.jpeg new file mode 100644 index 000000000..e10c28799 Binary files /dev/null and b/employee_dynamic_fields/static/description/images/banner_previous_rates.jpeg differ diff --git a/employee_dynamic_fields/static/description/images/banner_product_branding.png b/employee_dynamic_fields/static/description/images/banner_product_branding.png new file mode 100644 index 000000000..aa12beabb Binary files /dev/null and b/employee_dynamic_fields/static/description/images/banner_product_branding.png differ diff --git a/employee_dynamic_fields/static/description/images/banner_product_expiry.jpeg b/employee_dynamic_fields/static/description/images/banner_product_expiry.jpeg new file mode 100644 index 000000000..84a872d44 Binary files /dev/null and b/employee_dynamic_fields/static/description/images/banner_product_expiry.jpeg differ diff --git a/employee_dynamic_fields/static/description/images/checked.png b/employee_dynamic_fields/static/description/images/checked.png new file mode 100644 index 000000000..578cedb80 Binary files /dev/null and b/employee_dynamic_fields/static/description/images/checked.png differ diff --git a/employee_dynamic_fields/static/description/images/cybrosys.png b/employee_dynamic_fields/static/description/images/cybrosys.png new file mode 100644 index 000000000..d76b5bafb Binary files /dev/null and b/employee_dynamic_fields/static/description/images/cybrosys.png differ diff --git a/employee_dynamic_fields/static/description/images/employee_dynamic_fields_1.png b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_1.png new file mode 100644 index 000000000..bc7e78c5e Binary files /dev/null and b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_1.png differ diff --git a/employee_dynamic_fields/static/description/images/employee_dynamic_fields_2.png b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_2.png new file mode 100644 index 000000000..6455f4719 Binary files /dev/null and b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_2.png differ diff --git a/employee_dynamic_fields/static/description/images/employee_dynamic_fields_6.png b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_6.png new file mode 100644 index 000000000..474c91c89 Binary files /dev/null and b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_6.png differ diff --git a/employee_dynamic_fields/static/description/images/employee_dynamic_fields_7.png b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_7.png new file mode 100644 index 000000000..a885d0437 Binary files /dev/null and b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_7.png differ diff --git a/employee_dynamic_fields/static/description/images/employee_dynamic_fields_8.png b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_8.png new file mode 100644 index 000000000..efaf66c0e Binary files /dev/null and b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_8.png differ diff --git a/employee_dynamic_fields/static/description/images/employee_dynamic_fields_main.png b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_main.png new file mode 100644 index 000000000..1b670bdbb Binary files /dev/null and b/employee_dynamic_fields/static/description/images/employee_dynamic_fields_main.png differ diff --git a/employee_dynamic_fields/static/description/index.html b/employee_dynamic_fields/static/description/index.html new file mode 100644 index 000000000..e255f9dc8 --- /dev/null +++ b/employee_dynamic_fields/static/description/index.html @@ -0,0 +1,547 @@ +
+ cybrosys-logo
+
+
+
+

Employee Dynamic Fields

+

Create Custom Fields in Employee from User + level.

+
+

Key Highlights

+
    +
  • checkCreates + custom fields in Employee. +
  • +
+
+
+
+
+
+
+
+ +
+
+ +

Overview

+
+

+ Employee Dynamic Fields module helps with easy creation of custom fields in employee without any coding. This module helps to add new fields on the employee form as per one's requirement. From the Employee menu, one can click create fields and can create a new custom field without any coding. +

+
+
+ +

Employee Dynamic Fields

+
+
    +
  • + checkCreates + custom fields in employee without coding +
  • +
  • + checkCan + easily set the position of fields +
  • +
  • + checkCan + select widgets for fields +
  • +
  • + checkCan + set the field properties (help,required,copied,read-only,indexed). +
  • +
  • + checkCan + easily filter the dynamically created fields from settings. +
  • +
+
+ +
+
+

Screenshots

+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + +
+
    +
+
+
+
+
+
+
+

Suggested Products

+
+ +
+
+

Our Service

+
+ +
+
+
+

Our Industries

+
+ +
+
+
+
+ Odoo Industry
+
+
+

+ + Trading

+

+ Easily procure and sell your products.

+
+
+
+
+
+ Odoo Industry +
+
+
+

+ + Manufacturing

+

+ Plan, track and schedule your operations.

+
+
+
+
+
+ + Odoo Industry
+
+
+

+ + Restaurant

+

+ Run your bar or restaurant methodical.

+
+
+
+
+
+ Odoo Industry
+
+
+

+ + POS

+

+ Easy configuring and convivial selling.

+
+
+
+
+
+ Odoo Industry
+
+
+

+ + E-commerce & Website

+

+ Mobile friendly, awe-inspiring product pages.

+
+
+
+
+
+ + Odoo Industry
+
+
+

+ + Hotel Management

+

+ An all-inclusive hotel management application.

+
+
+
+
+
+ + Odoo Industry
+
+
+

+ + Education

+

+ A Collaborative platform for educational management.

+
+
+
+
+
+ Odoo Industry
+
+
+

+ + Service Management

+

+ Keep track of services and invoice accordingly.

+
+
+
+
+
+ +
+
+
+

Need Any Help?

+
+

If you have anything to share with us based on your use of this module, please + let us know. We are ready to offer our support.

+
+

Email us

+

odoo@cybrosys.com / info@cybrosys.com

+
+
+

Contact Us

+ www.cybrosys.com +
+
+
+
+
+
+
+
+
+ +
+ + + + + + + +
+
+
+ \ No newline at end of file diff --git a/employee_dynamic_fields/views/ir_fields_search_view.xml b/employee_dynamic_fields/views/ir_fields_search_view.xml new file mode 100644 index 000000000..c2133bf4e --- /dev/null +++ b/employee_dynamic_fields/views/ir_fields_search_view.xml @@ -0,0 +1,15 @@ + + + + + ir.model.fields.employee.dynamic.fields + ir.model.fields + + + + + + + + + diff --git a/employee_dynamic_fields/wizard/__init__.py b/employee_dynamic_fields/wizard/__init__.py new file mode 100644 index 000000000..27c0be9cd --- /dev/null +++ b/employee_dynamic_fields/wizard/__init__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### + +from . import employee_fields + + diff --git a/employee_dynamic_fields/wizard/employee_fields.py b/employee_dynamic_fields/wizard/employee_fields.py new file mode 100644 index 000000000..253a812f1 --- /dev/null +++ b/employee_dynamic_fields/wizard/employee_fields.py @@ -0,0 +1,133 @@ +# -*- coding: utf-8 -*- +################################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### + +import xml.etree.ElementTree as xee +from odoo import api, models, fields, _ + + +class EmployeeDynamicFields(models.TransientModel): + _name = 'employee.dynamic.fields' + _description = 'Dynamic Fields' + _inherit = 'ir.model.fields' + + @api.model + def get_possible_field_types(self): + """Return all available field types other than 'one2many' and 'reference' fields.""" + field_list = sorted((key, key) for key in fields.MetaField.by_type) + field_list.remove(('one2many', 'one2many')) + field_list.remove(('reference', 'reference')) + return field_list + + def set_domain(self): + """Return the fields that currently present in the form""" + view_id = self.env.ref('hr.view_employee_form') + view_arch = str(view_id.arch_base) + doc = xee.fromstring(view_arch) + field_list = [] + for tag in doc.findall('.//field'): + if tag.attrib.get('invisible'): + pass + else: + field_list.append(tag.attrib['name']) + model_id = self.env['ir.model'].sudo().search([('model', '=', 'hr.employee')]) + return [('model_id', '=', model_id.id), ('state', '=', 'base'), ('name', 'in', field_list)] + + def _set_default(self): + model_id = self.env['ir.model'].sudo().search([('model', '=', 'hr.employee')]) + return [('id', '=', model_id.id)] + + def create_fields(self): + self.env['ir.model.fields'].sudo().create({'name': self.name, + 'field_description': self.field_description, + 'model_id': self.model_id.id, + 'ttype': self.field_type, + 'relation': self.ref_model_id.model, + 'required': self.required, + 'index': self.index, + 'store': self.store, + 'help': self.help, + 'readonly': self.readonly, + 'selection': self.selection_field, + 'copied': self.copied, + 'is_employee_dynamic': True + }) + inherit_id = self.env.ref('hr.view_employee_form') + arch_base = _('' + '' + '' + '' + '' + '') % (self.position_field.name, self.position, self.name) + if self.widget: + arch_base = _('' + '' + '' + '' + '' + '') % (self.position_field.name, self.position, self.name, self.widget.name) + + self.env['ir.ui.view'].sudo().create({'name': 'employee.dynamic.fields.%s' % self.name, + 'type': 'form', + 'model': 'hr.employee', + 'mode': 'extension', + 'inherit_id': inherit_id.id, + 'arch_base': arch_base, + 'active': True}) + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + } + + position_field = fields.Many2one('ir.model.fields', string='Field Name', + domain=set_domain, required=True) + position = fields.Selection([('before', 'Before'), + ('after', 'After')], string='Position', required=True) + model_id = fields.Many2one('ir.model', string='Model', required=True, index=True, ondelete='cascade', + help="The model this field belongs to", domain=_set_default) + ref_model_id = fields.Many2one('ir.model', string='Model', index=True) + # In odoo 13 the field 'selection' is deprecated, so adding a new field to get the selection values. + selection_field = fields.Char(string="Selection Options") + rel_field = fields.Many2one('ir.model.fields', string='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('employee.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") + + @api.depends('field_type') + @api.onchange('field_type') + def onchange_field_type(self): + if self.field_type: + if self.field_type == 'binary': + return {'domain': {'widget': [('name', '=', 'image')]}} + elif self.field_type == 'many2many': + return {'domain': {'widget': [('name', 'in', ['many2many_tags', 'binary'])]}} + elif self.field_type == 'selection': + return {'domain': {'widget': [('name', 'in', ['radio', 'priority'])]}} + elif self.field_type == 'float': + return {'domain': {'widget': [('name', '=', 'monetary')]}} + elif self.field_type == 'many2one': + return {'domain': {'widget': [('name', '=', 'selection')]}} + else: + return {'domain': {'widget': [('id', '=', False)]}} + return {'domain': {'widget': [('id', '=', False)]}} diff --git a/employee_dynamic_fields/wizard/employee_fields_view.xml b/employee_dynamic_fields/wizard/employee_fields_view.xml new file mode 100644 index 000000000..a54b3c17f --- /dev/null +++ b/employee_dynamic_fields/wizard/employee_fields_view.xml @@ -0,0 +1,74 @@ + + + + + employee.dynamic.fields.form + employee.dynamic.fields + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + Create Custom Fields + employee.dynamic.fields + form + + new + + + + + +