Browse Source

Mar 01 : [ADD] Initial Commit 'employee_dynamic_fields'

pull/313/head
RisvanaCybro 1 year ago
parent
commit
473a44bd0e
  1. 21
      employee_dynamic_fields/README.rst
  2. 19
      employee_dynamic_fields/__init__.py
  3. 9
      employee_dynamic_fields/__manifest__.py
  4. 0
      employee_dynamic_fields/data/employee_field_widgets_data.xml
  5. 4
      employee_dynamic_fields/doc/RELEASE_NOTES.md
  6. 1
      employee_dynamic_fields/models/__init__.py
  7. 9
      employee_dynamic_fields/models/employee_field_widgets.py
  8. 32
      employee_dynamic_fields/models/hr_employee.py
  9. 1
      employee_dynamic_fields/models/ir_model_fields.py
  10. 4
      employee_dynamic_fields/security/ir.model.access.csv
  11. BIN
      employee_dynamic_fields/static/description/assets/modules/1.png
  12. BIN
      employee_dynamic_fields/static/description/assets/modules/2.png
  13. BIN
      employee_dynamic_fields/static/description/assets/modules/4.png
  14. BIN
      employee_dynamic_fields/static/description/assets/modules/5.png
  15. BIN
      employee_dynamic_fields/static/description/assets/modules/6.png
  16. BIN
      employee_dynamic_fields/static/description/assets/modules/7.png
  17. BIN
      employee_dynamic_fields/static/description/assets/modules/m1.png
  18. BIN
      employee_dynamic_fields/static/description/assets/modules/m2.png
  19. BIN
      employee_dynamic_fields/static/description/assets/modules/m3.png
  20. BIN
      employee_dynamic_fields/static/description/assets/modules/m4.png
  21. BIN
      employee_dynamic_fields/static/description/assets/modules/m5.png
  22. BIN
      employee_dynamic_fields/static/description/assets/modules/m6.png
  23. BIN
      employee_dynamic_fields/static/description/assets/screenshots/1.png
  24. BIN
      employee_dynamic_fields/static/description/assets/screenshots/2.png
  25. BIN
      employee_dynamic_fields/static/description/assets/screenshots/3.png
  26. BIN
      employee_dynamic_fields/static/description/assets/screenshots/4.png
  27. BIN
      employee_dynamic_fields/static/description/assets/screenshots/5.png
  28. BIN
      employee_dynamic_fields/static/description/assets/screenshots/6.png
  29. BIN
      employee_dynamic_fields/static/description/assets/screenshots/dynamic1.png
  30. BIN
      employee_dynamic_fields/static/description/assets/screenshots/dynamic2.png
  31. BIN
      employee_dynamic_fields/static/description/assets/screenshots/dynamic3.png
  32. BIN
      employee_dynamic_fields/static/description/assets/screenshots/dynamic4.png
  33. BIN
      employee_dynamic_fields/static/description/assets/screenshots/dynamic5.png
  34. BIN
      employee_dynamic_fields/static/description/assets/screenshots/dynamic6.png
  35. BIN
      employee_dynamic_fields/static/description/assets/screenshots/hero.gif
  36. 51
      employee_dynamic_fields/static/description/index.html
  37. 6
      employee_dynamic_fields/views/ir_model_fields_views.xml
  38. 2
      employee_dynamic_fields/wizards/__init__.py
  39. 67
      employee_dynamic_fields/wizards/employee_dynamic_fields.py
  40. 31
      employee_dynamic_fields/wizards/employee_dynamic_fields_views.xml

21
employee_dynamic_fields/README.rst

