Browse Source

Mar 08 : [ADD] Initial Commit 'mass_price_update'

pull/313/head
RisvanaCybro 1 year ago
parent
commit
60b18355f9
  1. 46
      mass_price_update/README.rst
  2. 22
      mass_price_update/__init__.py
  3. 45
      mass_price_update/__manifest__.py
  4. 7
      mass_price_update/doc/RELEASE_NOTES.md
  5. 3
      mass_price_update/security/ir.model.access.csv
  6. 18
      mass_price_update/security/mass_price_update_groups.xml
  7. BIN
      mass_price_update/static/description/assets/icons/check.png
  8. BIN
      mass_price_update/static/description/assets/icons/chevron.png
  9. BIN
      mass_price_update/static/description/assets/icons/cogs.png
  10. BIN
      mass_price_update/static/description/assets/icons/consultation.png
  11. BIN
      mass_price_update/static/description/assets/icons/ecom-black.png
  12. BIN
      mass_price_update/static/description/assets/icons/education-black.png
  13. BIN
      mass_price_update/static/description/assets/icons/hotel-black.png
  14. BIN
      mass_price_update/static/description/assets/icons/license.png
  15. BIN
      mass_price_update/static/description/assets/icons/lifebuoy.png
  16. BIN
      mass_price_update/static/description/assets/icons/manufacturing-black.png
  17. BIN
      mass_price_update/static/description/assets/icons/pos-black.png
  18. BIN
      mass_price_update/static/description/assets/icons/puzzle.png
  19. BIN
      mass_price_update/static/description/assets/icons/restaurant-black.png
  20. BIN
      mass_price_update/static/description/assets/icons/service-black.png
  21. BIN
      mass_price_update/static/description/assets/icons/trading-black.png
  22. BIN
      mass_price_update/static/description/assets/icons/training.png
  23. BIN
      mass_price_update/static/description/assets/icons/update.png
  24. BIN
      mass_price_update/static/description/assets/icons/user.png
  25. BIN
      mass_price_update/static/description/assets/icons/wrench.png
  26. BIN
      mass_price_update/static/description/assets/misc/categories.png
  27. BIN
      mass_price_update/static/description/assets/misc/check-box.png
  28. BIN
      mass_price_update/static/description/assets/misc/compass.png
  29. BIN
      mass_price_update/static/description/assets/misc/corporate.png
  30. BIN
      mass_price_update/static/description/assets/misc/customer-support.png
  31. BIN
      mass_price_update/static/description/assets/misc/cybrosys-logo.png
  32. BIN
      mass_price_update/static/description/assets/misc/features.png
  33. BIN
      mass_price_update/static/description/assets/misc/logo.png
  34. 3
      mass_price_update/static/description/assets/misc/phone.svg
  35. BIN
      mass_price_update/static/description/assets/misc/pictures.png
  36. BIN
      mass_price_update/static/description/assets/misc/pie-chart.png
  37. BIN
      mass_price_update/static/description/assets/misc/right-arrow.png
  38. BIN
      mass_price_update/static/description/assets/misc/star.png
  39. 9
      mass_price_update/static/description/assets/misc/support (1) 1.svg
  40. 6
      mass_price_update/static/description/assets/misc/support-email.svg
  41. BIN
      mass_price_update/static/description/assets/misc/support.png
  42. 9
      mass_price_update/static/description/assets/misc/whatsapp 1.svg
  43. BIN
      mass_price_update/static/description/assets/misc/whatsapp.png
  44. BIN
      mass_price_update/static/description/assets/modules/1.gif
  45. BIN
      mass_price_update/static/description/assets/modules/1.png
  46. BIN
      mass_price_update/static/description/assets/modules/2.png
  47. BIN
      mass_price_update/static/description/assets/modules/3.png
  48. BIN
      mass_price_update/static/description/assets/modules/4.jpg
  49. BIN
      mass_price_update/static/description/assets/modules/5.jpg
  50. BIN
      mass_price_update/static/description/assets/modules/6.png
  51. BIN
      mass_price_update/static/description/assets/modules/l2.png
  52. BIN
      mass_price_update/static/description/assets/modules/l3.png
  53. BIN
      mass_price_update/static/description/assets/modules/l4.png
  54. BIN
      mass_price_update/static/description/assets/modules/l5.png
  55. BIN
      mass_price_update/static/description/assets/modules/l6.png
  56. BIN
      mass_price_update/static/description/assets/screenshots/1.png
  57. BIN
      mass_price_update/static/description/assets/screenshots/2.png
  58. BIN
      mass_price_update/static/description/assets/screenshots/3.png
  59. BIN
      mass_price_update/static/description/assets/screenshots/4.png
  60. BIN
      mass_price_update/static/description/assets/screenshots/5.png
  61. BIN
      mass_price_update/static/description/assets/screenshots/6.png
  62. BIN
      mass_price_update/static/description/assets/screenshots/hero.gif
  63. BIN
      mass_price_update/static/description/assets/screenshots/image1.png
  64. BIN
      mass_price_update/static/description/assets/screenshots/image2.png
  65. BIN
      mass_price_update/static/description/assets/screenshots/image3.png
  66. BIN
      mass_price_update/static/description/assets/screenshots/image4.png
  67. BIN
      mass_price_update/static/description/assets/screenshots/image5.png
  68. BIN
      mass_price_update/static/description/assets/screenshots/image6.png
  69. BIN
      mass_price_update/static/description/banner.jpg
  70. BIN
      mass_price_update/static/description/icon.png
  71. 748
      mass_price_update/static/description/index.html
  72. 23
      mass_price_update/wizard/__init__.py
  73. 72
      mass_price_update/wizard/change_price_line.py
  74. 136
      mass_price_update/wizard/mass_price_update.py
  75. 82
      mass_price_update/wizard/mass_price_update_views.xml

