Browse Source

Apr 25: [ADD] Initial Commit 'crm_dynamic_fields'

pull/254/merge
RisvanaCybro 1 year ago
parent
commit
875f7a38bd
  1. 48
      crm_dynamic_fields/README.rst
  2. 23
      crm_dynamic_fields/__init__.py
  3. 48
      crm_dynamic_fields/__manifest__.py
  4. 41
      crm_dynamic_fields/data/crm_dynamic_fields_widget_data.xml
  5. 5
      crm_dynamic_fields/doc/RELEASE_NOTES.md
  6. 23
      crm_dynamic_fields/models/__init__.py
  7. 34
      crm_dynamic_fields/models/crm_field_widgets.py
  8. 32
      crm_dynamic_fields/models/ir_model_fields.py
  9. 8
      crm_dynamic_fields/security/crm_dynamic_fields_groups.xml
  10. 3
      crm_dynamic_fields/security/ir.model.access.csv
  11. BIN
      crm_dynamic_fields/static/description/assets/icons/check.png
  12. BIN
      crm_dynamic_fields/static/description/assets/icons/chevron.png
  13. BIN
      crm_dynamic_fields/static/description/assets/icons/cogs.png
  14. BIN
      crm_dynamic_fields/static/description/assets/icons/consultation.png
  15. BIN
      crm_dynamic_fields/static/description/assets/icons/ecom-black.png
  16. BIN
      crm_dynamic_fields/static/description/assets/icons/education-black.png
  17. BIN
      crm_dynamic_fields/static/description/assets/icons/hotel-black.png
  18. BIN
      crm_dynamic_fields/static/description/assets/icons/license.png
  19. BIN
      crm_dynamic_fields/static/description/assets/icons/lifebuoy.png
  20. BIN
      crm_dynamic_fields/static/description/assets/icons/manufacturing-black.png
  21. BIN
      crm_dynamic_fields/static/description/assets/icons/pos-black.png
  22. BIN
      crm_dynamic_fields/static/description/assets/icons/puzzle.png
  23. BIN
      crm_dynamic_fields/static/description/assets/icons/restaurant-black.png
  24. BIN
      crm_dynamic_fields/static/description/assets/icons/service-black.png
  25. BIN
      crm_dynamic_fields/static/description/assets/icons/trading-black.png
  26. BIN
      crm_dynamic_fields/static/description/assets/icons/training.png
  27. BIN
      crm_dynamic_fields/static/description/assets/icons/update.png
  28. BIN
      crm_dynamic_fields/static/description/assets/icons/user.png
  29. BIN
      crm_dynamic_fields/static/description/assets/icons/wrench.png
  30. BIN
      crm_dynamic_fields/static/description/assets/misc/categories.png
  31. BIN
      crm_dynamic_fields/static/description/assets/misc/check-box.png
  32. BIN
      crm_dynamic_fields/static/description/assets/misc/compass.png
  33. BIN
      crm_dynamic_fields/static/description/assets/misc/corporate.png
  34. BIN
      crm_dynamic_fields/static/description/assets/misc/customer-support.png
  35. BIN
      crm_dynamic_fields/static/description/assets/misc/cybrosys-logo.png
  36. BIN
      crm_dynamic_fields/static/description/assets/misc/features.png
  37. BIN
      crm_dynamic_fields/static/description/assets/misc/logo.png
  38. BIN
      crm_dynamic_fields/static/description/assets/misc/pictures.png
  39. BIN
      crm_dynamic_fields/static/description/assets/misc/pie-chart.png
  40. BIN
      crm_dynamic_fields/static/description/assets/misc/right-arrow.png
  41. BIN
      crm_dynamic_fields/static/description/assets/misc/star.png
  42. BIN
      crm_dynamic_fields/static/description/assets/misc/support.png
  43. BIN
      crm_dynamic_fields/static/description/assets/misc/whatsapp.png
  44. BIN
      crm_dynamic_fields/static/description/assets/modules/module_image (1).png
  45. BIN
      crm_dynamic_fields/static/description/assets/modules/module_image (2).png
  46. BIN
      crm_dynamic_fields/static/description/assets/modules/module_image (4).png
  47. BIN
      crm_dynamic_fields/static/description/assets/modules/module_image (5).png
  48. BIN
      crm_dynamic_fields/static/description/assets/modules/module_image (6).png
  49. BIN
      crm_dynamic_fields/static/description/assets/modules/module_image.png
  50. BIN
      crm_dynamic_fields/static/description/assets/screenshots/1.png
  51. BIN
      crm_dynamic_fields/static/description/assets/screenshots/2.png
  52. BIN
      crm_dynamic_fields/static/description/assets/screenshots/3.png
  53. BIN
      crm_dynamic_fields/static/description/assets/screenshots/4.png
  54. BIN
      crm_dynamic_fields/static/description/assets/screenshots/5.png
  55. BIN
      crm_dynamic_fields/static/description/assets/screenshots/6.png
  56. BIN
      crm_dynamic_fields/static/description/assets/screenshots/7.png
  57. BIN
      crm_dynamic_fields/static/description/assets/screenshots/8.png
  58. BIN
      crm_dynamic_fields/static/description/assets/screenshots/v15-hero.gif
  59. BIN
      crm_dynamic_fields/static/description/banner.jpg
  60. BIN
      crm_dynamic_fields/static/description/icon.png
  61. 644
      crm_dynamic_fields/static/description/index.html
  62. 22
      crm_dynamic_fields/views/crm_lead_views.xml
  63. 17
      crm_dynamic_fields/views/ir_model_fields_views.xml
  64. 22
      crm_dynamic_fields/wizard/__init__.py
  65. 265
      crm_dynamic_fields/wizard/crm_dynamic_fields.py
  66. 104
      crm_dynamic_fields/wizard/crm_dynamic_fields_views.xml

