Browse Source

May 13: [ADD] Initial commit 'ir_attach_image_compressor'

pull/380/head
Cybrosys Technologies 2 months ago
parent
commit
d6c4c39420
  1. 46
      ir_attach_image_compressor/README.rst
  2. 22
      ir_attach_image_compressor/__init__.py
  3. 47
      ir_attach_image_compressor/__manifest__.py
  4. 16
      ir_attach_image_compressor/data/cron.xml
  5. 103
      ir_attach_image_compressor/data/data.xml
  6. 6
      ir_attach_image_compressor/doc/RELEASE_NOTES.md
  7. 24
      ir_attach_image_compressor/models/__init__.py
  8. 48
      ir_attach_image_compressor/models/file_formats.py
  9. 144
      ir_attach_image_compressor/models/image_compression_rule.py
  10. 29
      ir_attach_image_compressor/models/ir_attachment.py
  11. 6
      ir_attach_image_compressor/security/ir.model.access.csv
  12. BIN
      ir_attach_image_compressor/static/description/assets/icons/check.png
  13. BIN
      ir_attach_image_compressor/static/description/assets/icons/chevron.png
  14. BIN
      ir_attach_image_compressor/static/description/assets/icons/cogs.png
  15. BIN
      ir_attach_image_compressor/static/description/assets/icons/consultation.png
  16. BIN
      ir_attach_image_compressor/static/description/assets/icons/ecom-black.png
  17. BIN
      ir_attach_image_compressor/static/description/assets/icons/education-black.png
  18. BIN
      ir_attach_image_compressor/static/description/assets/icons/hotel-black.png
  19. BIN
      ir_attach_image_compressor/static/description/assets/icons/license.png
  20. BIN
      ir_attach_image_compressor/static/description/assets/icons/lifebuoy.png
  21. BIN
      ir_attach_image_compressor/static/description/assets/icons/manufacturing-black.png
  22. BIN
      ir_attach_image_compressor/static/description/assets/icons/pos-black.png
  23. BIN
      ir_attach_image_compressor/static/description/assets/icons/puzzle.png
  24. BIN
      ir_attach_image_compressor/static/description/assets/icons/restaurant-black.png
  25. BIN
      ir_attach_image_compressor/static/description/assets/icons/service-black.png
  26. BIN
      ir_attach_image_compressor/static/description/assets/icons/trading-black.png
  27. BIN
      ir_attach_image_compressor/static/description/assets/icons/training.png
  28. BIN
      ir_attach_image_compressor/static/description/assets/icons/update.png
  29. BIN
      ir_attach_image_compressor/static/description/assets/icons/user.png
  30. BIN
      ir_attach_image_compressor/static/description/assets/icons/wrench.png
  31. BIN
      ir_attach_image_compressor/static/description/assets/misc/categories.png
  32. BIN
      ir_attach_image_compressor/static/description/assets/misc/check-box.png
  33. BIN
      ir_attach_image_compressor/static/description/assets/misc/compass.png
  34. BIN
      ir_attach_image_compressor/static/description/assets/misc/corporate.png
  35. BIN
      ir_attach_image_compressor/static/description/assets/misc/customer-support.png
  36. BIN
      ir_attach_image_compressor/static/description/assets/misc/cybrosys-logo.png
  37. BIN
      ir_attach_image_compressor/static/description/assets/misc/features.png
  38. BIN
      ir_attach_image_compressor/static/description/assets/misc/logo.png
  39. BIN
      ir_attach_image_compressor/static/description/assets/misc/pictures.png
  40. BIN
      ir_attach_image_compressor/static/description/assets/misc/pie-chart.png
  41. BIN
      ir_attach_image_compressor/static/description/assets/misc/right-arrow.png
  42. BIN
      ir_attach_image_compressor/static/description/assets/misc/star.png
  43. BIN
      ir_attach_image_compressor/static/description/assets/misc/support.png
  44. BIN
      ir_attach_image_compressor/static/description/assets/misc/whatsapp.png
  45. BIN
      ir_attach_image_compressor/static/description/assets/modules/4.png
  46. BIN
      ir_attach_image_compressor/static/description/assets/modules/5.gif
  47. BIN
      ir_attach_image_compressor/static/description/assets/modules/barcode.png
  48. BIN
      ir_attach_image_compressor/static/description/assets/modules/fatoorah.png
  49. BIN
      ir_attach_image_compressor/static/description/assets/modules/integration_biometric.png
  50. BIN
      ir_attach_image_compressor/static/description/assets/modules/product_brand.png
  51. BIN
      ir_attach_image_compressor/static/description/assets/modules/website_cart.png
  52. BIN
      ir_attach_image_compressor/static/description/assets/screenshots/hero.gif
  53. BIN
      ir_attach_image_compressor/static/description/assets/screenshots/image-1.png
  54. BIN
      ir_attach_image_compressor/static/description/assets/screenshots/image-2.png
  55. BIN
      ir_attach_image_compressor/static/description/assets/screenshots/image-3.png
  56. BIN
      ir_attach_image_compressor/static/description/assets/screenshots/image-4.png
  57. BIN
      ir_attach_image_compressor/static/description/assets/screenshots/image-5.png
  58. BIN
      ir_attach_image_compressor/static/description/assets/screenshots/image-6.png
  59. BIN
      ir_attach_image_compressor/static/description/assets/screenshots/image-7.png
  60. BIN
      ir_attach_image_compressor/static/description/assets/screenshots/image-8.png
  61. BIN
      ir_attach_image_compressor/static/description/banner.jpg
  62. BIN
      ir_attach_image_compressor/static/description/icon.png
  63. 606
      ir_attach_image_compressor/static/description/index.html
  64. 36
      ir_attach_image_compressor/views/file_format_views.xml
  65. 61
      ir_attach_image_compressor/views/image_compression_rule_views.xml