@ -12,25 +12,28 @@ Configuration
- www.odoo.com/documentation/16.0/setup/install.html
- Install our custom addon
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPLv3)
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developers: V14: Minhaj T, Contact: odoo@cybrosys.com
V15: Musthafa C, Contact: odoo@cybrosys.com
V16: Viswanth K, Contact: odoo@cybrosys.com
V17: Sruthi Pavithran, Contact: odoo@cybrosys.com
* Developers:
(V14) Minhaj T,
(V15) Musthafa C,
(V16) Viswanth K,
(V17) Sruthi Pavithran
Contact: odoo@cybrosys.com
Contacts
--------
* Contact : odoo@cybrosys.com
* Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
Bug Tracker
-----------

19
employee_dynamic_fields/__init__.py

@ -20,21 +20,4 @@
#
#############################################################################
from . import models
from . import wizard
from odoo import api, SUPERUSER_ID
def uninstall_hook(cr, registry):
"""
It deactivates associated form views, deletes records from the
'ir_model_fields' table, and unlinks the 'employee.dynamic.fields'
records.
"""
env = api.Environment(cr, SUPERUSER_ID, {})
fields = env['employee.dynamic.fields'].search([])
for field in fields:
field.form_view_id.active = False
query = """delete FROM ir_model_fields WHERE name = %s"""
env.cr.execute(query, [field.name])
fields.unlink()
from . import wizards

9
employee_dynamic_fields/__manifest__.py

@ -24,8 +24,8 @@
'version': '17.0.1.0.0',
'category': 'Extra Tools',
'summary': """Ability To Add Custom Fields in Employee From User Level""",
'description': """Ability To Add Custom Fields in Employee From User Level,
Create/Delete Employee Custom Fields.""",
'description': """ Dynamic Fields module helps with easy creation of custom
fields in employee without any coding""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
@ -34,14 +34,13 @@
'data': [
'security/employee_dynamic_fields_groups.xml',
'security/ir.model.access.csv',
'data/employee_field_widgets.xml',
'data/employee_field_widgets_data.xml',
'views/ir_model_fields_views.xml',
'wizard/employee_fields_wizard.xml'
'wizards/employee_dynamic_fields_views.xml'
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
'uninstall_hook': 'uninstall_hook',
}

0
employee_dynamic_fields/data/employee_field_widgets.xml → employee_dynamic_fields/data/employee_field_widgets_data.xml

4
employee_dynamic_fields/doc/RELEASE_NOTES.md

@ -1,6 +1,6 @@
## Module <employee_dynamic_fields>
#### 02.11.2023
#### 29.02.2024
#### Version 17.0.1.0.0
##### ADD
- Initial Commit for employee_dynamic_fields
- Initial Commit for Employee Dynamic Fields

1
employee_dynamic_fields/models/__init__.py

@ -20,4 +20,5 @@
#
#############################################################################
from . import employee_field_widgets
from . import hr_employee
from . import ir_model_fields

9
employee_dynamic_fields/models/employee_field_widgets.py

@ -23,12 +23,11 @@ from odoo import fields, models
class EmployeeFieldWidgets(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.
"""
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'