48
crm_dynamic_fields/README.rst

@ -0,0 +1,48 @@
.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
CRM Dynamic Fields
==================
This module helps you to create custom field in CRM without any technical knowledge.
Configuration
=============
- Add user in create custom field group
License
-------
General Public License, Version 3 (LGPL v3).
(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developer: (V16) Dhanya Babu,
(V15) Ayana KP,
Contact:odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
* Website : https://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 <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

23
crm_dynamic_fields/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Ayana KP (<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import models
from . import wizard

48
crm_dynamic_fields/__manifest__.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Ayana KP (<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'CRM Dynamic Fields',
'version': '15.0.1.0.0',
'category': 'Extra Tools',
'summary': "Adding Custom Fields for Opportunity from user interface in "
"odoo15",
'description': "Adding Custom Fields for Opportunity,"
"without any technical knowledge,Odoo16",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': ['crm'],
'data': [
'security/crm_dynamic_fields_groups.xml',
'security/ir.model.access.csv',
'data/crm_dynamic_fields_widget_data.xml',
'wizard/crm_dynamic_fields_views.xml',
'views/crm_lead_views.xml',
'views/ir_model_fields_views.xml',
],
'images': ['static/description/banner.jpg'],
'license': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

41
crm_dynamic_fields/data/crm_dynamic_fields_widget_data.xml

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Widget 'image' for 'binary' field -->
<record id="crm_field_image_widgets" model="crm.field.widgets">
<field name="name">image</field>
<field name="description">Image</field>
</record>
<!-- Widget 'many2many_tags' for 'many2many' field -->
<record id="crm_field_many2many_tag_widget" model="crm.field.widgets">
<field name="name">many2many_tags</field>
<field name="description">Many2many Tags</field>
</record>
<!-- Widget 'binary' for 'many2many' field -->
<record id="crm_field_many2many_binary_widget"
model="crm.field.widgets">
<field name="name">binary</field>
<field name="description">Binary</field>
</record>
<!-- Widget 'radio' for 'selection' field -->
<record id="crm_field_radio_widget" model="crm.field.widgets">
<field name="name">radio</field>
<field name="description">Radio</field>
</record>
<!-- Widget 'priority' for 'selection' field -->
<record id="crm_field_priority_widget" model="crm.field.widgets">
<field name="name">priority</field>
<field name="description">Priority</field>
</record>
<!-- Widget 'monetory' for 'float' field -->
<record id="crm_field_monetory_widget" model="crm.field.widgets">
<field name="name">monetary</field>
<field name="description">Monetary</field>
</record>
<!-- Widget 'selection' for 'Many2one' field -->
<record id="crm_field_selection_widget" model="crm.field.widgets">
<field name="name">selection</field>
<field name="description">Selection</field>
</record>
</data>
</odoo>

5
crm_dynamic_fields/doc/RELEASE_NOTES.md

@ -0,0 +1,5 @@
## Module <crm_dynamic_fields>
#### 04.03.2024
#### Version 15.0.1.0.0
#### ADD
- Initial Commit for CRM Dynamic Fields

23
crm_dynamic_fields/models/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Ayana KP (<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import crm_field_widgets
from . import ir_model_fields

34
crm_dynamic_fields/models/crm_field_widgets.py

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Ayana KP (<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class CRMFieldWidgets(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 = 'crm.field.widgets'
_description = 'CRM Field Widgets'
name = fields.Char(string="Name", help='Name of the widget')
description = fields.Char(string="Description",
help='Description of the widget')

32
crm_dynamic_fields/models/ir_model_fields.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Ayana KP (<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class IrModelFields(models.Model):
"""Adding a new field to understand the dynamically created fields."""
_inherit = 'ir.model.fields'
is_dynamic = fields.Boolean(string="Dynamic Field",
help="Flag to indicate whether this "
"field is dynamically created or "
"not.")

8
crm_dynamic_fields/security/crm_dynamic_fields_groups.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This record represents a user group with permission to create custom fields for Leads.-->
<!-- Members of this group will be able to add new custom fields to projects,-->
<record id="group_add_crm_dynamic_fields" model="res.groups">
<field name="name">Create Custom Fields in CRM</field>
</record>
</odoo>

3
crm_dynamic_fields/security/ir.model.access.csv

@ -0,0 +1,3 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_crm_dynamic_fields_user,access.crm.dynamic.fields.user,model_crm_dynamic_fields,base.group_user,1,1,1,1
access_crm_field_widgets_user,access.crm.field.widgets.user,model_crm_field_widgets,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_crm_dynamic_fields_user access.crm.dynamic.fields.user model_crm_dynamic_fields base.group_user 1 1 1 1
3 access_crm_field_widgets_user access.crm.field.widgets.user model_crm_field_widgets base.group_user 1 1 1 1

BIN
crm_dynamic_fields/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
crm_dynamic_fields/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
crm_dynamic_fields/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
crm_dynamic_fields/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
crm_dynamic_fields/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
crm_dynamic_fields/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
crm_dynamic_fields/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
crm_dynamic_fields/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
crm_dynamic_fields/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
crm_dynamic_fields/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
crm_dynamic_fields/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
crm_dynamic_fields/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
crm_dynamic_fields/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
crm_dynamic_fields/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
crm_dynamic_fields/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
crm_dynamic_fields/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
crm_dynamic_fields/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
crm_dynamic_fields/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
crm_dynamic_fields/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
crm_dynamic_fields/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
crm_dynamic_fields/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
crm_dynamic_fields/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
crm_dynamic_fields/static/description/assets/modules/module_image (1).png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
crm_dynamic_fields/static/description/assets/modules/module_image (2).png

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
crm_dynamic_fields/static/description/assets/modules/module_image (4).png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
crm_dynamic_fields/static/description/assets/modules/module_image (5).png

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
crm_dynamic_fields/static/description/assets/modules/module_image (6).png

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
crm_dynamic_fields/static/description/assets/modules/module_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
crm_dynamic_fields/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
crm_dynamic_fields/static/description/assets/screenshots/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
crm_dynamic_fields/static/description/assets/screenshots/v15-hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

BIN
crm_dynamic_fields/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
crm_dynamic_fields/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

644
crm_dynamic_fields/static/description/index.html

@ -0,0 +1,644 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div
style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
CRM Dynamic Fields</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Tool For Adding New Fields In Odoo CRM Without Any Technical
knowledge.</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/v15-hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;"/>
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots for this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Overview
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
This module helps the user to create new fields from the form view.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Features
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Community &amp;
Enterprise Support.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Create custom fields</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Different field types can choose.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Delete the Custom created Fields.</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Access for the Related User
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Go to users & Companies -> Users -> enable Create Custom Fields
in CRM for user</p>
<img src="assets/screenshots/1.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Custom Field Creation
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Go to CRM. Now a "Create Fields" smart button will appear on
form view</p>
<img src="assets/screenshots/2.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Custom Field Creation Wizard
</h3>
Please enter the details which you want to display the screen.
You can select different field type for fields.Then Click
"Create" button. Then You can see the corresponding field
in the screen.
<img src="assets/screenshots/3.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Field Visibility
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
The Newly created field will be generated and that will be
visible in the CRM view</p>
<img src="assets/screenshots/4.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Field Visibility
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
The Newly created field can be deleted from CRM view</p>
<img src="assets/screenshots/5.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
The Newly created field cab be deleted from CRM Tree view</p>
<img src="assets/screenshots/6.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Select the Fields need to be deleted. And click on the Delete option in Action Button.</p>
<img src="assets/screenshots/7.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Click OK for the confirmation.</p>
<img src="assets/screenshots/8.png" class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related
Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/export_stockinfo_xls/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/module_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/inventory_stock_dashboard_odoo/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/module_image (1).png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/customer_product_qrcode/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/module_image (2).png">
</div>
</a>
</div>
</div>
<div class="carousel-item active"
style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/list_view_sticky_header/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/module_image (4).png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/openai_product_tag_descrption/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/module_image (5).png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/openai_odoo_base/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/module_image (6).png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i
class="fa fa-chevron-left"
style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1"
data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48"
style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help?
Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

22
crm_dynamic_fields/views/crm_lead_views.xml

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This XML record defines a customization for the CRM Lead form view.
It inherits from the existing view 'crm.crm_lead_view_form' and adds a smart button inside the 'button_box' element.
The added button allows the user to create custom fields for the CRM Leads.-->
<record id="crm_lead_view_form" model="ir.ui.view">
<field name="name">crm.lead.view.form.inherit.crm.dynamic.fields</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_lead_view_form"/>
<field eval="1" name="priority"/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button class="oe_stat_button o_res_partner_tip_opp"
type="action"
name="%(crm_dynamic_fields.crm_dynamic_fields_create_action)d"
string="Create Fields" help="Create Custom Fields"
icon="fa-plus"
groups="crm_dynamic_fields.group_add_crm_dynamic_fields"/>
</div>
</field>
</record>
</odoo>

17
crm_dynamic_fields/views/ir_model_fields_views.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--This record defines a custom search view for the 'ir.model.fields' model,
allowing users to search for crm dynamic fields specifically-->
<record id="view_model_fields_search" model="ir.ui.view">
<field name="name">ir.model.fields.view.search.inherit.crm.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">
<xpath expr="//search/filter[@name='translate']" position="after">
<separator/>
<filter string="Dynamic Fields" name="dynamic_field"
domain="[('is_dynamic', '=', True)]"/>
</xpath>
</field>
</record>
</odoo>

22
crm_dynamic_fields/wizard/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Ayana KP (<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import crm_dynamic_fields

265
crm_dynamic_fields/wizard/crm_dynamic_fields.py

@ -0,0 +1,265 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Ayana KP (<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
import xml.etree.ElementTree as xee
from bs4 import BeautifulSoup
from odoo import api, fields, models, _
class CRMDynamicFields(models.TransientModel):
"""Creating new transient model for the wizard from"""
_name = 'crm.dynamic.fields'
_description = 'CRM Dynamic Fields'
_inherit = ['ir.model.fields']
form_view_id = fields.Many2one('ir.ui.view', string="Form View ID",
help="Select the view to be used as"
"the form view for this field.")
@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 are currently present in the form"""
view_id = self.env.ref('crm.crm_lead_view_form')
view_arch = str(view_id.arch_base)
doc = xee.fromstring(view_arch)
field_list_1 = [tag.attrib['name'] for tag in doc.findall('.//field')
if 'invisible' not in tag.attrib and 'attrs'
not in tag.attrib]
model_id = self.env['ir.model'].sudo().search(
[('model', '=', 'crm.lead')])
return [('model_id', '=', model_id.id), ('state', '=', 'base'),
('name', 'in', field_list_1)]
def _set_default(self):
"""setting the default model"""
model_id = self.env['ir.model'].sudo().search(
[('model', '=', 'crm.lead')])
return [('id', '=', model_id.id)]
position_field_id = fields.Many2one('ir.model.fields',
string='Field Name',
domain=set_domain, required=True,
help="Select the field that will "
"determine the position of"
" the custom field.")
position = fields.Selection([('before', 'Before'),
('after', 'After')],
string='Position in Backend',
required=True, help="Position of field")
model_id = fields.Many2one('ir.model', string='Model',
required=True,
index=True, ondelete='cascade',
help="The models this field belongs to",
domain=_set_default)
ref_model_id = fields.Many2one('ir.model', string='Model',
index=True,
help="This field is used to specify the "
"model that the dynamic field will be "
"associated with.")
selection_field = fields.Char(string="Selection Options",
help='Enter selection value')
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,
help='The type of field that will be '
'created for this dynamic field.'
'This field is required and must be '
'set to one of the possible'
'field types returned by the '
'"get_possible_field_types" method.')
ttype = fields.Selection(string="Field Type", related='field_type',
help='The type of field that this dynamic field '
'corresponds to.')
widget_id = fields.Many2one('crm.field.widgets', string='Widget',
help='Select widget')
# Already existing field.
groups = fields.Many2many('res.groups',
'product_dynamic_fields_group_rel',
'field_id', 'group_id',
help='The security groups that have access to '
'this dynamic field.')
extra_features = fields.Boolean(string="Show Extra Properties",
help="A boolean field that determines "
"whether to display extra properties "
"for this dynamic field in the user "
"interface")
def action_create_fields(self):
""" Creates a new custom field for the project.project model and adds
it to the project form view."""
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_dynamic': True
})
inherit_id = self.env.ref('crm.crm_lead_view_form')
view_id = self.env.ref('crm.crm_lead_view_form')
view_arch = str(view_id.arch_base)
soup = BeautifulSoup(view_arch, 'html.parser')
fields_all = soup.find_all('field',
attrs={"name": self.position_field_id.name})
for field in fields_all:
if field.parent.name == "div":
parent_div = field.parent
class_name_string = ' '.join(parent_div['class'])
if self.position == 'before':
if self.widget_id:
arch_base = _('<?xml version="1.0"?>'
'<data>'
'<label for="{}" position="{}">'
'<field name="{}" widget="{}"/>'
'</label>'
'</data>').format(
self.position_field_id.name, self.position,
self.name,
self.widget_id.name)
else:
arch_base = ('<?xml version="1.0"?>'
'<data>'
'<label for="{}" position="{}">'
'<field name="{}"/>'
'</label>'
'</data>').format(
self.position_field_id.name,
self.position, self.name)
else:
if self.widget_id:
arch_base = _('<?xml version="1.0"?>'
'<data>'
'<div class="{}" position="{}">'
'<field name="{}" widget="{}"/>'
'</div>'
'</data>').format(
class_name_string, self.position,
self.name,
self.widget_id.name)
else:
arch_base = ('<?xml version="1.0"?>'
'<data>'
'<div class="{}" position="{}">'
'<field name="{}"/>'
'</div>'
'</data>').format(class_name_string,
self.position,
self.name)
else:
arch_base = _('<?xml version="1.0"?>'
'<data>'
'<field name="%s" position="%s">'
'<field name="%s"/>'
'</field>'
'</data>') % (
self.position_field_id.name, self.position,
self.name)
if self.widget_id:
arch_base = _('<?xml version="1.0"?>'
'<data>'
'<field name="%s" position="%s">'
'<field name="%s" widget="%s"/>'
'</field>'
'</data>') % (
self.position_field_id.name, self.position,
self.name,
self.widget_id.name)
if self.position_field_id.name == 'partner_id':
arch_base = (
f"""<xpath expr="//group[@name='opportunity_partner']/field
[@name='{self.position_field_id.name}']" position=
"{self.position}"><field name="{self.name}"/></xpath>""")
if self.widget_id:
arch_base = (
f"""<xpath expr="//group[@name='opportunity_partner']
/field[@name='{self.position_field_id.name}']"
position="{self.position}"><field name="{self.name}"
widget="{self.widget_id.name}"/></xpath>""")
self.form_view_id = self.env['ir.ui.view'].sudo().create(
{
'name': 'crm.dynamic.fields',
'type': 'form',
'model': 'crm.lead',
'mode': 'extension',
'inherit_id': inherit_id.id,
'arch_base': arch_base,
'active': True,
})
return {
'type': 'ir.actions.client',
'tag': 'reload',
}
@api.depends('field_type')
@api.onchange('field_type')
def onchange_field_type(self):
""" This method is triggered when the field_type field is changed.
It updates the domain of the widget field based on the
selected field_type."""
if self.field_type:
if self.field_type == 'binary':
return {'domain': {'widget_id': [('name', '=', 'image')]}}
elif self.field_type == 'many2many':
return {'domain': {
'widget_id': [
('name', 'in', ['many2many_tags', 'binary'])]}}
elif self.field_type == 'selection':
return {'domain': {
'widget_id': [('name', 'in', ['radio', 'priority'])]}}
elif self.field_type == 'float':
return {'domain': {'widget_id': [('name', '=', 'monetary')]}}
elif self.field_type == 'many2one':
return {'domain': {'widget_id': [('name', '=', 'selection')]}}
elif self.field_type == 'Boolean':
return {'domain': {'widget_id': [('name', '=', 'checkbox')]}}
else:
return {'domain': {'widget_id': [('id', '=', False)]}}
return {'domain': {'widget_id': [('id', '=', False)]}}
def unlink(self):
"""Overrides the default 'unlink' method of the
'CRMDynamicFields' model to perform custom deletion logic."""
if self.form_view_id:
self.form_view_id.active = False
for field in self:
if field.ttype == 'many2many':
field: [(5, 0, 0)]
else:
query = """delete FROM ir_model_fields WHERE name = %s"""
self.env.cr.execute(query, [field.name])
return super(CRMDynamicFields, self).unlink()

104
crm_dynamic_fields/wizard/crm_dynamic_fields_views.xml

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--This is an XML view definition for a form view in Odoo, which allows users to create and manage dynamic fields for a model. -->
<record id="crm_dynamic_fields_view_form" model="ir.ui.view">
<field name="name">crm.dynamic.fields.view.form</field>
<field name="model">crm.dynamic.fields</field>
<field name="arch" type="xml">
<form string="Dynamic Fields">
<sheet>
<group>
<group string="Field Info">
<field name="name"/>
<field name="field_description"/>
<field name="state" readonly="1"
groups="base.group_no_one"/>
<field name="model_id" options="{'no_open': True,
'no_create': True}"/>
<field name="field_type"/>
<field name="selection_field"
placeholder="[('blue', 'Blue'),
('yellow', 'Yellow')]"
attrs="{'required': [('field_type','in',['selection','reference'])],
'readonly': [('field_type','not in',['selection','reference'])],
'invisible': [('field_type','not in',['selection','reference'])]}"/>
<field name="ref_model_id"
options="{'no_open': True, 'no_create': True}"
attrs="{'required': [('field_type','in',['many2one','many2many'])],
'readonly': [('field_type','not in',['many2one','many2many'])],
'invisible': [('field_type','not in',['many2one','many2many'])]}"/>
<field name="widget_id" widget="selection"
attrs="{'invisible':
[('field_type','not in',['binary', 'many2many', 'selection', 'float', 'many2one'])]}"/>
<field name="required"/>
</group>
<group string="Position">
<field name="position_field_id"
options="{'no_open': True, 'no_create': True}"/>
<field name="position"/>
</group>
</group>
<group string="Extra Properties">
<group>
<field name="extra_features"/>
</group>
<group attrs="{'invisible': [('extra_features', '=', False)]}">
<field name="help"/>
</group>
<group attrs="{'invisible': [('extra_features', '=', False)]}">
<field name="readonly"/>
<field name="store"/>
<field name="index"/>
<field name="copied"/>
</group>
</group>
</sheet>
<footer>
<button name="action_create_fields" string="Create"
type="object" class="oe_highlight"/>
<button string="Cancel" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
</record>
<!--This XML record defines an action to open a form view for creating custom fields in the crm.dynamic.fields model-->
<record id="crm_dynamic_fields_create_action"
model="ir.actions.act_window">
<field name="name">Create Custom Fields</field>
<field name="res_model">crm.dynamic.fields</field>
<field name="view_mode">form</field>
<field name="view_id" ref="crm_dynamic_fields_view_form"/>
<field name="target">new</field>
</record>
<!--tree view-->
<record id="crm_dynamic_fields_view_tree" model="ir.ui.view">
<field name="name">crm.dynamic.fields.view.tree</field>
<field name="model">crm.dynamic.fields</field>
<field name="arch" type="xml">
<tree create="false">
<field name="name"/>
<field name="field_description"/>
<field name="ttype"/>
</tree>
</field>
</record>
<!-- Delete fields tree view -->
<record id="crm_dynamic_fields_delete_action"
model="ir.actions.act_window">
<field name="name">Delete Custom Fields</field>
<field name="res_model">crm.dynamic.fields</field>
<field name="view_mode">tree</field>
<field name="view_id" ref="crm_dynamic_fields_view_tree"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">Delete created custom
fields
</p>
</field>
</record>
<!-- Menu Item in Project to Delete fields -->
<menuitem id="crm_dynamic_fields_menu_delete" name="Delete Fields"
parent="crm.crm_menu_config"
action="crm_dynamic_fields.crm_dynamic_fields_delete_action"
groups="crm_dynamic_fields.group_add_crm_dynamic_fields"
sequence="12"/>
</odoo>
Loading…
Cancel
Save