46
mass_price_update/README.rst

@ -0,0 +1,46 @@
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
Mass Price Update
=================
This module allow to update the price/cost of products by percentage.
Configuration
=============
Add the users to the new security group 'Update Product Price' to give access to the new menu.
License
-------
General Public License, Version 3 (AGPL v3).
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developer: (V17) Swaraj R, 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>`__

22
mass_price_update/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
from . import wizard

45
mass_price_update/__manifest__.py

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
{
'name': 'Mass Price Update',
'version': '17.0.1.0.0',
'category': 'Warehouse',
'summary': 'Update the sales price and the cost of any product by '
'percentage',
'description': 'This module allows to update more than one products sales'
'and cost price by single click',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': ['stock'],
'data': [
'security/mass_price_update_groups.xml',
'security/ir.model.access.csv',
'wizard/mass_price_update_views.xml'
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

7
mass_price_update/doc/RELEASE_NOTES.md

@ -0,0 +1,7 @@
## Module <mass_price_update>
#### 07.03.2024
#### Version 17.0.1.0.0
#### ADD
- Initial commit for Mass Price Update

3
mass_price_update/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_mass_price_update,access.mass.price.update,model_mass_price_update,mass_price_update.mass_price_update_group_admin,1,1,1,1
access_change_price_line,access.change.price.line,model_change_price_line,mass_price_update.mass_price_update_group_admin,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_mass_price_update access.mass.price.update model_mass_price_update mass_price_update.mass_price_update_group_admin 1 1 1 1
3 access_change_price_line access.change.price.line model_change_price_line mass_price_update.mass_price_update_group_admin 1 1 1 1

18
mass_price_update/security/mass_price_update_groups.xml

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Category for managing the access for product price update-->
<record id="module_category_mass_price_update" model="ir.module.category">
<field name="name">Mass Price Update</field>
<field name="description">Helps to manage access to the mass price
update wizard
</field>
</record>
<!-- Group for Administrator-->
<record id="mass_price_update_group_admin" model="res.groups">
<field name="name">Administrator</field>
<field name="comment">Access to the mass price update wizard menu
</field>
<field name="category_id"
ref="module_category_mass_price_update"/>
</record>
</odoo>

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

3
mass_price_update/static/description/assets/misc/phone.svg

@ -0,0 +1,3 @@
<svg width="36" height="44" viewBox="0 0 36 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<path id="Vector" d="M7.25 19.3903C10.13 26.0689 14.76 31.5322 20.43 34.9305L24.83 29.7268C25.38 29.0778 26.17 28.889 26.86 29.1486C29.1 30.0218 31.51 30.4938 34 30.4938C35.11 30.4938 36 31.544 36 32.8537V41.1135C36 42.4233 35.11 43.4734 34 43.4734C15.22 43.4734 0 25.5143 0 3.35456C0 2.0448 0.9 0.994629 2 0.994629H9C10.11 0.994629 11 2.0448 11 3.35456C11 6.29268 11.4 9.1364 12.14 11.7795C12.36 12.5937 12.2 13.5259 11.65 14.1749L7.25 19.3903Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 565 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

9
mass_price_update/static/description/assets/misc/support (1) 1.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 43 KiB

6
mass_price_update/static/description/assets/misc/support-email.svg

@ -0,0 +1,6 @@
<svg width="49" height="37" viewBox="0 0 49 37" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Group">
<path id="Vector" d="M2.23798 3.59132C3.53363 4.39742 21.5313 15.9748 22.2027 16.3917C22.8741 16.8087 23.5573 17.0032 24.6173 17.0032C25.6774 17.0032 26.3606 16.8087 27.0319 16.3917C27.7033 15.9748 45.701 4.39742 46.9967 3.59132C47.4796 3.29945 48.2923 2.77131 48.469 2.17368C48.7753 1.11741 48.4455 0.714355 47.138 0.714355H24.6173H2.09664C0.789214 0.714355 0.459412 1.13131 0.765656 2.17368C0.942335 2.78521 1.75506 3.29945 2.23798 3.59132Z" fill="white"/>
<path id="Vector_2" d="M48.0214 4.21664C47.0555 4.80037 38.3865 12.0831 32.6503 16.4611L42.3323 29.3171C42.5679 29.5951 42.6739 29.9286 42.5443 30.0954C42.403 30.2483 42.0967 30.1649 41.8494 29.9008L30.2357 18.3374C28.4807 19.6716 27.2439 20.5889 27.0319 20.7279C26.1249 21.2699 25.4889 21.3394 24.6173 21.3394C23.7457 21.3394 23.1096 21.2699 22.2027 20.7279C21.9789 20.5889 20.7539 19.6716 18.9989 18.3374L7.38519 29.9008C7.14961 30.1788 6.83159 30.2622 6.69025 30.0954C6.54891 29.9425 6.65491 29.5951 6.89048 29.3171L16.5607 16.4611C10.8245 12.0831 2.06126 4.80037 1.09541 4.21664C0.0588929 3.59121 0 4.32783 0 4.89766C0 5.46749 0 33.3893 0 33.3893C0 34.6819 1.61367 36.2941 2.76797 36.2941H24.6173H46.4666C47.6209 36.2941 48.999 34.668 48.999 33.3893C48.999 33.3893 48.999 5.4536 48.999 4.89766C48.999 4.31393 49.0697 3.59121 48.0214 4.21664Z" fill="white"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

9
mass_price_update/static/description/assets/misc/whatsapp 1.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 38 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
mass_price_update/static/description/assets/modules/1.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 912 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
mass_price_update/static/description/assets/modules/4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
mass_price_update/static/description/assets/modules/5.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
mass_price_update/static/description/assets/modules/l2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
mass_price_update/static/description/assets/modules/l3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
mass_price_update/static/description/assets/modules/l4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
mass_price_update/static/description/assets/modules/l5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
mass_price_update/static/description/assets/modules/l6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
mass_price_update/static/description/assets/screenshots/image1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
mass_price_update/static/description/assets/screenshots/image2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
mass_price_update/static/description/assets/screenshots/image3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
mass_price_update/static/description/assets/screenshots/image4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
mass_price_update/static/description/assets/screenshots/image5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
mass_price_update/static/description/assets/screenshots/image6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

BIN
mass_price_update/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
mass_price_update/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

748
mass_price_update/static/description/index.html

@ -0,0 +1,748 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Odoo App 3 Index</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
crossorigin="anonymous">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap"
rel="stylesheet">
</head>
<body>
<section>
<div class="container"
style="font-family: 'Inter', sans-serif !important;background-color: #fff !important;">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between flex-wrap align-items-sm-center"
style="border-bottom:1px solid rgba(0, 0, 0, 0.22)">
<div class="my-3">
<img src="assets/misc/logo.png"
style="width:auto !important; height:40px !important">
</div>
<div class="my-3 d-flex align-items-center">
<div class="text-center"
style="background-color:#017E84 !important;font-size: 0.8rem !important; color:#fff !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width: 120px !important;">
Community
</div>
<div class="text-center"
style="background-color:#875A7B !important; color:#fff !important;font-size: 0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important;min-width: 120px !important;">
Enterprise
</div>
<div class="text-center"
style="background-color:#7C7BAD !important; color:#fff !important;font-size: 0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width: 120px !important;">
Odoo.sh
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 text-center d-flex align-items-center flex-column"
style="margin: 80px 0px !important;">
<h1 style="font-size: 2.8rem;font-weight: 700; color:
#1A202C;">
Mass Price Update</h1>
<p class="my-3 mb-4"
style="max-width: 80%; font-weight: 400 !important; line-height: 32px; color: #718096;">
This Module Allows to Update the Sales Price and the Cost of
the Products by percentage.
</p>
<div style="width: 80%; margin-top: 3rem;">
<img src="assets/screenshots/hero.gif"
class="img-responsive" width="100%" height="auto">
</div>
</div>
</div>
<div class="container mt-5 mb-5">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4">
<p class="m-0"
style="font-weight: 600; font-size: 24px; color:#714b67 !important">
Key Highlights
</p>
</div>
<div class="row py-4">
<div class="col-md-6 col-sm-12 p-3">
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px;
background: #FFF;
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); ">
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67;
display: flex; justify-content: center; align-items: center;
margin-right: 10px; flex-shrink: 0;">
<i class="fa-solid fa-star "
style="color: #fff;font-size:14px;"></i>
</div>
<div>
<p style="color: #1A202C;font-weight: 600;
font-size: 1.2rem; margin-bottom: 2px;">
Update cost/price in one click</p>
<p class="m-0" style="color:#718096">Use the new
wizard for
updating the cost/price of the products.
</p>
</div>
</div>
</div>
<div class="col-md-6 col-sm-12 p-3">
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px;
background: #FFF;
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); ">
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67;
display: flex; justify-content: center; align-items: center;
margin-right: 10px; flex-shrink: 0;">
<i class="fa-solid fa-star "
style="color: #fff;font-size:14px;"></i>
</div>
<div>
<p style="color: #1A202C;font-weight: 600;
font-size: 1.2rem; margin-bottom: 2px;">
View and ensure before confirm</p>
<p class="m-0" style="color:#718096">View and
confirm the current and new cost/price of the
products before changing it.
</p>
</div>
</div>
</div>
</div>
</div>
<div class="container rounded">
<ul class="nav nav-tabs d-flex"
style="width: fit-content;margin: 0 auto;gap: 1rem;">
<li class="col text-center py-2 text-nowrap "
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;">
<a
class="active show" data-toggle="tab" href="#tab1"
style="color: #fff;font-weight: 500; background-color: #714B67; text-decoration: none;">
<i class="fa-regular fa-image pr-2"
style="color: #fff;"></i>
Screenshots</a></li>
<li class="col text-center py-2 text-nowrap "
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;">
<a
data-toggle="tab" href="#tab2"
style="color: #fff;font-weight: 500; text-decoration: none;"><i
class="fa-solid fa-star pr-2"
style="color: #fff;"></i>Features</a></li>
<li class="col text-center py-2 text-nowrap "
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;">
<a
data-toggle="tab" href="#tab3"
style="color: #fff;font-weight: 500; text-decoration: none; background-color: #714B67;"><i
class="fa-solid fa-book-open pr-2"
style="color: #fff;"></i>Released Notes</a></li>
</ul>
<div class="tab-content"
style="background-color: rgba(121, 113, 119, 0.04);">
<div id="tab1" class="tab-pane fade in active show">
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/image1.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Add the users to the new security group(Mass
Price Update: Administrator) to give access
to the new menu.</h4>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/image2.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Use the new menu <strong>Inventory ->
Products -> Mass Price Update</strong> to
open the wizard.</h4>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/image3.png"
class="img-thumbnail">
</div>
<div class="px-3">
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
<ol>
<li>Select all products</li>
<li>Select the categories</li>
<li>Select the required products</li>
</ol>
The selected products will be listed in the tree
view in the wizard.</p>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/image6.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
More fields to make it simple</h4>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
The Apply on field is used to select either
Price or Cost to update the sales price and
cost of
the selected products. Set the percentage to
be changed in the Change field. On the Apply
type,
select add to add the amount and reduce to
reduce the amount.
The current and new price/cost of the
selected products will be updated asap in
the list view.</p>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/image4.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
An extra step for safety</h4>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
An extra confirmation to avoid updating the
sale price or cost of products by
accidentally
clicking the change button in the
wizard.</p>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/image5.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Notification</h4>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Notification on completing the price
update.</p>
</div>
</div>
</div>
</div>
<div id="tab2" class="tab-pane fade">
<div class="col-mg-12" style="padding: 1rem 4rem;">
<ul style="list-style: none; padding: 1rem 0;font-weight: 500;">
<li class="py-3"
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<span style="margin-right: 12px;"><img
src="assets/misc/star (1) 2.svg"
alt=""
width="16px"></span>Use the new
wizard for
updating the cost/price of the products.
</li>
<li class="py-3"
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<span style="margin-right: 12px;"><img
src="assets/misc/star (1) 2.svg"
alt=""
width="16px"></span>View and confirm
the current and new cost/price of the products
before changing it.
</li>
</ul>
</div>
</div>
<div id="tab3" class="tab-pane fade">
<div class="col-mg-12 active" style="padding: 1rem 4rem;">
<div class="py-3"
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="d-flex mb-3"
style="font-size: 0.8rem; font-weight: 500;"><span>Version
17.0.1.0.0</span><span
class="px-2">|</span><span
style="color: #714B67;font-weight: 600;">Released on:7th march 2024</span>
</div>
<p class="m-0"
style=" color:#718096!important; font-size:1rem !important;line-height: 28px;">
Initial Commit for Mass Price Update.</p>
</div>
</div>
</div>
</div>
</div>
<div class="container mt-5">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5">
<p class="m-0"
style="font-weight: 600; font-size: 24px; color:#000 !important">
Related Products</p>
</div>
</div>
<div id="myCarousel" class="carousel slide py-3" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<div class="row p-4">
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/base_accounting_kit/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/1.gif"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Odoo 17 Full Accounting Kit</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/invoice_format_editor/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/2.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Invoice Format Editor</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/inventory_barcode_scanning/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/3.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Barcode scanning in Inventory</p>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="carousel-item">
<div class="row p-4">
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/whatsapp_redirect/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/4.jpg"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Send Whatsapp Message</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/base_account_budget/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px;">
<img src="assets/modules/5.jpg"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Budget Management</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/product_barcode/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px;">
<img src="assets/modules/6.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Product Barcode Generator</p>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
<a class="carousel-control-prev" href="#myCarousel"
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="#myCarousel"
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 class="container mt-5">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4">
<p class="m-0"
style="font-weight: 600; font-size: 24px; color:#000 !important">
Our Services</p>
</div>
</div>
<div class="container my-5">
<div class="row py-3">
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#13EA36 ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/cogs.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Customization</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#DBC711; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/wrench.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Implementation</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#FF6B6B ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/lifebuoy.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Support</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#FFA801 ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/user.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Hire
Odoo Developer</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#54A0FF; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/puzzle.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Integration</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#6D7680 ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/update.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Migration</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#786FA6 ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/consultation.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Consultancy</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px;position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#F8A5C2 ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/training.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Implementation</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#E6BE26; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/license.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Licensing Consultancy</p>
</div>
</div>
</div>
</div>
<div class="container mt-5">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4">
<p class="m-0"
style="font-weight: 600; font-size: 24px; color:#000 !important">
Our Industries</p>
</div>
</div>
<div class="container">
<div class="row my-5 py-4">
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100 "
style="border-right: 1px solid rgb(209, 209, 209); border-bottom: 1px solid rgb(209, 209, 209); padding: 30px; box-shadow: 6px 0 10px rgba(228, 227, 227, 0.373);">
<img src="assets/icons/trading-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">Trading</p>
<p>Easily procure and sell your products</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-right: 1px solid rgb(209, 209, 209);border-bottom: 1px solid rgb(209, 209, 209); padding: 30px;">
<img src="assets/icons/pos-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">POS</p>
<p>Easy configuration and convivial experience</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-right: 1px solid rgb(209, 209, 209);border-bottom: 1px solid rgba(0, 0, 0, 0.2); padding: 30px; box-shadow: 0 5px 10px rgba(228, 227, 227, 0.373)">
<img src="assets/icons/education-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">
Education</p>
<p>A platform for educational management</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-bottom: 1px solid rgb(209, 209, 209); padding: 30px; ">
<img src="assets/icons/manufacturing-black.png"
width="42px" height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">
Manufacturing</p>
<p>Plan, track and schedule your operations</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px;">
<img src="assets/icons/ecom-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">E-commerce &
Website</p>
<p>Mobile friendly, awe-inspiring product pages</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px;box-shadow: 0 -5px 10px rgba(228, 227, 227, 0.373);">
<img src="assets/icons/service-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">Service
Management</p>
<p>Keep track of services and invoice</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px; ">
<img src="assets/icons/restaurant-black.png"
width="42px" height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">
Restaurant</p>
<p>Run your bar or restaurant methodically</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style=" padding: 30px;box-shadow: -5px 0 10px rgba(228, 227, 227, 0.373);">
<img src="assets/icons/hotel-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">Hotel
Management</p>
<p>An all-inclusive hotel management application</p>
</div>
</div>
</div>
</div>
<div class="container mt-5">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5">
<p class="m-0"
style="font-weight: 600; font-size: 24px; color:#000 !important">
Support</p>
</div>
</div>
<div class="container my-5">
<div class="row" style="background-color: #FFFAFE;">
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center"
style="border-right: 1px solid #D9D9D9;">
<div style="padding: 30px;">
<div class="d-flex align-items-center">
<img src="assets/misc/support (1) 1.svg" alt=""
width="60px" style="margin-right: 12px;">
<div style="padding: 0px 8px;">
<span
style="color: #714B67;font-size: 24px;font-weight: 600;padding-bottom: 1rem;">Need
Help?</span>
<p class="m-0" style="color:#718096;">Got
questions or need help? Get in touch.</p>
<div style="font-weight: 400;"><span><img
src="assets/misc/support-email.svg"
alt=""
width="18px"
style="filter: invert(1);margin-right: 0.8rem;"></span>odoo@cybrosys.com
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center">
<div style="padding: 30px;">
<div class="d-flex align-items-center">
<img src="assets/misc/whatsapp 1.svg" alt=""
width="60px" style="margin-right: 12px;">
<div>
<span style="color: #714B67;font-size: 24px;font-weight: 600;">WhatsApp</span>
<p class="m-0" style="color:#718096;">Say hi to
us on WhatsApp!</p>
<div style="font-weight: 400; font-size: 16px;"><span><img
src="assets/misc/phone.svg"
alt="" width="14px"
style="filter: invert(1); margin-right: 0.8rem;"></span>+91
99456767686
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>

23
mass_price_update/wizard/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
from . import change_price_line
from . import mass_price_update

72
mass_price_update/wizard/change_price_line.py

@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
from odoo import api, fields, models
class ChangePriceLine(models.TransientModel):
"""One2many for align the products with new price"""
_name = 'change.price.line'
_rec_name = 'product_id'
_description = "Change Price Line"
mass_price_update_id = fields.Many2one('mass.price.update',
string='Number',
help='The related field from mass'
'price update', )
product_id = fields.Many2one(
'product.product', string='Product', required=True,
domain="[('active', '=', True)]", help='Selected products will show')
current_price = fields.Float(string='Current Price', digits='Product Price',
related='product_id.lst_price',
help='The current Sales price')
new_price = fields.Float(string='New Price', digits='Product Price',
compute='_compute_new_price_cost',
help='Computing the new price based on the '
'percentage')
current_cost = fields.Float(string='Current Cost', digits='Product Price',
related='product_id.standard_price',
help='Current cost of the product')
new_cost = fields.Float(string='New Cost', digits='Product Price',
compute='_compute_new_price_cost',
help='Computing the new cost based on the'
'percentage')
currency_id = fields.Many2one('res.currency',
string='Currency',
related='product_id.currency_id',
help='The currency of the product')
@api.depends('mass_price_update_id.apply_on',
'mass_price_update_id.change',
'mass_price_update_id.apply_type')
def _compute_new_price_cost(self):
"""Compute new price and new cost"""
for record in self:
if record.mass_price_update_id.apply_type == 'add':
percentage_num = 1 + record.mass_price_update_id.change
else:
percentage_num = 1 - record.mass_price_update_id.change
if record.mass_price_update_id.apply_on == 'price':
record.new_cost = False
record.new_price = record.current_price * percentage_num
else:
record.new_price = False
record.new_cost = record.current_cost * percentage_num

136
mass_price_update/wizard/mass_price_update.py

@ -0,0 +1,136 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class MassPriceUpdate(models.TransientModel):
"""Change Price and Cost of Products by Percentage"""
_name = 'mass.price.update'
_description = "Mass Price Update"
apply_to = fields.Selection([
('all', 'All Products'), ('category', 'Selected Categories'),
('selected', 'Selected Products')], default='selected',
string='Apply To', required=True,
help='Allows to select the products based on the conditions')
apply_on = fields.Selection([
('price', 'Price'), ('cost', 'Cost')], default='price',
string='Apply On', required=True, help='Apply on Price or Cost')
change = fields.Float(string='Change',
help='The percentage for adding or reducing to the '
'actual price')
apply_type = fields.Selection([
('add', 'Add'), ('reduce', 'Reduce')], default='add',
string='Apply Type', required=True,
help='Choose the applying type whether add or reduce')
product_ids = fields.Many2many(
'product.product', string='Products', default=False,
domain="[('active', '=', True)]", help='Choose the required products')
category_ids = fields.Many2many(
'product.category', string='Categories', default=False,
help='Choose the required Categories')
line_ids = fields.One2many('change.price.line',
'mass_price_update_id',
string='Lines', readonly=True,
help='The selected product with updated price')
@api.onchange('apply_to')
def _onchange_apply_to(self):
"""When select an option from apply_to, the related records will show"""
if self.apply_to == 'all':
self.write({
'category_ids': [(5,)],
'line_ids': [(5,)],
'product_ids': [(6, 0, self.env['product.product'].search(
[('active', '=', True)]).ids)]
})
elif self.apply_to == 'category':
self.write({
'line_ids': [(5,)],
'product_ids': [(6, 0, self.env['product.product'].search(
[('categ_id', 'in', self.category_ids.ids)]).ids)]
})
else:
self.write({
'product_ids': [(5,)],
'category_ids': [(5,)],
'line_ids': [(5,)]
})
@api.onchange('product_ids')
def _onchange_product_ids(self):
"""Updating the products in lines"""
if self.product_ids:
self.write({'line_ids': [(5,)]})
lines = []
for product in self.product_ids:
lines.append((0, 0, {'product_id': product._origin.id}))
self.write({'line_ids': lines})
@api.onchange('category_ids')
def _onchange_category_ids(self):
"""When select the category related product will show"""
if self.category_ids:
self.write({'line_ids': [(5,)], 'product_ids': [(5,)]})
lines = []
products = self.env['product.product'].sudo().search(
[('categ_id', 'in', self.category_ids.ids)])
for product in products:
lines.append((0, 0, {'product_id': product.id}))
self.write({
'product_ids': products.ids,
'line_ids': lines
})
def action_change_price(self):
"""This function is used to change the price or cost of products"""
if self.apply_to == 'category' and not self.product_ids:
raise UserError(_("Please select any category with products."))
if self.apply_to == 'selected' and not self.product_ids:
raise UserError(_("Please select any product."))
if not self.change:
raise UserError(_("Please enter the change in percentage."))
if self.apply_type == 'add':
percentage_num = 1 + self.change
else:
percentage_num = 1 - self.change
if self.apply_on == 'price':
for product in self.product_ids:
product.lst_price = product.lst_price * percentage_num
else:
for product in self.product_ids:
product_template = product.product_tmpl_id
product_template.standard_price = (
product_template.standard_price * percentage_num)
message = f"""The {'sales price' if self.apply_on == 'price'
else 'cost'} is updated."""
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'title': _('Success'),
'message': _(message),
'sticky': True,
'next': {'type': 'ir.actions.act_window_close'},
}
}

82
mass_price_update/wizard/mass_price_update_views.xml

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Form view of the wizard-->
<record id="mass_price_update_view_form" model="ir.ui.view">
<field name="name">mass.price.update.view.form</field>
<field name="model">mass.price.update</field>
<field name="arch" type="xml">
<form string="Mass Price Update">
<sheet>
<group>
<group>
<field name="apply_to" widget="radio"/>
<field name="category_ids" widget="many2many_tags"
options="{'no_create_edit': True, 'no_create': True}"
invisible="apply_to != 'category'"
required="apply_to == 'category'"
/>
<field name="product_ids" widget="many2many_tags"
options="{'no_create_edit': True, 'no_create': True}"
invisible="apply_to != 'selected'"
required="apply_to == 'selected'"/>
<field name="apply_on" widget="radio"/>
</group>
<group>
<field name="change" widget="percentage"/>
<field name="apply_type" widget="radio"/>
</group>
</group>
<notebook>
<page string="Products">
<field name="line_ids"
invisible="product_ids == False or change == 0">
<tree string="Product List">
<field name="product_id"/>
<field name="current_price"
widget="monetary"
options="{'currency_field': 'currency_id', 'field_digits': True}"
column_invisible="parent.apply_on == 'cost'"/>
<field name="new_price" widget="monetary"
options="{'currency_field': 'currency_id', 'field_digits': True}"
column_invisible="parent.apply_on == 'cost'"/>
<field name="current_cost" widget="monetary"
options="{'currency_field': 'currency_id', 'field_digits': True}"
column_invisible="parent.apply_on == 'price'"/>
<field name="new_cost" widget="monetary"
options="{'currency_field': 'currency_id', 'field_digits': True}"
column_invisible="parent.apply_on == 'price'"/>
<field name="currency_id"/>
</tree>
</field>
</page>
</notebook>
<footer>
<button name="action_change_price" string="Change Cost"
type="object" class="oe_highlight"
invisible="apply_on == 'price'"
confirm="Are you sure you want to change the cost?"/>
<button name="action_change_price" string="Change Price"
type="object" class="oe_highlight"
invisible="apply_on == 'cost'"
confirm="Are you sure you want to change the sales price?"/>
<button string="Cancel" class="btn btn-default"
special="cancel"/>
</footer>
</sheet>
</form>
</field>
</record>
<!-- Action for mass product update-->
<record id="mass_price_update_action" model="ir.actions.act_window">
<field name="name">Mass Price Update</field>
<field name="res_model">mass.price.update</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<!-- Menu for mass product update-->
<menuitem id="menu_mass_price_update" name="Mass Price Update"
parent="stock.menu_stock_inventory_control"
action="mass_price_update_action" sequence="5"
groups="mass_price_update.mass_price_update_group_admin"/>
</odoo>
Loading…
Cancel
Save