Browse Source

Nov 3 : [FIX] Bug Fixed 'custom_list_view'

pull/295/head
AjmalCybro 2 years ago
parent
commit
a19d3e3b1c
  1. 59
      custom_list_view/README.rst
  2. 3
      custom_list_view/__init__.py
  3. 38
      custom_list_view/__manifest__.py
  4. 22
      custom_list_view/controllers/__init__.py
  5. 68
      custom_list_view/controllers/custom_list_view.py
  6. 8
      custom_list_view/doc/RELEASE_NOTES.md
  7. 13
      custom_list_view/report/custom_list_view_reports.xml
  8. 31
      custom_list_view/report/custom_list_view_templates.xml
  9. BIN
      custom_list_view/static/description/assets/modules/1.png
  10. BIN
      custom_list_view/static/description/assets/modules/2.png
  11. BIN
      custom_list_view/static/description/assets/modules/3.png
  12. BIN
      custom_list_view/static/description/assets/modules/4.png
  13. BIN
      custom_list_view/static/description/assets/modules/5.gif
  14. BIN
      custom_list_view/static/description/assets/modules/6.png
  15. BIN
      custom_list_view/static/description/assets/modules/dynamic_product_fields.png
  16. BIN
      custom_list_view/static/description/assets/modules/dynamic_sale_order_fields.png
  17. BIN
      custom_list_view/static/description/assets/modules/picking_order_line_view.png
  18. BIN
      custom_list_view/static/description/assets/modules/sale_discount_total.png
  19. BIN
      custom_list_view/static/description/assets/modules/sale_order_line_views.png
  20. BIN
      custom_list_view/static/description/assets/modules/sale_purchase_previous_product_cost.png
  21. BIN
      custom_list_view/static/description/assets/screenshots/1.png
  22. BIN
      custom_list_view/static/description/assets/screenshots/2.png
  23. BIN
      custom_list_view/static/description/assets/screenshots/3.png
  24. BIN
      custom_list_view/static/description/assets/screenshots/4.png
  25. BIN
      custom_list_view/static/description/assets/screenshots/5.png
  26. BIN
      custom_list_view/static/description/assets/screenshots/6.png
  27. BIN
      custom_list_view/static/description/assets/screenshots/7.png
  28. BIN
      custom_list_view/static/description/assets/screenshots/duplicate_record.png
  29. BIN
      custom_list_view/static/description/assets/screenshots/hero.gif
  30. BIN
      custom_list_view/static/description/assets/screenshots/highlight_record.png
  31. BIN
      custom_list_view/static/description/assets/screenshots/row_number.png
  32. BIN
      custom_list_view/static/description/assets/screenshots/sticky_header.png
  33. 399
      custom_list_view/static/description/index.html
  34. 1
      custom_list_view/static/src/css/highlight.css
  35. 30
      custom_list_view/static/src/js/duplicate_record.js
  36. 176
      custom_list_view/static/src/js/list_controller.js
  37. 25
      custom_list_view/static/src/js/list_renderer.js
  38. 34
      custom_list_view/static/src/js/record_highlight.js
  39. 41
      custom_list_view/static/src/xml/list_controller.xml
  40. 65
      custom_list_view/static/src/xml/list_renderer.xml
  41. 18
      custom_list_view/static/src/xml/record_highlight.xml

59
custom_list_view/README.rst

