diff --git a/pos_weight_manual/README.rst b/pos_weight_manual/README.rst new file mode 100644 index 000000000..4c4e61775 --- /dev/null +++ b/pos_weight_manual/README.rst @@ -0,0 +1,40 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +POS Manual Weight +================= +This module will help you to add product weight manually using weigh scale screen without a weigh machine. + +Configuration +============= +* No additional configurations needed. + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +Developer: (V17) Vishnu Kp, +Developer: (V18) Safa KB, +Contact : odoo@cybrosys.com + + + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ diff --git a/pos_weight_manual/__init__.py b/pos_weight_manual/__init__.py new file mode 100644 index 000000000..437010612 --- /dev/null +++ b/pos_weight_manual/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Safa KB (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 . +# +################################################################################ +from . import models diff --git a/pos_weight_manual/__manifest__.py b/pos_weight_manual/__manifest__.py new file mode 100644 index 000000000..8aca21c2f --- /dev/null +++ b/pos_weight_manual/__manifest__.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Safa KB (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 . +# +################################################################################ +{ + 'name': 'POS Manual Weight', + 'version': '18.0.1.0.0', + 'category': 'Point of Sale', + 'summary': 'Add Manual Weight for products in POS.', + 'description': """This module will help you to add product weight manually + using weigh scale screen without a weigh machine.""", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['point_of_sale'], + 'data': [ + 'views/res_config_settings_views.xml', + ], + 'assets': { + 'point_of_sale._assets_pos': [ + 'pos_weight_manual/static/src/xml/Screens/ScaleScreen/ScaleScreen.xml', + 'pos_weight_manual/static/src/js/**/*', + 'pos_weight_manual/static/src/css/**/*', + ] + }, + 'images': ['static/description/banner.jpg'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/pos_weight_manual/doc/RELEASE_NOTES.md b/pos_weight_manual/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..018ab21e5 --- /dev/null +++ b/pos_weight_manual/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 07.05.2025 +#### Version 18.0.1.0.0 +#### ADD +- Initial Commit for POS Manual Weight diff --git a/pos_weight_manual/models/__init__.py b/pos_weight_manual/models/__init__.py new file mode 100644 index 000000000..17f18ce3a --- /dev/null +++ b/pos_weight_manual/models/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Safa KB (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 . +# +################################################################################ +from . import res_config_settings +from . import pos_config +from . import pos_session diff --git a/pos_weight_manual/models/pos_config.py b/pos_weight_manual/models/pos_config.py new file mode 100644 index 000000000..9e69fba00 --- /dev/null +++ b/pos_weight_manual/models/pos_config.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Safa KB (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 . +# +################################################################################ +from odoo import fields, models + + +class PosConf(models.Model): + """Class for POS Configuration""" + _inherit = 'pos.config' + + is_allow_manual_weight = fields.Boolean(string='Allow Manual Weight', + help='If enabled, it will allow you' + 'to add weight manually on POS' + ' Screen if a product has a ' + 'price per weight set.' + ) diff --git a/pos_weight_manual/models/pos_session.py b/pos_weight_manual/models/pos_session.py new file mode 100644 index 000000000..4c9e54fc2 --- /dev/null +++ b/pos_weight_manual/models/pos_session.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Safa KB (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 . +# +################################################################################ +from odoo import models + + +class PosSession(models.Model): + _inherit = 'pos.session' + + def _loader_params_product_template(self): + """Add custom fields to POS product template loader parameters.""" + result = super()._loader_params_product_template() + result['search_params']['fields'] += ['to_weight_with_manual','select'] + return result diff --git a/pos_weight_manual/models/res_config_settings.py b/pos_weight_manual/models/res_config_settings.py new file mode 100644 index 000000000..b43aaea42 --- /dev/null +++ b/pos_weight_manual/models/res_config_settings.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Safa KB (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 . +# +################################################################################ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + """Inherits the ConfigSettings class for Adding the fields""" + _inherit = 'res.config.settings' + + pos_is_allow_manual_weight = fields.Boolean( + string='Allow Manual Weight', readonly=False, + related='pos_config_id.is_allow_manual_weight', + config_parameter='pos_manual.pos_is_allow_manual_weight') diff --git a/pos_weight_manual/static/description/assets/cybro-icon.png b/pos_weight_manual/static/description/assets/cybro-icon.png new file mode 100644 index 000000000..06e73e11d Binary files /dev/null and b/pos_weight_manual/static/description/assets/cybro-icon.png differ diff --git a/pos_weight_manual/static/description/assets/cybro-odoo.png b/pos_weight_manual/static/description/assets/cybro-odoo.png new file mode 100644 index 000000000..ed02e07a4 Binary files /dev/null and b/pos_weight_manual/static/description/assets/cybro-odoo.png differ diff --git a/pos_weight_manual/static/description/assets/h2.png b/pos_weight_manual/static/description/assets/h2.png new file mode 100644 index 000000000..0bfc4707d Binary files /dev/null and b/pos_weight_manual/static/description/assets/h2.png differ diff --git a/pos_weight_manual/static/description/assets/icons/arrows-repeat.svg b/pos_weight_manual/static/description/assets/icons/arrows-repeat.svg new file mode 100644 index 000000000..1d7efabc5 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/banner-1.png b/pos_weight_manual/static/description/assets/icons/banner-1.png new file mode 100644 index 000000000..c180db172 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/banner-1.png differ diff --git a/pos_weight_manual/static/description/assets/icons/banner-2.svg b/pos_weight_manual/static/description/assets/icons/banner-2.svg new file mode 100644 index 000000000..e606d97d9 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/banner-2.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/banner-bg.png b/pos_weight_manual/static/description/assets/icons/banner-bg.png new file mode 100644 index 000000000..a8238d3c0 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/banner-bg.png differ diff --git a/pos_weight_manual/static/description/assets/icons/banner-bg.svg b/pos_weight_manual/static/description/assets/icons/banner-bg.svg new file mode 100644 index 000000000..b1378103e --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/banner-bg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/banner-call.svg b/pos_weight_manual/static/description/assets/icons/banner-call.svg new file mode 100644 index 000000000..96c687e81 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/banner-call.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/banner-mail.svg b/pos_weight_manual/static/description/assets/icons/banner-mail.svg new file mode 100644 index 000000000..cbf0d158d --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/banner-mail.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/banner-pattern.svg b/pos_weight_manual/static/description/assets/icons/banner-pattern.svg new file mode 100644 index 000000000..9c1c7e101 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/banner-pattern.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/banner-promo.svg b/pos_weight_manual/static/description/assets/icons/banner-promo.svg new file mode 100644 index 000000000..d52791b11 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/banner-promo.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/brand-pair.svg b/pos_weight_manual/static/description/assets/icons/brand-pair.svg new file mode 100644 index 000000000..d8db7fc1e --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/brand-pair.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/check.png b/pos_weight_manual/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/check.png differ diff --git a/pos_weight_manual/static/description/assets/icons/chevron.png b/pos_weight_manual/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/chevron.png differ diff --git a/pos_weight_manual/static/description/assets/icons/close-icon.svg b/pos_weight_manual/static/description/assets/icons/close-icon.svg new file mode 100644 index 000000000..df8cce37a --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/close-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/cogs.png b/pos_weight_manual/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/cogs.png differ diff --git a/pos_weight_manual/static/description/assets/icons/collabarate-icon.svg b/pos_weight_manual/static/description/assets/icons/collabarate-icon.svg new file mode 100644 index 000000000..dd4e10518 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/collabarate-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/pos_weight_manual/static/description/assets/icons/consultation.png b/pos_weight_manual/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/consultation.png differ diff --git a/pos_weight_manual/static/description/assets/icons/cybro-logo.png b/pos_weight_manual/static/description/assets/icons/cybro-logo.png new file mode 100644 index 000000000..ff4b78220 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/cybro-logo.png differ diff --git a/pos_weight_manual/static/description/assets/icons/down.svg b/pos_weight_manual/static/description/assets/icons/down.svg new file mode 100644 index 000000000..f21c36271 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pos_weight_manual/static/description/assets/icons/ecom-black.png b/pos_weight_manual/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/ecom-black.png differ diff --git a/pos_weight_manual/static/description/assets/icons/education-black.png b/pos_weight_manual/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/education-black.png differ diff --git a/pos_weight_manual/static/description/assets/icons/faq.png b/pos_weight_manual/static/description/assets/icons/faq.png new file mode 100644 index 000000000..4250b5b81 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/faq.png differ diff --git a/pos_weight_manual/static/description/assets/icons/feature-icon.svg b/pos_weight_manual/static/description/assets/icons/feature-icon.svg new file mode 100644 index 000000000..fa0ea6850 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/feature-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/feature.png b/pos_weight_manual/static/description/assets/icons/feature.png new file mode 100644 index 000000000..ac7a785c0 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/feature.png differ diff --git a/pos_weight_manual/static/description/assets/icons/gear.svg b/pos_weight_manual/static/description/assets/icons/gear.svg new file mode 100644 index 000000000..0cc66b6ea --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/hero.gif b/pos_weight_manual/static/description/assets/icons/hero.gif new file mode 100644 index 000000000..380654dfe Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/hero.gif differ diff --git a/pos_weight_manual/static/description/assets/icons/hire-odoo.svg b/pos_weight_manual/static/description/assets/icons/hire-odoo.svg new file mode 100644 index 000000000..e1ac089b0 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/hotel-black.png b/pos_weight_manual/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/hotel-black.png differ diff --git a/pos_weight_manual/static/description/assets/icons/license.png b/pos_weight_manual/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/license.png differ diff --git a/pos_weight_manual/static/description/assets/icons/life-ring-icon.svg b/pos_weight_manual/static/description/assets/icons/life-ring-icon.svg new file mode 100644 index 000000000..3ae6e1d89 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/lifebuoy.png b/pos_weight_manual/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/lifebuoy.png differ diff --git a/pos_weight_manual/static/description/assets/icons/mail.svg b/pos_weight_manual/static/description/assets/icons/mail.svg new file mode 100644 index 000000000..1eedde695 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/pos_weight_manual/static/description/assets/icons/manufacturing-black.png b/pos_weight_manual/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/manufacturing-black.png differ diff --git a/pos_weight_manual/static/description/assets/icons/notes.png b/pos_weight_manual/static/description/assets/icons/notes.png new file mode 100644 index 000000000..ee5e95404 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/notes.png differ diff --git a/pos_weight_manual/static/description/assets/icons/notification icon.svg b/pos_weight_manual/static/description/assets/icons/notification icon.svg new file mode 100644 index 000000000..053189973 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/notification icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/odoo-consultancy.svg b/pos_weight_manual/static/description/assets/icons/odoo-consultancy.svg new file mode 100644 index 000000000..e05f65bde --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/pos_weight_manual/static/description/assets/icons/odoo-licencing.svg b/pos_weight_manual/static/description/assets/icons/odoo-licencing.svg new file mode 100644 index 000000000..2606c88b0 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/pos_weight_manual/static/description/assets/icons/odoo-logo.png b/pos_weight_manual/static/description/assets/icons/odoo-logo.png new file mode 100644 index 000000000..0e4d0eb5a Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/odoo-logo.png differ diff --git a/pos_weight_manual/static/description/assets/icons/patter.svg b/pos_weight_manual/static/description/assets/icons/patter.svg new file mode 100644 index 000000000..25c9c0a8f --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/pattern1.png b/pos_weight_manual/static/description/assets/icons/pattern1.png new file mode 100644 index 000000000..09ab0fb2d Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/pattern1.png differ diff --git a/pos_weight_manual/static/description/assets/icons/pos-black.png b/pos_weight_manual/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/pos-black.png differ diff --git a/pos_weight_manual/static/description/assets/icons/puzzle-piece-icon.svg b/pos_weight_manual/static/description/assets/icons/puzzle-piece-icon.svg new file mode 100644 index 000000000..3e9ad9373 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/puzzle.png b/pos_weight_manual/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/puzzle.png differ diff --git a/pos_weight_manual/static/description/assets/icons/replace-icon.svg b/pos_weight_manual/static/description/assets/icons/replace-icon.svg new file mode 100644 index 000000000..d0e3a7af1 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/replace-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/restaurant-black.png b/pos_weight_manual/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/restaurant-black.png differ diff --git a/pos_weight_manual/static/description/assets/icons/screenshot-main.png b/pos_weight_manual/static/description/assets/icons/screenshot-main.png new file mode 100644 index 000000000..575f8e676 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/screenshot-main.png differ diff --git a/pos_weight_manual/static/description/assets/icons/screenshot.png b/pos_weight_manual/static/description/assets/icons/screenshot.png new file mode 100644 index 000000000..cef272529 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/screenshot.png differ diff --git a/pos_weight_manual/static/description/assets/icons/service-black.png b/pos_weight_manual/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/service-black.png differ diff --git a/pos_weight_manual/static/description/assets/icons/skype-fill.svg b/pos_weight_manual/static/description/assets/icons/skype-fill.svg new file mode 100644 index 000000000..c17423639 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/skype-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/skype.png b/pos_weight_manual/static/description/assets/icons/skype.png new file mode 100644 index 000000000..51b409fb3 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/skype.png differ diff --git a/pos_weight_manual/static/description/assets/icons/skype.svg b/pos_weight_manual/static/description/assets/icons/skype.svg new file mode 100644 index 000000000..df3dad39b --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/skype.svg @@ -0,0 +1,3 @@ + + + diff --git a/pos_weight_manual/static/description/assets/icons/star-1.svg b/pos_weight_manual/static/description/assets/icons/star-1.svg new file mode 100644 index 000000000..7e55ab162 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/star-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/star-2.svg b/pos_weight_manual/static/description/assets/icons/star-2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/star-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/support.png b/pos_weight_manual/static/description/assets/icons/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/support.png differ diff --git a/pos_weight_manual/static/description/assets/icons/test-1 - Copy.png b/pos_weight_manual/static/description/assets/icons/test-1 - Copy.png new file mode 100644 index 000000000..f6a902663 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/test-1 - Copy.png differ diff --git a/pos_weight_manual/static/description/assets/icons/test-1.png b/pos_weight_manual/static/description/assets/icons/test-1.png new file mode 100644 index 000000000..0908add2b Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/test-1.png differ diff --git a/pos_weight_manual/static/description/assets/icons/test-2.png b/pos_weight_manual/static/description/assets/icons/test-2.png new file mode 100644 index 000000000..4671fe91e Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/test-2.png differ diff --git a/pos_weight_manual/static/description/assets/icons/trading-black.png b/pos_weight_manual/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/trading-black.png differ diff --git a/pos_weight_manual/static/description/assets/icons/training.png b/pos_weight_manual/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/training.png differ diff --git a/pos_weight_manual/static/description/assets/icons/translate.svg b/pos_weight_manual/static/description/assets/icons/translate.svg new file mode 100644 index 000000000..af9c8a1aa --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/update.png b/pos_weight_manual/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/update.png differ diff --git a/pos_weight_manual/static/description/assets/icons/user.png b/pos_weight_manual/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/user.png differ diff --git a/pos_weight_manual/static/description/assets/icons/video.png b/pos_weight_manual/static/description/assets/icons/video.png new file mode 100644 index 000000000..576705b17 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/video.png differ diff --git a/pos_weight_manual/static/description/assets/icons/whatsapp.png b/pos_weight_manual/static/description/assets/icons/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/whatsapp.png differ diff --git a/pos_weight_manual/static/description/assets/icons/wrench-icon.svg b/pos_weight_manual/static/description/assets/icons/wrench-icon.svg new file mode 100644 index 000000000..174b5a465 --- /dev/null +++ b/pos_weight_manual/static/description/assets/icons/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pos_weight_manual/static/description/assets/icons/wrench.png b/pos_weight_manual/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/pos_weight_manual/static/description/assets/icons/wrench.png differ diff --git a/pos_weight_manual/static/description/assets/modules/1.gif b/pos_weight_manual/static/description/assets/modules/1.gif new file mode 100644 index 000000000..0b5654dda Binary files /dev/null and b/pos_weight_manual/static/description/assets/modules/1.gif differ diff --git a/pos_weight_manual/static/description/assets/modules/2.jpg b/pos_weight_manual/static/description/assets/modules/2.jpg new file mode 100644 index 000000000..e30902970 Binary files /dev/null and b/pos_weight_manual/static/description/assets/modules/2.jpg differ diff --git a/pos_weight_manual/static/description/assets/modules/3.png b/pos_weight_manual/static/description/assets/modules/3.png new file mode 100644 index 000000000..906d51bf5 Binary files /dev/null and b/pos_weight_manual/static/description/assets/modules/3.png differ diff --git a/pos_weight_manual/static/description/assets/modules/4.png b/pos_weight_manual/static/description/assets/modules/4.png new file mode 100644 index 000000000..29c325870 Binary files /dev/null and b/pos_weight_manual/static/description/assets/modules/4.png differ diff --git a/pos_weight_manual/static/description/assets/modules/5.png b/pos_weight_manual/static/description/assets/modules/5.png new file mode 100644 index 000000000..5ecbe9819 Binary files /dev/null and b/pos_weight_manual/static/description/assets/modules/5.png differ diff --git a/pos_weight_manual/static/description/assets/modules/6.png b/pos_weight_manual/static/description/assets/modules/6.png new file mode 100644 index 000000000..3722f2378 Binary files /dev/null and b/pos_weight_manual/static/description/assets/modules/6.png differ diff --git a/pos_weight_manual/static/description/assets/screenshots/hero.gif b/pos_weight_manual/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..260ab4fa2 Binary files /dev/null and b/pos_weight_manual/static/description/assets/screenshots/hero.gif differ diff --git a/pos_weight_manual/static/description/assets/screenshots/pos_weight_1.png b/pos_weight_manual/static/description/assets/screenshots/pos_weight_1.png new file mode 100644 index 000000000..691ab7fa2 Binary files /dev/null and b/pos_weight_manual/static/description/assets/screenshots/pos_weight_1.png differ diff --git a/pos_weight_manual/static/description/assets/screenshots/pos_weight_3.png b/pos_weight_manual/static/description/assets/screenshots/pos_weight_3.png new file mode 100644 index 000000000..2ddf02a98 Binary files /dev/null and b/pos_weight_manual/static/description/assets/screenshots/pos_weight_3.png differ diff --git a/pos_weight_manual/static/description/assets/screenshots/pos_weight_4.png b/pos_weight_manual/static/description/assets/screenshots/pos_weight_4.png new file mode 100644 index 000000000..f2825b633 Binary files /dev/null and b/pos_weight_manual/static/description/assets/screenshots/pos_weight_4.png differ diff --git a/pos_weight_manual/static/description/assets/screenshots/pos_weight_manual_2.png b/pos_weight_manual/static/description/assets/screenshots/pos_weight_manual_2.png new file mode 100644 index 000000000..49de31173 Binary files /dev/null and b/pos_weight_manual/static/description/assets/screenshots/pos_weight_manual_2.png differ diff --git a/pos_weight_manual/static/description/banner.png b/pos_weight_manual/static/description/banner.png new file mode 100644 index 000000000..f4461f001 Binary files /dev/null and b/pos_weight_manual/static/description/banner.png differ diff --git a/pos_weight_manual/static/description/icon.png b/pos_weight_manual/static/description/icon.png new file mode 100644 index 000000000..c50cb7577 Binary files /dev/null and b/pos_weight_manual/static/description/icon.png differ diff --git a/pos_weight_manual/static/description/index.html b/pos_weight_manual/static/description/index.html new file mode 100644 index 000000000..64b46dd8b --- /dev/null +++ b/pos_weight_manual/static/description/index.html @@ -0,0 +1,814 @@ + + + + + + Pos Manual Weight + + + + + + + + + + +
+
+ + + +
+
+ Community +
+
+ Enterprise +
+ + + + +
+
+ +
+
+
+
+

+ A Module for generating pos weight manual. +

+

Pos Manual Weight +

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

Key + Highlights

+
+
+
+
+ +
+
+ Community & Enterprise Support.
+
+
+
+
+
+ +
+
+ Add Product Weight Manually.
+
+
+
+
+
+ +
+
+
+ Automatic Database Backup +

+ Are you ready to make your business more + organized? +
Improve now! +

+ +
+
+ +
+
+
+ + + + +
+
+ +
+
+
+
+ acc_bg +
+ +
+
+
+
+

+ Configuration Settings + +

+
+
+

+ There will be a field in configuration settings to enable the feature. +

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

+ Weight Scale Screen + +

+
+
+

+ When you click on the product, a screen displaying the weight scale will appear. +

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

+ Order line + +

+
+
+

Now the quantity and price will be added to the order line. +

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

Can Add product weight without weighing machine. +

+
+
+
+
+
+
+ +
+
+

+ Latest Release 18.0.1.0.0 +

+ + 07th may, 2025 + +
+
+
+
+
+ Add +
+
+
+
    +
  • + Initial Commit +
  • + +
+
+
+
+
+
+
+
+
+
+ + + + + +
+

+ Our Services

+ +
+ +
+
+ .... +
+
+ +
+ + +
+ + + + + + + diff --git a/pos_weight_manual/static/src/css/pos_weight_manual.css b/pos_weight_manual/static/src/css/pos_weight_manual.css new file mode 100644 index 000000000..b4ff73687 --- /dev/null +++ b/pos_weight_manual/static/src/css/pos_weight_manual.css @@ -0,0 +1,3 @@ +.centered-content{ +width:500px !important; +height:300px !important;} diff --git a/pos_weight_manual/static/src/js/pos_store.js b/pos_weight_manual/static/src/js/pos_store.js new file mode 100644 index 000000000..7ed40f422 --- /dev/null +++ b/pos_weight_manual/static/src/js/pos_store.js @@ -0,0 +1,342 @@ +/** @odoo-module **/ +import { Component } from "@odoo/owl"; +import { ScaleScreen } from "@pos_weight_manual/js/scale_screen"; +import { Dialog } from "@web/core/dialog/dialog"; +import { useService } from "@web/core/utils/hooks"; +import { PosStore } from "@point_of_sale/app/store/pos_store"; +import { patch } from "@web/core/utils/patch"; +import { makeAwaitable } from "@point_of_sale/app/store/make_awaitable_dialog"; + +patch(PosStore.prototype, { + async addLineToCurrentOrder(vals, opts = {}, merge = true) { + merge = false; + let order = this.get_order(); + order.assert_editable(); + + if (!order) { + order = this.add_new_order(); + } + + const options = { + ...opts, + }; + + if ("price_unit" in vals) { + merge = false; + } + + const product = vals.product_id; + const productPrice = product.lst_price || product.price || 0; + + const values = { + price_type: "price_unit" in vals ? "manual" : "original", + price_extra: 0, + price_unit: productPrice, + order_id: this.get_order(), + qty: 1, + tax_ids: product.taxes_id.map((tax) => ["link", tax]), + ...vals, + }; + + if (!('price_unit' in vals) && productPrice > 0) { + values.price_unit = productPrice; + } + + if (this.env.services.pos.config.is_allow_manual_weight) { + if (values.product_id.isScaleAvailable) { + this.isScaleScreenVisible = true; + this.scaleData = { + productName: values.product_id?.display_name, + uomName: values.product_id.uom_id?.name, + uomRounding: values.product_id.uom_id?.rounding, + productPrice: productPrice, + }; + const weight = await makeAwaitable( + this.env.services.dialog, + ScaleScreen, + this.scaleData + ); + if (!weight) { + return; + } + values.qty = weight; + this.isScaleScreenVisible = false; + this.scaleWeight = 0; + this.scaleTare = 0; + this.totalPriceOnScale = 0; + } else { + await values.product_id._onScaleNotAvailable(); + } + } + + return super.addLineToCurrentOrder(values, options, merge); + }, + + async addLineToOrder(vals, order, opts = {}, configure = true) { + let merge = true; + order.assert_editable(); + + const options = { + ...opts, + }; + + if ("price_unit" in vals) { + merge = false; + } + + if (typeof vals.product_id == "number") { + vals.product_id = this.data.models["product.product"].get(vals.product_id); + } + const product = vals.product_id; + + const values = { + price_type: "price_unit" in vals ? "manual" : "original", + price_extra: 0, + price_unit: 0, + order_id: this.get_order(), + qty: 1, + tax_ids: product.taxes_id.map((tax) => ["link", tax]), + ...vals, + }; + + // Handle refund constraints + if ( + order.doNotAllowRefundAndSales() && + order._isRefundOrder() && + (!values.qty || values.qty > 0) + ) { + this.dialog.add(AlertDialog, { + title: _t("Refund and Sales not allowed"), + body: _t("It is not allowed to mix refunds and sales"), + }); + return; + } + + + if (values.product_id.isConfigurable() && configure) { + const payload = await this.openConfigurator(values.product_id); + + if (payload) { + const productFound = this.models["product.product"] + .filter((p) => p.raw?.product_template_variant_value_ids?.length > 0) + .find((p) => + p.raw.product_template_variant_value_ids.every((v) => + payload.attribute_value_ids.includes(v) + ) + ); + + Object.assign(values, { + attribute_value_ids: payload.attribute_value_ids + .filter((a) => { + if (productFound) { + const attr = + this.data.models["product.template.attribute.value"].get(a); + return ( + attr.is_custom || attr.attribute_id.create_variant !== "always" + ); + } + return true; + }) + .map((id) => [ + "link", + this.data.models["product.template.attribute.value"].get(id), + ]), + custom_attribute_value_ids: Object.entries(payload.attribute_custom_values).map( + ([id, cus]) => { + return [ + "create", + { + custom_product_template_attribute_value_id: + this.data.models["product.template.attribute.value"].get( + id + ), + custom_value: cus, + }, + ]; + } + ), + price_extra: values.price_extra + payload.price_extra, + qty: payload.qty || values.qty, + product_id: productFound || values.product_id, + }); + } else { + return; + } + } else if (values.product_id.product_template_variant_value_ids.length > 0) { + const priceExtra = values.product_id.product_template_variant_value_ids + .filter((attr) => attr.attribute_id.create_variant !== "always") + .reduce((acc, attr) => acc + attr.price_extra, 0); + values.price_extra += priceExtra; + } + + if (values.product_id.isCombo() && configure) { + const payload = await makeAwaitable(this.dialog, ComboConfiguratorPopup, { + product: values.product_id, + }); + + if (!payload) { + return; + } + + const comboPrices = computeComboItems( + values.product_id, + payload, + order.pricelist_id, + this.data.models["decimal.precision"].getAll(), + this.data.models["product.template.attribute.value"].getAllBy("id") + ); + + values.combo_line_ids = comboPrices.map((comboItem) => [ + "create", + { + product_id: comboItem.combo_item_id.product_id, + tax_ids: comboItem.combo_item_id.product_id.taxes_id.map((tax) => [ + "link", + tax, + ]), + combo_item_id: comboItem.combo_item_id, + price_unit: comboItem.price_unit, + order_id: order, + qty: 1, + attribute_value_ids: comboItem.attribute_value_ids?.map((attr) => [ + "link", + attr, + ]), + custom_attribute_value_ids: Object.entries( + comboItem.attribute_custom_values + ).map(([id, cus]) => { + return [ + "create", + { + custom_product_template_attribute_value_id: + this.data.models["product.template.attribute.value"].get(id), + custom_value: cus, + }, + ]; + }), + }, + ]); + } + + const code = opts.code; + if (values.product_id.isTracked() && (configure || code)) { + let pack_lot_ids = {}; + const packLotLinesToEdit = + (!values.product_id.isAllowOnlyOneLot() && + this.get_order() + .get_orderlines() + .filter((line) => !line.get_discount()) + .find((line) => line.product_id.id === values.product_id.id) + ?.getPackLotLinesToEdit()) || + []; + + if (code && code.type === "lot") { + const modifiedPackLotLines = Object.fromEntries( + packLotLinesToEdit.filter((item) => item.id).map((item) => [item.id, item.text]) + ); + const newPackLotLines = [{ lot_name: code.code }]; + pack_lot_ids = { modifiedPackLotLines, newPackLotLines }; + } else { + pack_lot_ids = await this.editLots(values.product_id, packLotLinesToEdit); + } + + if (!pack_lot_ids) { + return; + } else { + const packLotLine = pack_lot_ids.newPackLotLines; + values.pack_lot_ids = packLotLine.map((lot) => ["create", lot]); + } + } + + if (values.product_id.to_weight && this.config.iface_electronic_scale && configure) { + + if (values.product_id.isScaleAvailable) { + this.isScaleScreenVisible = true; + this.scaleData = { + productName: values.product_id?.display_name, + uomName: values.product_id.uom_id?.name, + uomRounding: values.product_id.uom_id?.rounding, + productPrice: this.getProductPrice(values.product_id), + }; + const weight = await makeAwaitable( + this.env.services.dialog, + ScaleScreen, + this.scaleData + ); + if (!weight) { + return; + } + values.qty = weight; + this.isScaleScreenVisible = false; + this.scaleWeight = 0; + this.scaleTare = 0; + this.totalPriceOnScale = 0; + } else { + await values.product_id._onScaleNotAvailable(); + } + } + + if (!values.product_id.isCombo() && vals.price_unit === undefined) { + values.price_unit = values.product_id.get_price(order.pricelist_id, values.qty); + } + const isScannedProduct = opts.code && opts.code.type === "product"; + if (values.price_extra && !isScannedProduct) { + const price = values.product_id.get_price( + order.pricelist_id, + values.qty, + values.price_extra + ); + + values.price_unit = price; + } + + const line = this.data.models["pos.order.line"].create({ ...values, order_id: order }); + line.setOptions(options); + this.selectOrderLine(order, line); + if (configure) { + this.numberBuffer.reset(); + } + const selectedOrderline = order.get_selected_orderline(); + if (options.draftPackLotLines && configure) { + selectedOrderline.setPackLotLines({ + ...options.draftPackLotLines, + setQuantity: options.quantity === undefined, + }); + } + + let to_merge_orderline; + for (const curLine of order.lines) { + if (curLine.id !== line.id) { + if (curLine.can_be_merged_with(line)) { + to_merge_orderline = curLine; + } + } + } + + if (to_merge_orderline) { + to_merge_orderline.merge(line); + line.delete(); + this.selectOrderLine(order, to_merge_orderline); + } else if (!selectedOrderline) { + this.selectOrderLine(order, order.get_last_orderline()); + } + + if (configure) { + this.numberBuffer.reset(); + } + + order.recomputeOrderData(); + + if (configure) { + this.numberBuffer.reset(); + } + + this.hasJustAddedProduct = true; + clearTimeout(this.productReminderTimeout); + this.productReminderTimeout = setTimeout(() => { + this.hasJustAddedProduct = false; + }, 3000); + + return line; + } +}); diff --git a/pos_weight_manual/static/src/js/scale_screen.js b/pos_weight_manual/static/src/js/scale_screen.js new file mode 100644 index 000000000..faf3bcb76 --- /dev/null +++ b/pos_weight_manual/static/src/js/scale_screen.js @@ -0,0 +1,108 @@ +import { roundPrecision as round_pr } from "@web/core/utils/numbers"; +import { usePos } from "@point_of_sale/app/store/pos_hook"; +import { Component, onMounted, onWillUnmount, useState } from "@odoo/owl"; +import { Dialog } from "@web/core/dialog/dialog"; +import { useService } from "@web/core/utils/hooks"; + +export class ScaleScreen extends Component { + static template = "pos_weight_manual.ScaleScreenManual"; + static components = { Dialog }; + + static props = { + getPayload: Function, + productName: String, + uomName: String, + uomRounding: Number, + productPrice: Number, + close: Function, + }; + + setup() { + this.pos = usePos(); + this.hardwareProxy = useService("hardware_proxy"); + + this.state = useState({ + weight: 0, + tare: 0, + tareLoading: false, + manualOverride: false, + }); + + onMounted(this.onMounted); + onWillUnmount(this.onWillUnmount); + } + + onMounted() { + this._readScale(); + } + + onWillUnmount() { + this.shouldRead = false; + } + + confirm() { + this.props.getPayload(this.netWeight); + this.props.close(); + } + + _readScale() { + this.shouldRead = true; + this._setWeight(); + } + + async _setWeight() { + if (!this.shouldRead || this.state.manualOverride) return; + + try { + const scaleWeight = await this.hardwareProxy.readScale(); + this.state.weight = scaleWeight; + // Removed this.pos.setScaleWeight(scaleWeight) as it doesn't exist + } catch (error) { + console.warn("Scale read error:", error); + } + + setTimeout(() => this._setWeight(), 500); + } + + get netWeight() { + const weight = round_pr(this.state.weight || 0, this.props.uomRounding); + const rounded = weight.toFixed( + Math.ceil(Math.log(1.0 / this.props.uomRounding) / Math.log(10)) + ); + return parseFloat(rounded) - parseFloat(this.state.tare || 0); + } + + get productWeightString() { + const weight = round_pr(this.state.weight || 0, this.props.uomRounding); + const weightStr = weight.toFixed( + Math.ceil(Math.log(1.0 / this.props.uomRounding) / Math.log(10)) + ); + return `${weightStr} ${this.props.uomName || 'Kg'}`; + } + + get computedPriceString() { + const priceString = this.env.utils.formatCurrency(this.netWeight * this.props.productPrice); + // Store the price in a way that doesn't require pos.totalPriceOnScale + // You can access this via this.computedPriceString when needed + return priceString; + } + + async handleTareButtonClick() { + this.state.tareLoading = true; + try { + const tareWeight = await this.hardwareProxy.readScale(); + this.state.tare = tareWeight; + } catch (error) { + console.warn("Tare read error:", error); + } + setTimeout(() => { + this.state.tareLoading = false; + }, 3000); + } + + handleInputChange(ev) { + const value = parseFloat(ev.target.value) || 0; + this.state.weight = value; + this.state.manualOverride = true; + } +} \ No newline at end of file diff --git a/pos_weight_manual/static/src/xml/Screens/ScaleScreen/ScaleScreen.xml b/pos_weight_manual/static/src/xml/Screens/ScaleScreen/ScaleScreen.xml new file mode 100644 index 000000000..d12c90a47 --- /dev/null +++ b/pos_weight_manual/static/src/xml/Screens/ScaleScreen/ScaleScreen.xml @@ -0,0 +1,43 @@ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ / +
+
+ +
+
+
+ + +
+ Order +
+
+
+
+
diff --git a/pos_weight_manual/views/res_config_settings_views.xml b/pos_weight_manual/views/res_config_settings_views.xml new file mode 100644 index 000000000..fc6f2a07f --- /dev/null +++ b/pos_weight_manual/views/res_config_settings_views.xml @@ -0,0 +1,28 @@ + + + + + + res.config.settings.view.form.inherit.pos.weight.manual + + res.config.settings + + + +
+
+ +
+
+
+
+
+
+
+