46
ir_attach_image_compressor/README.rst

@ -0,0 +1,46 @@
.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
Image Attachment Converter
==========================
* A Module for compressing Image attachments to reduce storage usage.
License
-------
General Public License, Version 3 (LGPL v3).
(https://www.odoo.com/documentation/user/16.0/legal/licenses/licenses.html)
Installation
============
- www.odoo.com/documentation/16.0/setup/install.html
- Install our custom addon
Company
-------
* 'Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developer:
(v16) Naveen Krishna T @ Cybrosys
Contacts
--------
* Mail Contact : odoo@cybrosys.com
Bug Tracker
-----------
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com
Further information
===================
HTML Description: `<static/description/index.html>`__

22
ir_attach_image_compressor/__init__.py

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

47
ir_attach_image_compressor/__manifest__.py

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'Image Attachment Converter',
'version': '16.0.1.0.0',
'summary': 'A Module for image attachments format changes and compression',
'description': 'A Module for compressing Image attachments to reduce storage usage.',
'category': 'Extra Tools',
'author': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': [
'base'
],
'data': [
'data/cron.xml',
'data/data.xml',
'security/ir.model.access.csv',
'views/image_compression_rule_views.xml',
'views/file_format_views.xml',
],
'images': ['static/description/banner.png'],
'license': 'LGPL-3',
'installable': True,
'application': False,
'auto_install': False,
}

16
ir_attach_image_compressor/data/cron.xml

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data noupdate="1">
<!-- Schedule action for compression method trigger -->
<record id="ir_cron_auto_compress" model="ir.cron">
<field name="name">Image: Attachment auto Compression</field>
<field name="model_id" ref="model_ir_image_compressor_rule"/>
<field name="state">code</field>
<field name="code">model._schedule_auto_compress()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="active">True</field>
</record>
</data>
</odoo>

