Browse Source

Sep 25 : [ADD] Initial Commit 'project_dynamic_fields'

pull/298/merge
RisvanaCybro 2 years ago
parent
commit
e05cdd5ffb
  1. 44
      project_dynamic_fields/README.rst
  2. 23
      project_dynamic_fields/__init__.py
  3. 48
      project_dynamic_fields/__manifest__.py
  4. 51
      project_dynamic_fields/data/project_field_widgets_data.xml
  5. 6
      project_dynamic_fields/doc/RELEASE_NOTES.md
  6. 23
      project_dynamic_fields/models/__init__.py
  7. 32
      project_dynamic_fields/models/ir_model_fields.py
  8. 36
      project_dynamic_fields/models/project_field_widgets.py
  9. 3
      project_dynamic_fields/security/ir.model.access.csv
  10. 9
      project_dynamic_fields/security/project_dynamic_fields_groups.xml
  11. BIN
      project_dynamic_fields/static/description/assets/icons/check.png
  12. BIN
      project_dynamic_fields/static/description/assets/icons/chevron.png
  13. BIN
      project_dynamic_fields/static/description/assets/icons/cogs.png
  14. BIN
      project_dynamic_fields/static/description/assets/icons/consultation.png
  15. BIN
      project_dynamic_fields/static/description/assets/icons/ecom-black.png
  16. BIN
      project_dynamic_fields/static/description/assets/icons/education-black.png
  17. BIN
      project_dynamic_fields/static/description/assets/icons/hotel-black.png
  18. BIN
      project_dynamic_fields/static/description/assets/icons/license.png
  19. BIN
      project_dynamic_fields/static/description/assets/icons/lifebuoy.png
  20. BIN
      project_dynamic_fields/static/description/assets/icons/manufacturing-black.png
  21. BIN
      project_dynamic_fields/static/description/assets/icons/pos-black.png
  22. BIN
      project_dynamic_fields/static/description/assets/icons/puzzle.png
  23. BIN
      project_dynamic_fields/static/description/assets/icons/restaurant-black.png
  24. BIN
      project_dynamic_fields/static/description/assets/icons/service-black.png
  25. BIN
      project_dynamic_fields/static/description/assets/icons/trading-black.png
  26. BIN
      project_dynamic_fields/static/description/assets/icons/training.png
  27. BIN
      project_dynamic_fields/static/description/assets/icons/update.png
  28. BIN
      project_dynamic_fields/static/description/assets/icons/user.png
  29. BIN
      project_dynamic_fields/static/description/assets/icons/wrench.png
  30. BIN
      project_dynamic_fields/static/description/assets/misc/categories.png
  31. BIN
      project_dynamic_fields/static/description/assets/misc/check-box.png
  32. BIN
      project_dynamic_fields/static/description/assets/misc/compass.png
  33. BIN
      project_dynamic_fields/static/description/assets/misc/corporate.png
  34. BIN
      project_dynamic_fields/static/description/assets/misc/customer-support.png
  35. BIN
      project_dynamic_fields/static/description/assets/misc/cybrosys-logo.png
  36. BIN
      project_dynamic_fields/static/description/assets/misc/features.png
  37. BIN
      project_dynamic_fields/static/description/assets/misc/logo.png
  38. BIN
      project_dynamic_fields/static/description/assets/misc/pictures.png
  39. BIN
      project_dynamic_fields/static/description/assets/misc/pie-chart.png
  40. BIN
      project_dynamic_fields/static/description/assets/misc/right-arrow.png
  41. BIN
      project_dynamic_fields/static/description/assets/misc/star.png
  42. BIN
      project_dynamic_fields/static/description/assets/misc/support.png
  43. BIN
      project_dynamic_fields/static/description/assets/misc/whatsapp.png
  44. BIN
      project_dynamic_fields/static/description/assets/modules/1.png
  45. BIN
      project_dynamic_fields/static/description/assets/modules/2.png
  46. BIN
      project_dynamic_fields/static/description/assets/modules/3.png
  47. BIN
      project_dynamic_fields/static/description/assets/modules/4.png
  48. BIN
      project_dynamic_fields/static/description/assets/modules/5.gif
  49. BIN
      project_dynamic_fields/static/description/assets/modules/6.png
  50. BIN
      project_dynamic_fields/static/description/assets/screenshots/hero.gif
  51. BIN
      project_dynamic_fields/static/description/assets/screenshots/pro_ent1.png
  52. BIN
      project_dynamic_fields/static/description/assets/screenshots/pro_ent2.png
  53. BIN
      project_dynamic_fields/static/description/assets/screenshots/pro_ent3.png
  54. BIN
      project_dynamic_fields/static/description/assets/screenshots/pro_ent4.png
  55. BIN
      project_dynamic_fields/static/description/assets/screenshots/pro_ent5.png
  56. BIN
      project_dynamic_fields/static/description/assets/screenshots/pro_ent6.png
  57. BIN
      project_dynamic_fields/static/description/assets/screenshots/pro_ent_7.png
  58. BIN
      project_dynamic_fields/static/description/banner.jpg
  59. BIN
      project_dynamic_fields/static/description/icon.png
  60. BIN
      project_dynamic_fields/static/description/images/modules/adv_ecom_image.png
  61. BIN
      project_dynamic_fields/static/description/images/modules/approve_image.png
  62. BIN
      project_dynamic_fields/static/description/images/modules/ip_image.png
  63. BIN
      project_dynamic_fields/static/description/images/modules/payment_image.png
  64. BIN
      project_dynamic_fields/static/description/images/modules/print_image.png
  65. BIN
      project_dynamic_fields/static/description/images/modules/shopify_image.png
  66. 651
      project_dynamic_fields/static/description/index.html
  67. 18
      project_dynamic_fields/views/ir_model_fields_views.xml
  68. 22
      project_dynamic_fields/wizard/__init__.py
  69. 192
      project_dynamic_fields/wizard/project_dynamic_fields.py
  70. 119
      project_dynamic_fields/wizard/project_dynamic_fields_views.xml