32
employee_dynamic_fields/models/hr_employee.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Sruthi Pavithran (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class HrEmployee(models.Model):
"""Inherit the hr.employee model for adding fields"""
_description = 'Employee'
_inherit = 'hr.employee'
x_currency_id = fields.Many2one('res.currency',
help="Choose currency",
string='Currency')

1
employee_dynamic_fields/models/ir_model_fields.py

@ -24,7 +24,6 @@ from odoo import fields, models
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",

4
employee_dynamic_fields/security/ir.model.access.csv

@ -1,3 +1,3 @@
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",,1,1,1,1
"access_employee_field_widgets_base_user","wizard.employee.field.widgets.base.user","model_employee_field_widgets",,1,1,1,1
access_employee_field_widgets_user,access.employee.field.widgets.user.user,model_employee_field_widgets,base.group_user,1,1,1,1
access_employee_dynamic_fields_user,access.employee.dynamic.fields.user,model_employee_dynamic_fields,base.group_user,1,1,1,1

1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 access_wizard_employee_dynamic_fields_base_user access_employee_field_widgets_user wizard.employee.dynamic.fields.base.user access.employee.field.widgets.user.user model_employee_dynamic_fields model_employee_field_widgets base.group_user 1 1 1 1
3 access_employee_field_widgets_base_user access_employee_dynamic_fields_user wizard.employee.field.widgets.base.user access.employee.dynamic.fields.user model_employee_field_widgets model_employee_dynamic_fields base.group_user 1 1 1 1

BIN
employee_dynamic_fields/static/description/assets/modules/1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/5.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/6.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/7.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/m1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/m2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/m3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/m4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/m5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
employee_dynamic_fields/static/description/assets/modules/m6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/dynamic1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/dynamic2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 801 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/dynamic3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 439 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/dynamic4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/dynamic5.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/dynamic6.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

BIN
employee_dynamic_fields/static/description/assets/screenshots/hero.gif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 KiB

After

Width:  |  Height:  |  Size: 248 KiB

51
employee_dynamic_fields/static/description/index.html

@ -147,7 +147,7 @@
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/dynamic1.png"
<img src="assets/screenshots/1.png"
class="img-responsive" width="100%"
height="auto">
</div>
@ -164,7 +164,7 @@
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/dynamic2.png"
<img src="assets/screenshots/2.png"
class="img-responsive" width="100%"
height="auto">
</div>
@ -181,7 +181,7 @@
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/dynamic3.png"
<img src="assets/screenshots/3.png"
class="img-responsive" width="100%"
height="auto">
</div>
@ -199,7 +199,7 @@
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/dynamic4.png"
<img src="assets/screenshots/4.png"
class="img-responsive" width="100%"
height="auto">
</div>
@ -216,7 +216,7 @@
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/dynamic5.png"
<img src="assets/screenshots/5.png"
class="img-responsive" width="100%"
height="auto">
</div>
@ -233,15 +233,14 @@
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/dynamic6.png"
<img src="assets/screenshots/6.png"
class="img-responsive" width="100%"
height="auto">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
We Can delete the dynamically created
fields from the menu.</h4>
We can remove dynamically created fields from the menu. When deleting, first deactivate the menu that was created.</h4>
</div>
</div>
</div>
@ -326,51 +325,51 @@
<div class="row p-4">
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/16.0/whatsapp_redirect/"
<a href="https://apps.odoo.com/apps/modules/17.0/invoice_format_editor/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/1.png"
<img src="assets/modules/m1.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
SEND WHATSAPP MESSAGE</p>
Invoice Format Editor</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/16.0/login_user_detail/"
<a href="https://apps.odoo.com/apps/modules/17.0/inventory_barcode_scanning/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/2.png"
<img src="assets/modules/m2.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
USER LOG DETAILS</p>
Barcode scanning in Inventory</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/16.0/access_restriction_by_ip/"
<a href="https://apps.odoo.com/apps/modules/17.0/whatsapp_redirect/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/7.png"
<img src="assets/modules/m3.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
ACCESS RESTRICTION BY IP</p>
Send Whatsapp Message</p>
</div>
</a>
</div>
@ -381,50 +380,50 @@
<div class="row p-4">
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/16.0/odoo_dynamic_dashboard/"
<a href="https://apps.odoo.com/apps/modules/17.0/base_account_budget/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/4.png"
<img src="assets/modules/m4.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
DYNAMIC DASHBOARD</p>
Budget Management</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/16.0/hide_menu_user/"
<a href="https://apps.odoo.com/apps/modules/17.0/product_barcode/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px;">
<img src="assets/modules/5.png"
<img src="assets/modules/m5.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
HIDE ANY MENU USER WISE</p>
Product Barcode Generator</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/16.0/list_view_sticky_header/"
<a href="https://apps.odoo.com/apps/modules/17.0/export_stockinfo_xls/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px;">
<img src="assets/modules/6.png"
<img src="assets/modules/m6.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
LIST VIEW STICKY HEADER</p>
Export Product Stock in Excel</p>
</div>
</a>
</div>

6
employee_dynamic_fields/views/ir_model_fields_views.xml

@ -1,8 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Create search view for dynamic fields-->
<!-- Create search view for dynamic fields-->
<record id="view_model_fields_search" model="ir.ui.view">
<field name="name">view.fields.search.inherit.employee.dynamic.fields</field>
<field name="name">
ir.model.fields.search.inherit.employee.dynamic.fields
</field>
<field name="model">ir.model.fields</field>
<field name="inherit_id" ref="base.view_model_fields_search"/>
<field name="arch" type="xml">

2
employee_dynamic_fields/wizard/__init__.py → employee_dynamic_fields/wizards/__init__.py

@ -19,4 +19,4 @@
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import employee_fields_wizard
from . import employee_dynamic_fields

67
employee_dynamic_fields/wizard/employee_fields_wizard.py → employee_dynamic_fields/wizards/employee_dynamic_fields.py

@ -21,6 +21,7 @@
#############################################################################
import xml.etree.ElementTree as xee
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
class EmployeeDynamicFields(models.TransientModel):
@ -62,7 +63,7 @@ class EmployeeDynamicFields(models.TransientModel):
def _set_default(self):
"""
This method is used to set a default filter in a domain expression
for the 'hr.employee' model.It retrieves the ID of the
for the 'hr.employee' model. It retrieves the ID of the
'hr.employee' model using a search query and sets it as a default
filter in the domain expression.
"""
@ -77,7 +78,7 @@ class EmployeeDynamicFields(models.TransientModel):
the 'ir.model.fields' table, extends the 'hr.view_employee_form'
view.
"""
self.env['ir.model.fields'].sudo().create(
self.created_menu_id = self.env['ir.model.fields'].sudo().create(
{'name': self.name,
'field_description': self.field_description,
'model_id': self.model_id.id,
@ -141,18 +142,49 @@ class EmployeeDynamicFields(models.TransientModel):
index=True)
selection_field = fields.Char(string="Selection Options")
rel_field_id = fields.Many2one('ir.model.fields',
string='Related Field')
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',
help="Specifies the type of the field")
widget_id = fields.Many2one('employee.field.widgets',
string='Widget', help="Widget of the field")
string='Widget', help="Widget of the field")
# Already existing field
groups = fields.Many2many('res.groups',
'employee_dynamic_fields_group_rel',
'field_id', 'group_id')
'fields_group_rel',
'id_field', 'id_group',
string='Groups', help="User groups")
extra_features = fields.Boolean(string="Show Extra Properties",
help="Add extra features for the field")
created_menu_id = fields.Many2one('ir.model.fields', string='Created Menu',
help="Menu created using the dynamic "
"field creation option")
menu_state = fields.Selection([('active', 'Active'),
('inactive', 'Inactive')], string='State',
help="State of the created menu",
default='active')
def action_deactivate_menu(self):
"""Method action_deactivate_menu to deactivate the created menu and the
created view"""
if self.form_view_id:
self.form_view_id.active = False
self.menu_state = 'inactive'
return {
'type': 'ir.actions.client',
'tag': 'reload',
}
def action_activate_menu(self):
"""Method action_activate_menu to activate the created menu and the
created view"""
if self.form_view_id:
self.form_view_id.active = True
self.menu_state = 'active'
return {
'type': 'ir.actions.client',
'tag': 'reload',
}
@api.depends('field_type')
@api.onchange('field_type')
@ -167,7 +199,8 @@ class EmployeeDynamicFields(models.TransientModel):
return {'domain': {'widget_id': [('name', '=', 'image')]}}
elif self.field_type == 'many2many':
return {'domain': {
'widget_id': [('name', 'in', ['many2many_tags', 'binary'])]}}
'widget_id': [
('name', 'in', ['many2many_tags', 'binary'])]}}
elif self.field_type == 'selection':
return {'domain': {
'widget_id': [('name', 'in', ['radio', 'priority'])]}}
@ -185,21 +218,9 @@ class EmployeeDynamicFields(models.TransientModel):
an instance of 'EmployeeDynamicFields' and deactivate the related
form view.
"""
if self.menu_state == 'active':
raise ValidationError(_("You cannot delete a menu that is active"))
if self.form_view_id:
self.form_view_id.active = False
for field in self:
query = """delete FROM ir_model_fields WHERE name = %s"""
self.env.cr.execute(query, [field.name])
self.form_view_id.unlink()
self.created_menu_id.unlink()
return super(EmployeeDynamicFields, self).unlink()
class HrEmployee(models.Model):
"""
Inherit the hr.employee model for adding fields
"""
_description = 'Employee'
_inherit = 'hr.employee'
x_currency_id = fields.Many2one('res.currency',
help="Choose currency",
string='Currency')

31
employee_dynamic_fields/wizard/employee_fields_wizard.xml → employee_dynamic_fields/wizards/employee_dynamic_fields_views.xml

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Wizard view for creating new fields -->
<!-- Wizard view for creating new fields -->
<record id='employee_dynamic_fields_view_form' model='ir.ui.view'>
<field name="name">employee.dynamic.fields.view.form</field>
<field name="model">employee.dynamic.fields</field>
@ -59,6 +59,7 @@
</form>
</field>
</record>
<!--Tree view of the model employee dynamic fields-->
<record id='employee_dynamic_fields_view_tree' model='ir.ui.view'>
<field name="name">employee.dynamic.fields.view.tree</field>
<field name="model">employee.dynamic.fields</field>
@ -67,17 +68,29 @@
<field name="name"/>
<field name="field_description"/>
<field name="ttype"/>
<field name="menu_state"
decoration-success="menu_state == 'active'"
decoration-danger="menu_state == 'inactive'"
widget="badge"/>
<button name="action_deactivate_menu" string="Deactivate"
type="object"
invisible="menu_state == 'inactive'"/>
<button name="action_activate_menu" string="Activate"
type="object"
invisible="menu_state == 'active'"/>
</tree>
</field>
</record>
<record id='action_employee_dynamic_fields' model='ir.actions.act_window'>
<!--Employee dynamic fields action-->
<record id='employee_dynamic_fields_action' model='ir.actions.act_window'>
<field name="name">Create Custom Fields</field>
<field name="res_model">employee.dynamic.fields</field>
<field name="view_mode">form</field>
<field name="view_id" ref="employee_dynamic_fields_view_form"/>
<field name="target">new</field>
</record>
<record id="action_employee_dynamic_fields_delete"
<!--Employee dynamic fields delete action-->
<record id="employee_dynamic_fields_action_delete"
model="ir.actions.act_window">
<field name="name">Delete Fields</field>
<field name="res_model">employee.dynamic.fields</field>
@ -91,15 +104,15 @@
</record>
<!-- Menu Item in Employee to create fields -->
<menuitem id="employee_dynamic_fields_menu"
name="Create Fields"
parent="hr.menu_hr_employee_payroll"
action="employee_dynamic_fields.action_employee_dynamic_fields"
groups="employee_dynamic_fields.employee_dynamic_fields_group_add_employee_custom_fields"
sequence="10"/>
name="Create Fields"
parent="hr.menu_hr_employee_payroll"
action="employee_dynamic_fields.employee_dynamic_fields_action"
groups="employee_dynamic_fields.employee_dynamic_fields_group_add_employee_custom_fields"
sequence="10"/>
<menuitem id="employee_dynamic_fields_menu_delete"
name="Delete Fields"
parent="hr.menu_hr_employee_payroll"
action="action_employee_dynamic_fields_delete"
action="employee_dynamic_fields_action_delete"
groups="employee_dynamic_fields.employee_dynamic_fields_group_add_employee_custom_fields"
sequence="12"/>
</odoo>
Loading…
Cancel
Save