103
ir_attach_image_compressor/data/data.xml

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id='ir_image_compression_file_format_avif' model='source.file.format'>
<field name='name'>avif</field>
<field name='mime_type'>image/avif</field>
</record>
<record id='ir_image_compression_file_format_bmp' model='source.file.format'>
<field name='name'>bmp</field>
<field name='mime_type'>image/bmp</field>
</record>
<record id='ir_image_compression_file_format_ms_bmp' model='source.file.format'>
<field name='name'>bmp</field>
<field name='mime_type'>image/x-ms-bmp</field>
</record>
<record id='ir_image_compression_file_format_gif' model='source.file.format'>
<field name='name'>gif</field>
<field name='mime_type'>image/gif</field>
</record>
<record id='ir_image_compression_file_format_ief' model='source.file.format'>
<field name='name'>ief</field>
<field name='mime_type'>image/ief</field>
</record>
<record id='ir_image_compression_file_format_jpg' model='source.file.format'>
<field name='name'>jpg</field>
<field name='mime_type'>image/jpg</field>
</record>
<record id='ir_image_compression_file_format_jpe' model='source.file.format'>
<field name='name'>jpe</field>
<field name='mime_type'>image/jpe</field>
</record>
<record id='ir_image_compression_file_format_jpeg' model='source.file.format'>
<field name='name'>jpeg</field>
<field name='mime_type'>image/jpeg</field>
</record>
<record id='ir_image_compression_file_format_heic' model='source.file.format'>
<field name='name'>heic</field>
<field name='mime_type'>image/heic</field>
</record>
<record id='ir_image_compression_file_format_heif' model='source.file.format'>
<field name='name'>heif</field>
<field name='mime_type'>image/heif</field>
</record>
<record id='ir_image_compression_file_format_png' model='source.file.format'>
<field name='name'>png</field>
<field name='mime_type'>image/png</field>
</record>
<record id='ir_image_compression_file_format_svg' model='source.file.format'>
<field name='name'>svg</field>
<field name='mime_type'>image/svg+xml</field>
</record>
<record id='ir_image_compression_file_format_tiff' model='source.file.format'>
<field name='name'>tiff</field>
<field name='mime_type'>image/tiff</field>
</record>
<record id='ir_image_compression_file_format_tif' model='source.file.format'>
<field name='name'>tif</field>
<field name='mime_type'>image/tif</field>
</record>
<record id='ir_image_compression_file_format_ico' model='source.file.format'>
<field name='name'>ico</field>
<field name='mime_type'>image/vnd.microsoft.icon</field>
</record>
<record id='ir_image_compression_file_format_ico_x' model='source.file.format'>
<field name='name'>ico</field>
<field name='mime_type'>image/x-icon</field>
</record>
<record id='ir_image_compression_file_format_ras' model='source.file.format'>
<field name='name'>ras</field>
<field name='mime_type'>image/x-cmu-raster</field>
</record>
<record id='ir_image_compression_file_format_pnm' model='source.file.format'>
<field name='name'>pnm</field>
<field name='mime_type'>image/x-portable-anymap</field>
</record>
<record id='ir_image_compression_file_format_pbm' model='source.file.format'>
<field name='name'>pbm</field>
<field name='mime_type'>image/x-portable-bitmap</field>
</record>
<record id='ir_image_compression_file_format_pgm' model='source.file.format'>
<field name='name'>pgm</field>
<field name='mime_type'>image/x-portable-graymap</field>
</record>
<record id='ir_image_compression_file_format_ppm' model='source.file.format'>
<field name='name'>ppm</field>
<field name='mime_type'>image/x-portable-pixmap</field>
</record>
<record id='ir_image_compression_file_format_rgb' model='source.file.format'>
<field name='name'>rgb</field>
<field name='mime_type'>image/x-rgb</field>
</record>
<record id='ir_image_compression_file_format_xbm' model='source.file.format'>
<field name='name'>xbm</field>
<field name='mime_type'>image/x-xbitmap</field>
</record>
<record id='ir_image_compression_file_format_xpm' model='source.file.format'>
<field name='name'>xpm</field>
<field name='mime_type'>image/x-xpixmap</field>
</record>
<record id='ir_image_compression_file_format_xwd' model='source.file.format'>
<field name='name'>xwd</field>
<field name='mime_type'>image/x-xwindowdump</field>
</record>
</odoo>

6
ir_attach_image_compressor/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <ir_attach_image_compressor>
#### 29.04.2025
#### Version 16.0.1.0.0
#### ADD
- Initial commit for Image Attachment Converter

24
ir_attach_image_compressor/models/__init__.py

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

48
ir_attach_image_compressor/models/file_formats.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields
class FileFormatSource(models.Model):
"""
A class for storing Source file formats of the attachments which used for compression rules.
"""
_name = 'source.file.format'
_description = 'Source File Formats'
name = fields.Char(string="Format Extension", required=True)
mime_type = fields.Char(string="Mime Type", help="Mime types are used to "
"identify the file type. "
"The "
"format is something like "
"image/png", required=True,
copy=False)
_sql_constraints = [
('unique_mime_type', 'unique (mime_type)', 'Mime type already exists!')
]
def name_get(self):
result = []
for rec in self:
result.append((rec.id, rec.name + " (" + rec.mime_type + ")"))
return result

