diff --git a/product_product_qr_code/README.rst b/product_product_qr_code/README.rst new file mode 100644 index 0000000000..058a3f5fd7 --- /dev/null +++ b/product_product_qr_code/README.rst @@ -0,0 +1,70 @@ +.. image:: https://img.shields.io/badge/license-LGPL--3-blue.svg + :target: https://opensource.org/licenses/LGPL-3.0 + :alt: License: LGPL-3 + +======================= +Product QR Code +======================= + +Overview +======== + +The **Product QR Code** module adds the capability to generate and display QR codes for products based on their barcodes. This is particularly useful for inventory management, product identification, and streamlined operations. + +Features +======== + +- **Automatic QR Code Generation**: + - QR codes are generated automatically for products with a barcode. +- **QR Code Display**: + - The QR code is displayed in the product form view for easy access. +- **Integrated Design**: + - The module integrates seamlessly into the existing product management system. + +Usage +===== + +1. **Install the Module**: + - Install the **Product QR Code** module from the Apps menu. + +2. **Generate QR Codes**: + - Open any product with a barcode. + - The QR code is automatically generated and displayed in the form view. + +3. **QR Code Preview**: + - The QR code can be previewed directly from the product form view. + +Configuration +============= + +No additional configuration is required. The module works automatically once installed. + +Testing +======= + +To verify the module's functionality: + +1. Create or edit a product and ensure it has a barcode. +2. Save the product. +3. Check the QR code field to confirm the QR code is generated. + +Bug Tracker +=========== + +If you encounter any issues, please report them on the GitHub repository at `GitHub Issues `_. + +Credits +======= + +Contributors +------------ + +* Ana Juaristi +* Unai Beristain + +For specific questions or support, please contact the contributors. + +License +======= + +This project is licensed under the LGPL-3 License. For more details, refer to the LICENSE file or visit . diff --git a/product_product_qr_code/__init__.py b/product_product_qr_code/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/product_product_qr_code/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_product_qr_code/__manifest__.py b/product_product_qr_code/__manifest__.py new file mode 100644 index 0000000000..6def089d6e --- /dev/null +++ b/product_product_qr_code/__manifest__.py @@ -0,0 +1,14 @@ +{ + "name": "Product QR Code", + "version": "16.0.1.0.0", + "category": "Product", + "author": "Avanzosc", + "license": "LGPL-3", + "depends": ["product"], + "data": [ + "views/product_product_views.xml", + ], + "installable": True, + "application": False, + "website": "https://github.com/avanzosc/odoo-addons", +} diff --git a/product_product_qr_code/models/__init__.py b/product_product_qr_code/models/__init__.py new file mode 100644 index 0000000000..5c74c8c30f --- /dev/null +++ b/product_product_qr_code/models/__init__.py @@ -0,0 +1 @@ +from . import product_product diff --git a/product_product_qr_code/models/product_product.py b/product_product_qr_code/models/product_product.py new file mode 100644 index 0000000000..2d6730221e --- /dev/null +++ b/product_product_qr_code/models/product_product.py @@ -0,0 +1,33 @@ +import base64 +from io import BytesIO + +import qrcode + +from odoo import api, fields, models + + +class ProductProduct(models.Model): + _inherit = "product.product" + + qr_code = fields.Char("QR Code", compute="_compute_qr_code", store=True) + + @api.depends("barcode") + def _compute_qr_code(self): + for product in self: + if product.barcode: + qr = qrcode.QRCode( + version=1, + error_correction=qrcode.constants.ERROR_CORRECT_L, + box_size=10, + border=4, + ) + qr.add_data(product.barcode) + qr.make(fit=True) + + img = qr.make_image(fill_color="black", back_color="white") + buffer = BytesIO() + img.save(buffer, format="PNG") + qr_image = base64.b64encode(buffer.getvalue()).decode("utf-8") + product.qr_code = qr_image + else: + product.qr_code = False diff --git a/product_product_qr_code/views/product_product_views.xml b/product_product_qr_code/views/product_product_views.xml new file mode 100644 index 0000000000..5e0ebd261e --- /dev/null +++ b/product_product_qr_code/views/product_product_views.xml @@ -0,0 +1,17 @@ + + + product.product.form.inherit.qr + product.product + + + + + + + + diff --git a/setup/product_product_qr_code/odoo/addons/product_product_qr_code b/setup/product_product_qr_code/odoo/addons/product_product_qr_code new file mode 120000 index 0000000000..228bda819c --- /dev/null +++ b/setup/product_product_qr_code/odoo/addons/product_product_qr_code @@ -0,0 +1 @@ +../../../../product_product_qr_code \ No newline at end of file diff --git a/setup/product_product_qr_code/setup.py b/setup/product_product_qr_code/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/product_product_qr_code/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)