44
project_dynamic_fields/README.rst

@ -0,0 +1,44 @@
.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
Project Dynamic Fields
=======================
This module helps to add any custom field in Project Module.
Installation
============
* No additional configurations needed
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: (V14) Ayana KP @cybrosys, Contact : odoo@cybrosys.com
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 <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

23
project_dynamic_fields/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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
project_dynamic_fields/__manifest__.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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': 'Project Dynamic Fields',
'version': '14.0.1.0.0',
'category': 'Project',
'summary': "Adding Custom Fields for Project Module",
'description': """Adding Custom Fields for Project Module,Odoo14. Easy to
track how many custom fields are created. There is no need of technical
knowledge to create custom fields""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': ['project'],
'data':
[
'security/project_dynamic_fields_groups.xml',
'security/ir.model.access.csv',
'data/project_field_widgets_data.xml',
'views/ir_model_fields_views.xml',
'wizard/project_dynamic_fields_views.xml',
],
'images': ['static/description/banner.jpg'],
'license': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

51
project_dynamic_fields/data/project_field_widgets_data.xml

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Defines a custom widget for the 'image' field of the project model. -->
<record id="project_field_image_widgets" model="project.field.widgets">
<field name="name">image</field>
<field name="description">Image</field>
</record>
<!-- Defines a custom widget for the 'many2many_tags' field of the project model. -->
<record id="project_field_many2many_tag_widget"
model="project.field.widgets">
<field name="name">many2many_tags</field>
<field name="description">Many2many Tags</field>
</record>
<!-- Defines a custom widget for the 'binary' field of the project model. -->
<record id="project_field_many2many_binary_widget"
model="project.field.widgets">
<field name="name">binary</field>
<field name="description">Binary</field>
</record>
<!-- Defines a custom widget for the 'radio' field of the project model. -->
<record id="project_field_radio_widget" model="project.field.widgets">
<field name="name">radio</field>
<field name="description">Radio</field>
</record>
<!-- Defines a custom widget for the 'priority' field of the project model. -->
<record id="project_field_priority_widget"
model="project.field.widgets">
<field name="name">priority</field>
<field name="description">Priority</field>
</record>
<!-- Defines a custom widget for the 'monetary' field of the project model. -->
<record id="project_field_monetary_widget"
model="project.field.widgets">
<field name="name">monetary</field>
<field name="description">Monetary</field>
</record>
<!-- Defines a custom widget for the 'selection' field of the project model. -->
<record id="project_field_selection_widget"
model="project.field.widgets">
<field name="name">selection</field>
<field name="description">Selection</field>
</record>
</data>
</odoo>

6
project_dynamic_fields/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <project_dynamic_fields>
#### 21.09.2023
#### Version 14.0.1.0.0
##### ADD
- Initial Commit For Project Dynamic Fields

23
project_dynamic_fields/models/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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 ir_model_fields
from . import project_field_widgets

32
project_dynamic_fields/models/ir_model_fields.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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_project_dynamic = fields.Boolean(string="Dynamic Field",
help="Flag to indicate whether this "
"field is dynamically created or "
"not.")

36
project_dynamic_fields/models/project_field_widgets.py

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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 ProjectFieldWidgets(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 = 'project.field.widgets'
_rec_name = 'description'
_description = 'Project Field Widgets'
name = fields.Char(string="Name", help="Name for selection field")
description = fields.Char(string="Description",
help="Description for selection field")

3
project_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_project_dynamic_fields,access.project.dynamic.fields,model_project_dynamic_fields,base.group_user,1,1,1,1
access_project_field_widgets,access.project.field.widgets,model_project_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_project_dynamic_fields access.project.dynamic.fields model_project_dynamic_fields base.group_user 1 1 1 1
3 access_project_field_widgets access.project.field.widgets model_project_field_widgets base.group_user 1 1 1 1

9
project_dynamic_fields/security/project_dynamic_fields_groups.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This record represents a user group with permission to create custom fields for projects.-->
<!-- Members of this group will be able to add new custom fields to projects,-->
<!-- providing additional flexibility and customization options to better meet project management needs.-->
<record id="group_add_project_custom_fields" model="res.groups">
<field name="name">Create Project Custom Fields</field>
</record>
</odoo>

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
project_dynamic_fields/static/description/assets/modules/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
project_dynamic_fields/static/description/assets/modules/5.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
project_dynamic_fields/static/description/assets/screenshots/pro_ent1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

BIN
project_dynamic_fields/static/description/assets/screenshots/pro_ent2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
project_dynamic_fields/static/description/assets/screenshots/pro_ent3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
project_dynamic_fields/static/description/assets/screenshots/pro_ent4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
project_dynamic_fields/static/description/assets/screenshots/pro_ent5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
project_dynamic_fields/static/description/assets/screenshots/pro_ent6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
project_dynamic_fields/static/description/assets/screenshots/pro_ent_7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
project_dynamic_fields/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
project_dynamic_fields/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
project_dynamic_fields/static/description/images/modules/adv_ecom_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
project_dynamic_fields/static/description/images/modules/approve_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
project_dynamic_fields/static/description/images/modules/ip_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
project_dynamic_fields/static/description/images/modules/payment_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
project_dynamic_fields/static/description/images/modules/print_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
project_dynamic_fields/static/description/images/modules/shopify_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

651
project_dynamic_fields/static/description/index.html

@ -0,0 +1,651 @@
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div
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 -->
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Project Dynamic Fields</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Create Custom Fields in Project from User level.</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif"
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;"/>
</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;">See
key screenshots of 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">
Project Dynamic Fields module helps with easy creation of custom fields
in project without any coding.
This module helps to add new fields on the project form as per one's
requirement.
From the Configuration menu, one can click create fields and can create
a new custom field without any coding.
</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;">Creates Custom Fields in Project without Coding</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;">Can Easily set the Position of 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;">Can Select Widgets for 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;">Can Set the Field Properties (help,required,copied,read-only,indexed)</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;">Can Easily Filter the Dynamically Created Fields from Settings</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;">Can Easily Delete the Dynamically 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;">
Create Project Custom Fields</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
After installation, Give Access to the user to 'Create Project
Custom Fields' from User settings.</p>
<img src="assets/screenshots/pro_ent1.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;">
Create Fields</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Click 'Create Fields' menu to create custom fields.</p>
<img src="assets/screenshots/pro_ent2.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;">
Widgets</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Fill in the details (also can select 'Widgets' if needed) and
click create fields , a new field will create.</p>
<img src="assets/screenshots/pro_ent3.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;">
Project View</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
A new field is created in the project view.</p>
<img src="assets/screenshots/pro_ent4.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;">
Delete Dynamically Created Fields</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Can Delete the dynamically created fields from the settings.</p>
<img src="assets/screenshots/pro_ent5.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;">
Tree View of Created Fields for the Deletion</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Can Delete the dynamically created fields from the settings.</p>
<img src="assets/screenshots/pro_ent6.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 field for Deletion.</p>
<img src="assets/screenshots/pro_ent_7.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-lg-12 d-flex flex-column justify-content-center"
style="text-align: center; padding: 2.5rem 1rem !important;">
<h2 style="color: #212529 !important;">Suggested Products</h2>
<hr
style="border: 3px solid #AC1015 !important; background-color: #AC1015 !important; width: 80px !important; margin-bottom: 2rem !important;" />
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item active" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/projects_task_checklists/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="https://apps.odoocdn.com/apps/module_image?image_id=14542595&unique=85732028fa8816f36d3c88e5ae8096d3a6fb352f">
</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/14.0/project_task_timer/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="https://apps.odoocdn.com/apps/module_image?image_id=14542455&unique=d29c8e6d6e76172de3a11dcabc9c1ed9e3df52b5">
</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/14.0/task_deadline_reminder/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="https://apps.odoocdn.com/apps/module_image?image_id=14542512&unique=83f02b282b57d4fe45fceaa97d983230979d2eed">
</div>
</a>
</div>
</div>
<div class="carousel-item" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/project_report_pdf/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="https://apps.odoocdn.com/apps/module_image?image_id=14542522&unique=62a6ef5dd5980b61e7503dfda01eec22e23c8ad0">
</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/14.0/project_task_unique_code/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="https://apps.odoocdn.com/apps/module_image?image_id=14542609&unique=b73332b37edf5624823187b9bb2e6c32c062236b">
</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/14.0/project_custom_gantt/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="https://apps.odoocdn.com/apps/module_image?image_id=14638858&unique=db73fe646ac7bf39bc0716c842dcb4fa754a136d">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="left:-25px;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="right:-25px;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"
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"
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 -->

18
project_dynamic_fields/views/ir_model_fields_views.xml

@ -0,0 +1,18 @@
<?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 project dynamic fields specifically-->
<record id="view_model_fields_search" model="ir.ui.view">
<field name="name">ir.model.fields.view.search.inherit.project.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="Project Dynamic Fields"
name="project_dynamic_field"
domain="[('is_project_dynamic', '=', True)]"/>
</xpath>
</field>
</record>
</odoo>

22
project_dynamic_fields/wizard/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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 project_dynamic_fields

192
project_dynamic_fields/wizard/project_dynamic_fields.py

@ -0,0 +1,192 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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 api, fields, models, _
import xml.etree.ElementTree as xee
class ProjectDynamicFields(models.TransientModel):
"""Creating new transient model for the wizard from"""
_name = 'project.dynamic.fields'
_description = '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 currently present in the form"""
view_id = self.env.ref('project.edit_project')
view_arch = str(view_id.arch_base)
doc = xee.fromstring(view_arch)
field_list = []
for tag in doc.findall('.//field'):
field_list.append(tag.attrib['name'])
model_id = self.env['ir.model'].sudo().search(
[('model', '=', 'project.project')])
return [('model_id', '=', model_id.id), ('state', '=', 'base'),
('name', 'in', field_list)]
def _set_default(self):
"""setting the default model"""
model_id = self.env['ir.model'].sudo().search(
[('model', '=', 'project.project')])
return [('id', '=', model_id.id)]
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_project_dynamic': True
})
inherit_id = self.env.ref('project.edit_project')
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)
self.form_view_id = self.env['ir.ui.view'].sudo().create(
{'name': 'project.dynamic.fields',
'type': 'form',
'model': 'project.project',
'mode': 'extension',
'inherit_id': inherit_id.id,
'arch_base': arch_base,
'active': True})
return {
'type': 'ir.actions.client',
'tag': 'reload',
}
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',
required=True, help="Position of field")
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,
help="This field is used to specify the "
"model that the dynamic field will be "
"associated with.")
# 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",
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('project.field.widgets', string='Widget',
help='Select widget')
# Already existing field.
groups = fields.Many2many('res.groups',
'project_dynamic_fields_m2m_group_rel',
'field_ids', 'group_ids',
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")
@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)]}}
def unlink(self):
"""Overrides the default 'unlink' method of the
'ProjectDynamicFields' 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(ProjectDynamicFields, self).unlink()

119
project_dynamic_fields/wizard/project_dynamic_fields_views.xml

@ -0,0 +1,119 @@
<?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='project_dynamic_fields_view_form' model='ir.ui.view'>
<field name="name">project.dynamic.fields.view.form</field>
<field name="model">project.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 project.dynamic.fields model-->
<record id='project_dynamic_fields_create_action'
model='ir.actions.act_window'>
<field name="name">Create Custom Fields</field>
<field name="res_model">project.dynamic.fields</field>
<field name="view_mode">form</field>
<field name="view_id" ref="project_dynamic_fields_view_form"/>
<field name="target">new</field>
</record>
<!-- This is an XML record defining a view for the "project.dynamic.fields"
model. The view is a tree view and displays three fields: "name",
"field_description", and "ttype". -->
<record id='project_dynamic_fields_view_tree' model='ir.ui.view'>
<field name="name">project.dynamic.fields.view.tree</field>
<field name="model">project.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="project_dynamic_fields_delete_action"
model="ir.actions.act_window">
<field name="name">Delete Custom Fields</field>
<field name="res_model">project.dynamic.fields</field>
<field name="view_mode">tree</field>
<field name="view_id" ref="project_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 create fields -->
<menuitem
id="project_dynamic_fields_menu_create"
name="Create Fields"
parent="project.menu_project_config"
action="project_dynamic_fields.project_dynamic_fields_create_action"
groups="project_dynamic_fields.group_add_project_custom_fields"
sequence="10"/>
<!-- Menu Item in Project to Delete fields -->
<menuitem
id="project_dynamic_fields_menu_delete"
name="Delete Fields"
parent="project.menu_project_config"
action="project_dynamic_fields.project_dynamic_fields_delete_action"
groups="project_dynamic_fields.group_add_project_custom_fields"
sequence="12"/>
</odoo>
Loading…
Cancel
Save