144
ir_attach_image_compressor/models/image_compression_rule.py

@ -0,0 +1,144 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
import base64
import os
from datetime import datetime, timedelta
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
from odoo.osv import expression
from odoo.tools import ImageProcess
mimetypes_global = ['image/avif',
'image/bmp',
'image/gif',
'image/ief',
'image/jpeg',
'image/jpeg',
'image/jpeg',
'image/heic',
'image/heif',
'image/png',
'image/svg+xml',
'image/tiff',
'image/tiff',
'image/vnd.microsoft.icon',
'image/x-cmu-raster',
'image/x-portable-anymap',
'image/x-portable-bitmap',
'image/x-portable-graymap',
'image/x-portable-pixmap',
'image/x-rgb',
'image/x-xbitmap',
'image/x-xpixmap',
'image/x-ms-bmp',
'image/x-xwindowdump']
class ImageCompressor(models.Model):
"""
A class for storing the Rules records used for attachments compression
"""
_name = "ir.image.compressor.rule"
_description = "ir_Image_Compressor_Rule"
name = fields.Char(string="Name", required=True)
af_model_ids = fields.Many2many("ir.model", string="Model(s)", required=True, help="Models where this rule applied")
source_format_ids = fields.Many2many("source.file.format",
string="Source Format", help="The file formats of attachments to which this rule is applied.")
quality = fields.Integer(string="Quality", help="""Quality level of the compressed image in percentage. If left empty, 95% will be used as default value.
- for JPEG: 1 is worse, 95 is best. Values above 95 should be
avoided. Falsy values will fallback to 95, but only if the image
was changed, otherwise the original image is returned.
- for PNG: set falsy to prevent conversion to a WEB palette.
- for other formats: no effect.""",)
destination_format = fields.Selection([('JPEG', '.jpeg'),
('PNG', '.png'),
('GIF', '.gif'),
('ICO', '.ico')],
string="Destination format",
default='JPEG', required=True, help="The format to which the source files are converted or compressed.")
active = fields.Boolean(string="Active", help="Whether the rule is active or inactive.")
minimum_size = fields.Integer(string="Minimum Size(KB)", help="The minimum size of the attachment file in KB for the rule to be applied.")
older_days = fields.Integer(string="Older than(days)", help="The age of the attachment in days for this rule to be applied.")
allow_recompress = fields.Boolean("Recompress", default=False, help="Whether to compress already compressed attachments or not.")
@api.constrains('account_type', 'reconcile')
def _check_reconcile(self):
for rule in self:
if rule.quality and not (1 <= rule.quality <= 95) and rule.destination_format == 'jpeg':
raise ValidationError(
_('The quality value should be between 1 and 95.'))
def _get_attachments_domain(self, model_names):
""" Method to generate dynamic domain based on the given rules """
all_mime_types = \
list(set(mimetypes_global).union(
set(self.env['source.file.format'].sudo().
search([]).mapped('mime_type'))))
if not self.source_format_ids:
domains = [('mimetype', 'in', all_mime_types)]
else:
domains = [
('mimetype', 'in', self.source_format_ids.mapped('mime_type'))]
if model_names:
domains = expression.AND(
[domains, [('res_model', 'in', model_names)]])
if self.minimum_size:
domains = expression.AND(
[domains, [('file_size', '>', self.minimum_size * 1024)]])
if self.older_days:
old_day = datetime.now() + timedelta(days=-self.older_days)
domains = expression.AND(
[domains, [('create_date', '<', old_day)]])
if not self.allow_recompress:
domains = expression.AND([domains, [('is_compressed', '=', False)]])
return domains
def _schedule_auto_compress(self):
""" The scheduled action method for compressing or converting the attachment files.
All converted files will replace the source files in the attachment to save storage space. """
i_c_rules = self.env['ir.image.compressor.rule']. \
search([('active', '=', True)])
for record in i_c_rules:
res_models = record.af_model_ids
model_names = res_models.mapped('model')
attach_ments = self.env['ir.attachment'].search(
record._get_attachments_domain(model_names))
for rec in attach_ments:
if rec.raw:
img = ImageProcess(rec.raw,
verify_resolution=False)
else:
img = ImageProcess(base64.b64decode(rec.datas),
verify_resolution=False)
quality = int(record.quality if record.quality else 95)
if record.destination_format:
image_data = img.image_quality(quality=quality, output_format=record.destination_format)
else:
image_data = img.image_quality(quality=quality)
if rec.raw:
rec.raw = image_data
else:
rec.datas = base64.b64encode(image_data)
if record.destination_format:
base = os.path.splitext(rec.name)[0]
rec.name = base + dict(record._fields['destination_format'].selection).get(record.destination_format)