@ -1,15 +1,52 @@
Custom List View V16
====================
.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
This module will helps to show row number, fixed header, duplicate record and highlight selected record in list view
Custom List View
==================
This module enhances list views by displaying row numbers, maintaining a fixed
header, identifying duplicate records, and highlighting selected records.
Additionally, it facilitates the printing of list views in PDF, CSV, and Excel
formats, allows for the copying of list values to the clipboard, and introduces
a pagination feature.
Configuration
=============
* No additional configurations needed
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
GNU LESSER GENERAL PUBLIC LICENSE, v3.0 (LGPL v3).
(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
Credits
=======
Cybrosys Techno Solutions
Author
------
* Cybrosys Techno Solutions <odoo@cybrosys.com>
Aiswarya J P @ Cybro V15
Rosmy John @ Cybro V16
-------
* Developers : (V16) Rosmy John, Muhsina V
(V15) Aiswarya J P
Contact : odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
Bug Tracker
-----------
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
.. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
This module is maintained by Cybrosys Technologies.
For support and more information, please visit `Our Website <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

3
custom_list_view/__init__.py

@ -3,7 +3,7 @@
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Copyright (C) 2023-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
@ -19,3 +19,4 @@
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import controllers

38
custom_list_view/__manifest__.py

@ -3,7 +3,7 @@
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Copyright (C) 2023-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
@ -19,30 +19,34 @@
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'Custom List View',
'version': '16.0.1.0.1',
'summary': 'Helps to Show Row Number, Fixed Header, Duplicate Record and Highlight Selected Record in List View',
'description': 'Helps to Show Row Number, Fixed Header, Duplicate Record and Highlight Selected Record in List View',
'category': 'Tools',
'version': '16.0.1.1.0',
'category': 'Extra Tools',
'summary': 'Helps to Show Row Number, Fixed Header, Duplicate Record, '
'Highlight Selected Record, Print and Copy Listview items',
'description': "This module Helps to Show Row Number, Fixed Header, "
"Duplicate Record and Highlight Selected Record in List "
"View. Using this module the list view items can be printed"
" in pdf, excel and csv format, Also there is copy to "
"clipboard and pagination features.",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'license': 'LGPL-3',
'images': ['static/description/banner.png'],
'depends': ['base'],
'website': 'https://www.cybrosys.com',
'depends': ['web', 'account'],
'data': [
'report/custom_list_view_templates.xml',
'report/custom_list_view_reports.xml'
],
'assets': {
'web.assets_backend': [
'custom_list_view/static/src/js/duplicate_record.js',
'custom_list_view/static/src/js/record_highlight.js',
'custom_list_view/static/src/css/sticky_header.css',
'custom_list_view/static/src/css/highlight.css',
'custom_list_view/static/src/xml/record_highlight.xml'
],
'custom_list_view/static/src/**/*',
]
},
'images': ['static/description/banner.png'],
'licence': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': False,
'application': False
}

22
custom_list_view/controllers/__init__.py

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

68
custom_list_view/controllers/custom_list_view.py

@ -0,0 +1,68 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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 http
from odoo.http import request
class ExportData(http.Controller):
""" Controller class for exporting data from Odoo models."""
@http.route('/get_data', auth="user", type='json')
def get_export_data(self, **kw):
"""Controller method to fetch required details and export data.
:param kw: Dictionary containing the following keys:
- fields: List of fields to export
- model: Name of the Odoo model
- res_ids: List of record IDs to export (optional)
- domain: Domain for record filtering (optional)
:return: Dictionary containing exported data and column headers"""
model = request.env[kw['model']]
field_names = [field['name'] for field in kw['fields']]
columns_headers = [val['label'].strip() for val in kw['fields']]
domain = [('id', 'in', kw['res_ids'])] \
if kw['res_ids'] else kw['domain']
records = model.browse(kw['res_ids']) \
if kw['res_ids'] \
else model.search(domain, offset=0, limit=False, order=False)
export_data = records.export_data(field_names).get('datas', [])
return {'data': export_data, 'header': columns_headers}
@http.route('/get_data/copy', auth="user", type='json')
def get_export_data_copy(self, **kw):
"""Controller method to fetch required details, export data, and add
column headers.
:param kw: Dictionary containing the following keys:
- fields: List of fields to export
- model: Name of the Odoo model
- res_ids: List of record IDs to export (optional)
- domain: Domain for record filtering (optional)
:return: List of lists containing exported data with column headers"""
model = request.env[kw['model']]
field_names = [field['name'] for field in kw['fields']]
columns_headers = [val['label'].strip() for val in kw['fields']]
domain = [('id', 'in', kw['res_ids'])] \
if kw['res_ids'] else kw['domain']
records = model.browse(kw['res_ids']) \
if kw['res_ids'] \
else model.search(domain, offset=0, limit=False, order=False)
export_data = records.export_data(field_names).get('datas', [])
export_data.insert(0, columns_headers)
return export_data

8
custom_list_view/doc/RELEASE_NOTES.md

@ -2,4 +2,10 @@
#### 14.02.2023
#### Version 16.0.1.0.0
#### ADD Initial Commit for custom_list_view
##### ADD
- Initial Commit for custom_list_view
#### 26.10.2023
#### Version 16.0.1.1.0
##### UPDT
- Added options for PDF, Excel, and CSV list view printing and implemented pagination.

13
custom_list_view/report/custom_list_view_reports.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Define the action for exporting PDF -->
<record id="action_pdf_list_view" model="ir.actions.report">
<field name="name">Export</field>
<field name="model">ir.exports</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">custom_list_view.print_pdf_listview</field>
<field name="report_file">custom_list_view.print_pdf_listview</field>
<field name="print_report_name">Pdf Report - ${object.name}</field>
<field name="binding_type">report</field>
</record>
</odoo>

31
custom_list_view/report/custom_list_view_templates.xml

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Template for printing a PDF list view. -->
<template id="print_pdf_listview">
<t t-call="web.html_container">
<t t-call="web.internal_layout">
<div class="page">
<table class="table table-bordered"
style="table-layout: fixed">
<!-- Render table headers -->
<t t-foreach="length" t-as="length">
<th style="background-color: #F2F2F2; padding: 10px; color: ">
<span t-out="record['header'][length]"/>
</th>
</t>
<!-- Render table data rows -->
<t t-foreach="record['data']" t-as="rec">
<tr>
<t t-foreach="length+1" t-as="ln">
<td style="background-color: #F2F2F2; padding: 10px;">
<span t-out="rec[ln]"/>
</td>
</t>
</tr>
</t>
</table>
</div>
</t>
</t>
</template>
</odoo>

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 84 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 85 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 17 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 92 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 81 KiB

BIN
custom_list_view/static/description/assets/modules/dynamic_product_fields.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
custom_list_view/static/description/assets/modules/dynamic_sale_order_fields.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
custom_list_view/static/description/assets/modules/picking_order_line_view.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
custom_list_view/static/description/assets/modules/sale_discount_total.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
custom_list_view/static/description/assets/modules/sale_order_line_views.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
custom_list_view/static/description/assets/modules/sale_purchase_previous_product_cost.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

BIN
custom_list_view/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

BIN
custom_list_view/static/description/assets/screenshots/duplicate_record.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 599 KiB

BIN
custom_list_view/static/description/assets/screenshots/highlight_record.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

BIN
custom_list_view/static/description/assets/screenshots/row_number.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

BIN
custom_list_view/static/description/assets/screenshots/sticky_header.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

399
custom_list_view/static/description/index.html

@ -2,7 +2,8 @@
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
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;" />
<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;"
@ -14,11 +15,6 @@
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div
style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
@ -27,25 +23,32 @@
<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;">
Custom List View</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">Helps to Show Row Number, Fixed Header, Duplicate Record and Highlight Selected Record in List View.</p>
Custom List View
</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Show Row Number, Fixed Header, Duplicate Record and
Highlight Selected Record in List View.
Export List to Pdf, Excel and CSV. Copy to Clipboard and
Pagination
</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 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
<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;">
@ -95,98 +98,187 @@
<!-- 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 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 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="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 will ensure sticky headers, row numbers, duplicate records and record highlight for list
view and enhance the user experience. </div>
This module ensures sticky headers, row numbers, duplicate record
, and record highlighting for list views. It also enables the export
of lists in PDF, Excel, and CSV formats, along with providing
copy-to-clipboard and pagination options.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex 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 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="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">
<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;">Sticky Header in List Views.</span>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Sticky Header in List Views.
</span>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<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;">Row Numbers in List Views.</span>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Row Numbers in List Views.
</span>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<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;">Able to Duplicate Records from List Views.</span>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Able to Duplicate Records from List Views.
</span>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<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;">Able to Highlight Selected Records in list view.</span>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Able to Highlight Selected Records in list view.
</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;">Export list to PDF, CSV & Excel.
</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;">Copy List values to clipboard.</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;">Datatable pagination.</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="screenshots">
<div class="d-flex 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 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;">Sticky Header in List Views
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Sticky Header in List Views.
</h3>
<img src="assets/screenshots/sticky_header.png" class="img-thumbnail">
<img src="assets/screenshots/1.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Row Numbers in List Views
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Row Numbers in List Views.
</h3>
<img src="assets/screenshots/row_number.png" class="img-thumbnail">
<img src="assets/screenshots/2.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Duplicate Records From List Views
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Duplicate Records From List Views.
</h3>
<img src="assets/screenshots/duplicate_record.png" class="img-thumbnail">
<img src="assets/screenshots/3.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Highlight Records From List Views.
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Highlight Records From List Views.
</h3>
<img src="assets/screenshots/highlight_record.png" class="img-thumbnail">
<img src="assets/screenshots/4.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Export ,Copy to Clipboard And Pagination.
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
We can easily export the list to PDF, Excel, and CSV formats by
clicking the respective buttons.
Clicking the copy-to-clipboard icon allows us to copy the list
values, which can then be pasted anywhere we choose.
Pagination is displayed at the bottom of the list view.</p>
<img src="assets/screenshots/5.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Copy to Clipboard
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Upon copying the values to the clipboard, an alert will be
displayed indicating that the records have been successfully
copied.</p>
<img src="assets/screenshots/6.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Pagination.
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
When filtering the records, pagination is displayed at the
bottom.</p>
<img src="assets/screenshots/7.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Related
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related
Products
</h2>
</div>
@ -196,57 +288,88 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/dynamic_accounts_report/" target="_blank">
<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/dynamic_accounts_report/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/1.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/1.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/15.0/custom_gantt_view/" target="_blank">
<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/access_restriction_by_ip/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/2.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/2.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/15.0/project_custom_gantt/" target="_blank">
<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/dynamic_product_fields/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/3.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/account_reports_xlsx/" target="_blank">
<div class="carousel-item active"
style="min-height: 198.656px;">
<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/customer_product_qrcode/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/4.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
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/15.0/base_accounting_kit/" target="_blank">
<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/base_accounting_kit/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/5.gif">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/5.gif">
</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/15.0/hr_payroll_community/" target="_blank">
<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_payroll_community/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/6.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/6.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span>
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i
class="fa fa-chevron-left"
style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1"
data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
@ -254,134 +377,143 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex 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 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">
<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;">
<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">
<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;">
<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">
<img src="assets/icons/lifebuoy.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
<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;">
<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">
<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;">
<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">
<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;">
<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">
<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;">
<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">
<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;">
<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">
<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;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!-- END OF END OF OUR SERVICES -->
<!-- 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 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
<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">
<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>
@ -391,11 +523,11 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
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">
<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>
@ -405,11 +537,11 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
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">
<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>
@ -418,11 +550,11 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
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">
<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>
@ -431,11 +563,11 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
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">
<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>
@ -445,11 +577,11 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
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">
<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>
@ -458,11 +590,11 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
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">
<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>
@ -471,11 +603,11 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
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">
<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>
@ -487,16 +619,18 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
</div>
</div>
</div>
<!-- END OF END OF OUR INDUSTRIES -->
<!-- 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 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 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
@ -505,11 +639,13 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
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;" />
<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>
<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>
@ -521,13 +657,15 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
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;" />
<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
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068
27707</p>
</a>
</div>
@ -536,7 +674,8 @@ This module will ensure sticky headers, row numbers, duplicate records and recor
</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;" />
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>

1
custom_list_view/static/src/css/highlight.css

@ -1,4 +1,3 @@
.o_list_renderer tr.o_data_row.selected_record td{
background-color: #7c7aad;
color:#ffffff

30
custom_list_view/static/src/js/duplicate_record.js

@ -1,30 +0,0 @@
/** @odoo-module */
import { patch } from "@web/core/utils/patch";
import { ListController } from '@web/views/list/list_controller';
const { Component, onWillStart, useSubEnv, useEffect, useRef } = owl;
patch(ListController.prototype, "getActionMenuItems", {
async _onDuplicateSelectedRecords() {
for (var record in this.model.root.records) {
if (this.model.root.records[record].selected) {
await this.model.root.records[record].duplicate();
}
}
window.location.reload();
},
getActionMenuItems() {
const actionMenuItems = this._super.apply(this, arguments);
var self = this;
if (actionMenuItems) {
actionMenuItems.other.splice(1, 0, {
description: this.env._t("Duplicate"),
callback: (x) => {
this._onDuplicateSelectedRecords();
}
});
}
return actionMenuItems;
}
});

176
custom_list_view/static/src/js/list_controller.js

@ -0,0 +1,176 @@
/** @odoo-module */
import { patch } from "@web/core/utils/patch";
import { ListController } from '@web/views/list/list_controller';
import { download } from "@web/core/network/download";
var ajax = require('web.ajax');
var Dialog = require('web.Dialog');
patch(ListController.prototype, "CustomListView", {
/**
* Duplicate selected records and reload the page.
*/
async _onDuplicateSelectedRecords() {
for (var record in this.model.root.records) {
if (this.model.root.records[record].selected) {
await this.model.root.records[record].duplicate();
}
}
window.location.reload();
},
/**
* Get the action menu items and add a "Duplicate" option.
*
* @returns {Object} Action menu items.
*/
getActionMenuItems() {
const actionMenuItems = this._super.apply(this, arguments);
var self = this;
if (actionMenuItems) {
actionMenuItems.other.splice(1, 0, {
description: this.env._t("Duplicate"),
callback: (x) => {
this._onDuplicateSelectedRecords();
}
});
}
return actionMenuItems;
},
/**
* Handle the click event for exporting data to a PDF.
*/
_onClickPDF: async function() {
var self = this;
// Retrieve the fields to export
const fields = this.props.archInfo.columns
.filter((col) => col.optional === false || col.optional === "show")
.map((col) => this.props.fields[col.name])
const exportFields = fields.map((field) => ({
name: field.name,
label: field.label || field.string,
}));
const resIds = await this.getSelectedResIds();
var length_field = Array.from(Array(exportFields.length).keys());
// Make a JSON-RPC request to retrieve the data for the report
ajax.jsonRpc('/get_data', 'call', {
'model': this.model.root.resModel,
'res_ids': resIds.length > 0 && resIds,
'fields': exportFields,
'grouped_by': this.model.root.groupBy,
'context': this.props.context,
'domain': this.model.root.domain,
'context': this.props.context,
}).then(function(data) {
var model = self.model.root.resModel
// Generate and download the PDF report
return self.model.action.doAction({
type: "ir.actions.report",
report_type: "qweb-pdf",
report_name: 'custom_list_view.print_pdf_listview',
report_file: "custom_list_view.print_pdf_listview",
data: {
'length': length_field,
'record': data
}
});
});
},
/**
* Handle the click event for exporting data to Excel.
*/
_onClickExcel: async function() {
// Retrieve the fields to export
const fields = this.props.archInfo.columns
.filter((col) => col.optional === false || col.optional === "show")
.map((col) => this.props.fields[col.name])
.filter((field) => field.exportable !== false);
const exportFields = fields.map((field) => ({
name: field.name,
label: field.label || field.string,
store: field.store,
type: field.field_type || field.type,
}));
const resIds = await this.getSelectedResIds();
const import_compat = false
// Make a request to download the Excel file
await download({
data: {
data: JSON.stringify({
import_compat,
context: this.props.context,
domain: this.model.root.domain,
fields: exportFields,
groupby: this.model.root.groupBy,
ids: resIds.length > 0 && resIds,
model: this.model.root.resModel,
}),
},
url: `/web/export/xlsx`,
});
},
/**
* Handle the click event for exporting data to CSV.
*/
_onClickCSV: async function() {
const fields = this.props.archInfo.columns
.filter((col) => col.optional === false || col.optional === "show")
.map((col) => this.props.fields[col.name])
.filter((field) => field.exportable !== false);
const exportFields = fields.map((field) => ({
name: field.name,
label: field.label || field.string,
store: field.store,
type: field.field_type || field.type,
}));
const resIds = await this.getSelectedResIds();
const import_compat = false
// Make a request to download the CSV file
await download({
data: {
data: JSON.stringify({
import_compat,
context: this.props.context,
domain: this.model.root.domain,
fields: exportFields,
groupby: this.model.root.groupBy,
ids: resIds.length > 0 && resIds,
model: this.model.root.resModel,
}),
},
url: `/web/export/csv`,
});
},
/**
* Handle the click event for copying data to the clipboard.
*/
_onClickCopy: async function() {
var self = this;
// Retrieve the fields to export
const fields = this.props.archInfo.columns
.filter((col) => col.type === "field")
.map((col) => this.props.fields[col.name])
const exportFields = fields.map((field) => ({
name: field.name,
label: field.label || field.string,
}));
const resIds = await this.getSelectedResIds();
var length_field = Array.from(Array(exportFields.length).keys());
// Make a JSON-RPC request to retrieve the data to copy
ajax.jsonRpc('/get_data/copy', 'call', {
'model': this.model.root.resModel,
'res_ids': resIds.length > 0 && resIds,
'fields': exportFields,
'grouped_by': this.model.root.groupBy,
'context': this.props.context,
'domain': this.model.root.domain,
'context': this.props.context,
}).then(function(data) {
// Format the data as text and copy it to the clipboard
var recText = data.map(function(record) {
return record.join("\t"); // Join the elements of each array with tabs ("\t")
}).join("\n");
// Copy the recText to the clipboard
navigator.clipboard.writeText(recText);
Dialog.alert(self, "Records Copied to Clipboard ", {});
});
},
});

25
custom_list_view/static/src/js/list_renderer.js

@ -0,0 +1,25 @@
/** @odoo-module **/
import { session } from "@web/session";
import { ListRenderer } from "@web/views/list/list_renderer";
import { patch } from "@web/core/utils/patch";
import { browser } from "@web/core/browser/browser";
import { useService } from "@web/core/utils/hooks";
const {onMounted} = owl;
/**
* Patched function to toggle record selection and add a CSS class to selected records.
*
* @param {Object} record - The record to toggle selection for.
*/
patch(ListRenderer.prototype, 'custom_list_view/static/src/js/list_renderer.js', {
toggleRecordSelection(record) {
var self = this;
this._super.apply(this, arguments);
var selectedRecord = $(event.target).closest('tr')
if ($(event.target).prop('checked')) {
selectedRecord.addClass('selected_record');
} else {
selectedRecord.removeClass('selected_record')
}
}
});

34
custom_list_view/static/src/js/record_highlight.js

@ -1,34 +0,0 @@
/** @odoo-module **/
import { session } from "@web/session";
import { ListRenderer } from "@web/views/list/list_renderer";
import { patch } from "@web/core/utils/patch";
import { browser } from "@web/core/browser/browser";
import { useService } from "@web/core/utils/hooks";
const {onMounted} = owl;
patch(ListRenderer.prototype, 'custom_list_view/static/src/js/record_highlight.js', {
setup(){
this._super(...arguments)
onMounted(() => {
var tdElement = document.createElement('td');
var thElement = document.createElement('th');
thElement.innerText = "Sl No"
thElement.style.width = "60px"
var firstRow = $(this.__owl__.bdom.parentEl.querySelectorAll('.o_list_table')).find('thead tr').first();
var secondRow = $(this.__owl__.bdom.parentEl.querySelectorAll('.o_list_footer')).find('tr').first();
firstRow.prepend(thElement);
secondRow.prepend(tdElement);
});
},
toggleRecordSelection(record) {
var self = this;
this._super.apply(this, arguments);
var selectedRecord = $(event.target).closest('tr')
if($(event.target).prop('checked')){
selectedRecord.addClass('selected_record');
} else {
selectedRecord.removeClass('selected_record')
}
}
})

41
custom_list_view/static/src/xml/list_controller.xml

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
<!-- Extension template for adding buttons in the listview -->
<t t-inherit="web.ListView.Buttons" t-inherit-mode="extension">
<!-- Add buttons after the 'Export Excel' button -->
<xpath expr="//*[@class='btn btn-secondary fa fa-download o_list_export_xlsx']"
position="after">
<!-- Print PDF button -->
<button type="button" class="btn btn-secondary "
t-on-click="_onClickPDF" data-tooltip="Print PDF" >PDF</button>
<!-- Print Excel button -->
<button type="button" class="btn btn-secondary"
t-on-click="_onClickExcel" data-tooltip="Print Excel" >Excel</button>
<!-- Print CSV button -->
<button type="button" class="btn btn-secondary"
t-on-click="_onClickCSV" data-tooltip="Print CSV" >CSV</button>
<!-- Copy to Clipboard button -->
<button type="button" class="btn btn-secondary fa fa-clipboard"
t-on-click="_onClickCopy" data-tooltip="Copy to Clipboard"/>
</xpath>
</t>
<!-- Extension template for adding buttons in the invoice listview -->
<t t-inherit="account.ListView.Buttons" t-inherit-mode="extension">
<!-- Add buttons after the 'Export Excel' button -->
<xpath expr="//*[@class='btn btn-secondary fa fa-download o_list_export_xlsx']"
position="after">
<!-- Print PDF button -->
<button type="button" class="btn btn-secondary"
t-on-click="_onClickPDF" data-tooltip="Print PDF">PDF</button>
<!-- Print Excel button -->
<button type="button" class="btn btn-secondary"
t-on-click="_onClickExcel" data-tooltip="Print Excel">Excel</button>
<!-- Print CSV button -->
<button type="button" class="btn btn-secondary"
t-on-click="_onClickCSV" data-tooltip="Print CSV">CSV</button>
<!-- Copy to Clipboard button -->
<button type="button" class="btn btn-secondary fa fa-clipboard"
t-on-click="_onClickCopy" data-tooltip="Copy to Clipboard"/>
</xpath>
</t>
</templates>

65
custom_list_view/static/src/xml/list_renderer.xml

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- XML template for rendering lists with pagination information -->
<templates xml:space="preserve">
<t t-inherit="web.ListRenderer" t-inherit-mode="extension">
<xpath expr="//*[@class='o_list_renderer o_renderer table-responsive']"
position="after">
<!-- Pagination in lists -->
<div class="o_list_pagination" style=" text-align: end;">
Showing from
<t t-if="this.props.list.groups">
<t t-esc="this.env.config.pagerProps.offset+1"/> -
<t t-esc="this.env.config.pagerProps.offset + this.props.list.groups.length"/></t>
<t t-else="">
<t t-esc="this.env.config.pagerProps.offset+1"/> -
<t t-esc="this.env.config.pagerProps.offset+this.props.list.records.length"/></t>
of
<t t-esc="this.props.list.count"/>
Records
</div>
</xpath>
<xpath expr="//th[@t-if='hasSelectors']" position="before">
<th style="width: 60px">Sl No</th>
<t t-set="RowNumber" t-value="1" />
</xpath>
</t>
<t t-inherit="account.ListRenderer" t-inherit-mode="extension">
<xpath expr="//*[@class='o_list_renderer o_renderer table-responsive']"
position="after">
<!-- Pagination in invoice list -->
<div class="o_list_pagination" style=" text-align: end;">
Showing from
<t t-if="this.props.list.groups">
<t t-esc="this.env.config.pagerProps.offset+1"/> -
<t t-esc="this.env.config.pagerProps.offset + this.props.list.groups.length"/></t>
<t t-else="">
<t t-esc="this.env.config.pagerProps.offset+1"/> -
<t t-esc="this.env.config.pagerProps.offset+this.props.list.records.length"/></t>
of
<t t-esc="this.props.list.count"/>
Records
</div>
</xpath>
</t>
<t t-inherit="web.ListRenderer.Rows" t-inherit-mode="extension" owl="1">
<xpath expr="//t[@t-foreach='list.records']" position="before">
<t t-set="RowNumber" t-value="1" />
</xpath>
<xpath expr="//t[@t-call='{{ constructor.recordRowTemplate }}']" position="after">
<t t-set="RowNumber" t-value="RowNumber+1" />
</xpath>
</t>
<t t-inherit="web.ListRenderer.RecordRow" t-inherit-mode="extension" owl="1">
<xpath expr="//td[@class='o_list_record_selector']" position="before">
<td tabindex="-1">
<span t-esc="RowNumber" />
</td>
</xpath>
</t>
</templates>

18
custom_list_view/static/src/xml/record_highlight.xml

@ -1,18 +0,0 @@
<templates id="template" xml:space="preserve">
<t t-name="custom_list_view.add_number" t-inherit="web.ListRenderer.Rows" t-inherit-mode="extension" owl="1">
<xpath expr="//t[@t-foreach='list.records']" position="before">
<t t-set="RowNumber" t-value="1" />
</xpath>
<xpath expr="//t[@t-call='{{ constructor.recordRowTemplate }}']" position="after">
<t t-set="RowNumber" t-value="RowNumber+1" />
</xpath>
</t>
<t t-name="rowno_in_tree.ListRenderer.RecordRowNumber" t-inherit="web.ListRenderer.RecordRow" t-inherit-mode="extension" owl="1">
<xpath expr="//td[@class='o_list_record_selector']" position="before">
<td tabindex="-1">
<span t-esc="RowNumber" />
</td>
</xpath>
</t>
</templates>
Loading…
Cancel
Save