29
ir_attach_image_compressor/models/ir_attachment.py

@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class IrAttachment(models.Model):
_inherit = 'ir.attachment'
is_compressed = fields.Boolean(stirng="Converted",
help="if this attachment is converted or compressed.", default=False)

6
ir_attach_image_compressor/security/ir.model.access.csv

@ -0,0 +1,6 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_compress_rule_user,access_compress_rule_base_user,model_ir_image_compressor_rule,,1,1,1,1
access_compress_format_user,access_compress_format_base_user,model_source_file_format,,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_compress_rule_user access_compress_rule_base_user model_ir_image_compressor_rule 1 1 1 1
3 access_compress_format_user access_compress_format_base_user model_source_file_format 1 1 1 1

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
ir_attach_image_compressor/static/description/assets/modules/barcode.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
ir_attach_image_compressor/static/description/assets/modules/fatoorah.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
ir_attach_image_compressor/static/description/assets/modules/integration_biometric.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
ir_attach_image_compressor/static/description/assets/modules/product_brand.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
ir_attach_image_compressor/static/description/assets/modules/website_cart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
ir_attach_image_compressor/static/description/assets/screenshots/image-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
ir_attach_image_compressor/static/description/assets/screenshots/image-2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
ir_attach_image_compressor/static/description/assets/screenshots/image-3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
ir_attach_image_compressor/static/description/assets/screenshots/image-4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
ir_attach_image_compressor/static/description/assets/screenshots/image-5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

BIN
ir_attach_image_compressor/static/description/assets/screenshots/image-6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
ir_attach_image_compressor/static/description/assets/screenshots/image-7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
ir_attach_image_compressor/static/description/assets/screenshots/image-8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
ir_attach_image_compressor/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

BIN
ir_attach_image_compressor/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

606
ir_attach_image_compressor/static/description/index.html

@ -0,0 +1,606 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex justify-content-between align-items-center"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42" style="width: 42px; height: 42px;"/>
<div>
<div
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<!-- APP HERO -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Image Attachment Converter</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">Module for compressing Image attachments to reduce storage usage.</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;"/>
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots for this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Overview
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
This module helps to reduce the size of your image attachments automatically on regular interval of times
based on the configured rules.
The compressed images can be stored as JPEG, PNG, GIF or ICO file.
User can enable and configure required compression rules based on the requirements.
Using Image Attachment Converter module user can re-generate and store images in
different formats with reduced size and configured quality.
</div>
<br/>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Features
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center" style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Compress images based on a set of rules</span>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Different Destination formats available for compression of images such as JPEG, PNG, GIF and ICO.
</span>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Flexible rules for compression:</span>
</div>
<b>
<ul>
<li>By model where images are uploaded</li>
<li>By mimetype; a regular expression that allows to filter what type of images to compress</li>
<li>By size; it allows to compress images having a bigger size than the configured size</li>
<li>Compress attachments older than specific days</li>
</ul>
</b>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Image Compression Rules Menu</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
Go to Setting --> Technical --> image compression rules to configure Rules</p>
<img src="assets/screenshots/image-1.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Crate New Compression Rule</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
Enter the model name. specify source file types,destination format, minimum size etc. based on your needs.
</p>
<img src="assets/screenshots/image-2.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Add New Source Formats</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
You can add new source file formats which can be used for attachment filtering.
Go to Setting --> Technical --> image formats to configure source formats with their mime types.
</p>
<img src="assets/screenshots/image-3.png" class="img-thumbnail">
<img src="assets/screenshots/image-4.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Scheduled action for Image compression</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">There is a preconfigured scheduled activity for running the compression methods based on rules periodically.
You can configure it for your needs.</p>
<img src="assets/screenshots/image-5.png" class="img-thumbnail">
<img src="assets/screenshots/image-6.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Before and After</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">After the successful run of the scheduled action, the attached file will be converted.</p>
<img src="assets/screenshots/image-7.png" class="img-thumbnail">
<img src="assets/screenshots/image-8.png" class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- SUGGESTED PRODUCTS -->
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center"
style="text-align: center; padding: 2.5rem 1rem !important;">
<h2 style="color: #212529 !important;">Suggested Products</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item active" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/hide_menu_user/#"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/barcode.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/myfatoorah_payment_gateway/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/fatoorah.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/hr_zk_attendance/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/integration_biometric.png">
</div>
</a>
</div>
</div>
<div class="carousel-item" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/odoo_dynamic_dashboard/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/4.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/login_user_detail/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/product_brand.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/voice_to_text/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/website_cart.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="left:-25px;width: 35px;color: #000;">
<span class="carousel-control-prev-icon"><i
class="fa fa-chevron-left"
style="font-size:24px"></i></span>
</a>
<a class="carousel-control-next" href="#demo1" data-slide="next"
style="right:-25px;width: 35px;color: #000;">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF SUGGESTED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center d-flex justify-content-center align-items-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48" style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help? Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52" style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

36
ir_attach_image_compressor/views/file_format_views.xml

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id='ir_image_compression_format_tree' model='ir.ui.view'>
<field name="name">ir.image.compression.format.tree</field>
<field name="model">source.file.format</field>
<field name="arch" type="xml">
<tree string="Formats">
<field name="name"/>
<field name="mime_type"/>
</tree>
</field>
</record>
<record id="ir_image_compression_format_form" model="ir.ui.view">
<field name="name">ir.image.compression.format.form</field>
<field name="model">source.file.format</field>
<field name="arch" type="xml">
<form string="Formats">
<sheet>
<field name="name" string="Format name"/>
<field name="mime_type" string="Mime Type"/>
</sheet>
</form>
</field>
</record>
<record id="action_auto_compress_format_view" model="ir.actions.act_window">
<field name="name">Image Formats</field>
<field name="res_model">source.file.format</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="attach_compress_format_menu" name="Image Source Formats"
parent="ir_attach_image_compressor.attach_compress_main_menu"
action="action_auto_compress_format_view"/>
</odoo>

61
ir_attach_image_compressor/views/image_compression_rule_views.xml

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id='ir_image_compression_rule_tree' model='ir.ui.view'>
<!-- Form view for the Compression rule records -->
<field name="name">ir.image.compression.rule.tree</field>
<field name="model">ir.image.compressor.rule</field>
<field name="arch" type="xml">
<tree string="Rules">
<field name="name" placeholder="Name"/>
<field name="af_model_ids" widget="many2many_tags"/>
<field name="active" widget="boolean_toggle"/>
</tree>
</field>
</record>
<record id="ir_image_compression_rule_form" model="ir.ui.view">
<!-- Form view for the Compression rule records -->
<field name="name">ir.image.compression.rule.form</field>
<field name="model">ir.image.compressor.rule</field>
<field name="arch" type="xml">
<form string="Rules">
<sheet>
<div class="oe_title">
<label class="oe_edit_only" for="name" string="Name"/>
<h1>
<field name="name" placeholder="Name"/>
</h1>
</div>
<group>
<field name="af_model_ids" widget="many2many_tags"/>
<field name="source_format_ids" widget="many2many_tags"/>
<field name="destination_format"/>
<field name="quality"/>
<field name="active" widget="boolean_toggle"/>
</group>
<group>
<field name="minimum_size"/>
<field name="older_days"/>
<field name="allow_recompress"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_auto_compress_view" model="ir.actions.act_window">
<field name="name">Rules</field>
<field name="res_model">ir.image.compressor.rule</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click create to define a new Rules.
</p>
</field>
</record>
<menuitem id="attach_compress_main_menu" name="Image Compression" parent="base.menu_custom" sequence="10"/>
<menuitem id="attach_compress_menu" name="Image Compression Rules"
parent="ir_attach_image_compressor.attach_compress_main_menu"
action="action_auto_compress_view"/>
</odoo>
Loading…
Cancel
Save