diff --git a/web_listview_group_selector/__manifest__.py b/web_listview_group_selector/__manifest__.py
new file mode 100644
index 000000000..d47224e2f
--- /dev/null
+++ b/web_listview_group_selector/__manifest__.py
@@ -0,0 +1,18 @@
+{
+ 'name': 'Listview Group Selector',
+ 'summary': 'Add Selector to Group row in Listview',
+ 'author': 'Hoang Minh Hieu',
+ 'version': '17.0.1.0.0',
+ 'license': 'LGPL-3',
+ 'support ': 'hieuhoangminh1996@gmail.com',
+ 'depends': ['web'],
+ 'data': [
+ ],
+ 'assets': {
+ 'web.assets_backend': [
+ 'web_listview_group_selector/static/src/list_renderer.xml',
+ 'web_listview_group_selector/static/src/list_renderer.js',
+ ],
+ },
+ 'images': ['static/description/main_screenshot.png'],
+}
diff --git a/web_listview_group_selector/static/description/icon.png b/web_listview_group_selector/static/description/icon.png
new file mode 100644
index 000000000..15e5ed47f
Binary files /dev/null and b/web_listview_group_selector/static/description/icon.png differ
diff --git a/web_listview_group_selector/static/description/index.html b/web_listview_group_selector/static/description/index.html
new file mode 100644
index 000000000..65c1d62d8
--- /dev/null
+++ b/web_listview_group_selector/static/description/index.html
@@ -0,0 +1,37 @@
+
+
+
+
+ Listview Group Selector
+
+
+
+
+
+ Add Selector to Group row in Listview
+
+
+
+
+
+
diff --git a/web_listview_group_selector/static/description/main_screenshot.png b/web_listview_group_selector/static/description/main_screenshot.png
new file mode 100644
index 000000000..ff9ce3f2a
Binary files /dev/null and b/web_listview_group_selector/static/description/main_screenshot.png differ
diff --git a/web_listview_group_selector/static/description/preview.png b/web_listview_group_selector/static/description/preview.png
new file mode 100644
index 000000000..1d4874d90
Binary files /dev/null and b/web_listview_group_selector/static/description/preview.png differ
diff --git a/web_listview_group_selector/static/description/preview2.png b/web_listview_group_selector/static/description/preview2.png
new file mode 100644
index 000000000..ba4eaf13d
Binary files /dev/null and b/web_listview_group_selector/static/description/preview2.png differ
diff --git a/web_listview_group_selector/static/src/list_renderer.js b/web_listview_group_selector/static/src/list_renderer.js
new file mode 100644
index 000000000..8ee772110
--- /dev/null
+++ b/web_listview_group_selector/static/src/list_renderer.js
@@ -0,0 +1,27 @@
+/** @odoo-module */
+
+import {ListRenderer} from '@web/views/list/list_renderer';
+import {patch} from '@web/core/utils/patch';
+
+patch(ListRenderer.prototype, {
+
+ getGroupNameCellColSpan(group) {
+ let colspan = super.getGroupNameCellColSpan(group);
+ if (this.hasSelectors) {
+ colspan--;
+ }
+ return colspan
+ },
+
+ toggleGroupSelection(group) {
+ if (!this.canSelectRecord) {
+ return;
+ }
+ group.list.toggleSelection();
+ },
+
+ isGroupSelected(group) {
+ return !group.isFolded && group.list.selection.length === group.list.records.length;
+ }
+
+})
diff --git a/web_listview_group_selector/static/src/list_renderer.xml b/web_listview_group_selector/static/src/list_renderer.xml
new file mode 100644
index 000000000..5a718d4bb
--- /dev/null
+++ b/web_listview_group_selector/static/src/list_renderer.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
diff --git a/yuthon_hr_attendance/models/__pycache__/__init__.cpython-311.pyc b/yuthon_hr_attendance/models/__pycache__/__init__.cpython-311.pyc
index 1ab9ce500..3c226c7b9 100644
Binary files a/yuthon_hr_attendance/models/__pycache__/__init__.cpython-311.pyc and b/yuthon_hr_attendance/models/__pycache__/__init__.cpython-311.pyc differ
diff --git a/yuthon_hr_payroll/__pycache__/__init__.cpython-311.pyc b/yuthon_hr_payroll/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index f1c92a021..000000000
Binary files a/yuthon_hr_payroll/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_hr_payroll/models/__pycache__/__init__.cpython-311.pyc b/yuthon_hr_payroll/models/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index ea20183e3..000000000
Binary files a/yuthon_hr_payroll/models/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_hr_payroll/models/__pycache__/hr_payslip_year.cpython-311.pyc b/yuthon_hr_payroll/models/__pycache__/hr_payslip_year.cpython-311.pyc
deleted file mode 100644
index c9998b8b5..000000000
Binary files a/yuthon_hr_payroll/models/__pycache__/hr_payslip_year.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_hr_payroll/models/__pycache__/hr_payslip_year_intern.cpython-311.pyc b/yuthon_hr_payroll/models/__pycache__/hr_payslip_year_intern.cpython-311.pyc
deleted file mode 100644
index 9005c5db2..000000000
Binary files a/yuthon_hr_payroll/models/__pycache__/hr_payslip_year_intern.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_hr_payroll/models/__pycache__/hr_payslip_year_labor_dispatch.cpython-311.pyc b/yuthon_hr_payroll/models/__pycache__/hr_payslip_year_labor_dispatch.cpython-311.pyc
deleted file mode 100644
index ebcbc17f3..000000000
Binary files a/yuthon_hr_payroll/models/__pycache__/hr_payslip_year_labor_dispatch.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_login/__pycache__/__init__.cpython-311.pyc b/yuthon_login/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 915a457a7..000000000
Binary files a/yuthon_login/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_login/controllers/__pycache__/__init__.cpython-311.pyc b/yuthon_login/controllers/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 8cd93076f..000000000
Binary files a/yuthon_login/controllers/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_login/controllers/__pycache__/controllers.cpython-311.pyc b/yuthon_login/controllers/__pycache__/controllers.cpython-311.pyc
deleted file mode 100644
index 733d72972..000000000
Binary files a/yuthon_login/controllers/__pycache__/controllers.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_login/models/__pycache__/__init__.cpython-311.pyc b/yuthon_login/models/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 9301211f0..000000000
Binary files a/yuthon_login/models/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_login/models/__pycache__/res_config_settings.cpython-311.pyc b/yuthon_login/models/__pycache__/res_config_settings.cpython-311.pyc
deleted file mode 100644
index bde528db7..000000000
Binary files a/yuthon_login/models/__pycache__/res_config_settings.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_menuitem/__pycache__/__init__.cpython-311.pyc b/yuthon_menuitem/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 5b4709894..000000000
Binary files a/yuthon_menuitem/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_menuitem/models/__pycache__/__init__.cpython-311.pyc b/yuthon_menuitem/models/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 39b660cae..000000000
Binary files a/yuthon_menuitem/models/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_menuitem/models/__pycache__/base.cpython-311.pyc b/yuthon_menuitem/models/__pycache__/base.cpython-311.pyc
deleted file mode 100644
index bd0fdeb12..000000000
Binary files a/yuthon_menuitem/models/__pycache__/base.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_performance/__pycache__/__init__.cpython-311.pyc b/yuthon_performance/__pycache__/__init__.cpython-311.pyc
index 50b1b4f72..c5d561cc1 100644
Binary files a/yuthon_performance/__pycache__/__init__.cpython-311.pyc and b/yuthon_performance/__pycache__/__init__.cpython-311.pyc differ
diff --git a/yuthon_performance/models/__pycache__/__init__.cpython-311.pyc b/yuthon_performance/models/__pycache__/__init__.cpython-311.pyc
index a7b24fe5f..3c5f449af 100644
Binary files a/yuthon_performance/models/__pycache__/__init__.cpython-311.pyc and b/yuthon_performance/models/__pycache__/__init__.cpython-311.pyc differ
diff --git a/yuthon_property/__pycache__/__init__.cpython-311.pyc b/yuthon_property/__pycache__/__init__.cpython-311.pyc
index 119d6e62b..96c275c75 100644
Binary files a/yuthon_property/__pycache__/__init__.cpython-311.pyc and b/yuthon_property/__pycache__/__init__.cpython-311.pyc differ
diff --git a/yuthon_property/models/__pycache__/__init__.cpython-311.pyc b/yuthon_property/models/__pycache__/__init__.cpython-311.pyc
index 5df9cac4f..8b231a914 100644
Binary files a/yuthon_property/models/__pycache__/__init__.cpython-311.pyc and b/yuthon_property/models/__pycache__/__init__.cpython-311.pyc differ
diff --git a/yuthon_res_partner/__pycache__/__init__.cpython-311.pyc b/yuthon_res_partner/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 9b8e17d43..000000000
Binary files a/yuthon_res_partner/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_res_partner/models/__pycache__/__init__.cpython-311.pyc b/yuthon_res_partner/models/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 96655b513..000000000
Binary files a/yuthon_res_partner/models/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_res_partner/models/__pycache__/yuthon_res_partner.cpython-311.pyc b/yuthon_res_partner/models/__pycache__/yuthon_res_partner.cpython-311.pyc
deleted file mode 100644
index 4b89ed783..000000000
Binary files a/yuthon_res_partner/models/__pycache__/yuthon_res_partner.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat/__pycache__/__init__.cpython-311.pyc
index b77ca908c..5053f0f6c 100644
Binary files a/yuthon_wechat/__pycache__/__init__.cpython-311.pyc and b/yuthon_wechat/__pycache__/__init__.cpython-311.pyc differ
diff --git a/yuthon_wechat/controllers/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat/controllers/__pycache__/__init__.cpython-311.pyc
index 60d246061..5a5686a22 100644
Binary files a/yuthon_wechat/controllers/__pycache__/__init__.cpython-311.pyc and b/yuthon_wechat/controllers/__pycache__/__init__.cpython-311.pyc differ
diff --git a/yuthon_wechat/controllers/__pycache__/main.cpython-311.pyc b/yuthon_wechat/controllers/__pycache__/main.cpython-311.pyc
index 27503aafd..e1a109475 100644
Binary files a/yuthon_wechat/controllers/__pycache__/main.cpython-311.pyc and b/yuthon_wechat/controllers/__pycache__/main.cpython-311.pyc differ
diff --git a/yuthon_wechat/models/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat/models/__pycache__/__init__.cpython-311.pyc
index c0649b9c8..3aef6618a 100644
Binary files a/yuthon_wechat/models/__pycache__/__init__.cpython-311.pyc and b/yuthon_wechat/models/__pycache__/__init__.cpython-311.pyc differ
diff --git a/yuthon_wechat/models/__pycache__/res_users.cpython-311.pyc b/yuthon_wechat/models/__pycache__/res_users.cpython-311.pyc
index 76fa4e4e4..ff3adb9ab 100644
Binary files a/yuthon_wechat/models/__pycache__/res_users.cpython-311.pyc and b/yuthon_wechat/models/__pycache__/res_users.cpython-311.pyc differ
diff --git a/yuthon_wechat/models/__pycache__/wecom_api.cpython-311.pyc b/yuthon_wechat/models/__pycache__/wecom_api.cpython-311.pyc
index 861b7f656..bc6dbb3e9 100644
Binary files a/yuthon_wechat/models/__pycache__/wecom_api.cpython-311.pyc and b/yuthon_wechat/models/__pycache__/wecom_api.cpython-311.pyc differ
diff --git a/yuthon_wechat/models/__pycache__/wecom_apps.cpython-311.pyc b/yuthon_wechat/models/__pycache__/wecom_apps.cpython-311.pyc
index 3f56111a0..2f45453fb 100644
Binary files a/yuthon_wechat/models/__pycache__/wecom_apps.cpython-311.pyc and b/yuthon_wechat/models/__pycache__/wecom_apps.cpython-311.pyc differ
diff --git a/yuthon_wechat/wizard/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat/wizard/__pycache__/__init__.cpython-311.pyc
index a1f38d42b..98f6649a6 100644
Binary files a/yuthon_wechat/wizard/__pycache__/__init__.cpython-311.pyc and b/yuthon_wechat/wizard/__pycache__/__init__.cpython-311.pyc differ
diff --git a/yuthon_wechat/wizard/__pycache__/wecom_api_sync_wizard.cpython-311.pyc b/yuthon_wechat/wizard/__pycache__/wecom_api_sync_wizard.cpython-311.pyc
index 38aab2cbc..30c0600c3 100644
Binary files a/yuthon_wechat/wizard/__pycache__/wecom_api_sync_wizard.cpython-311.pyc and b/yuthon_wechat/wizard/__pycache__/wecom_api_sync_wizard.cpython-311.pyc differ
diff --git a/yuthon_wechat_attendance/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat_attendance/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 22abcb91c..000000000
Binary files a/yuthon_wechat_attendance/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/controllers/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat_attendance/controllers/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 3f3d6815d..000000000
Binary files a/yuthon_wechat_attendance/controllers/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/controllers/__pycache__/portal.cpython-311.pyc b/yuthon_wechat_attendance/controllers/__pycache__/portal.cpython-311.pyc
deleted file mode 100644
index b85d2075a..000000000
Binary files a/yuthon_wechat_attendance/controllers/__pycache__/portal.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/models/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat_attendance/models/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 896a50e68..000000000
Binary files a/yuthon_wechat_attendance/models/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/models/__pycache__/hr_attendance.cpython-311.pyc b/yuthon_wechat_attendance/models/__pycache__/hr_attendance.cpython-311.pyc
deleted file mode 100644
index 0b57e3dc8..000000000
Binary files a/yuthon_wechat_attendance/models/__pycache__/hr_attendance.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/models/__pycache__/hr_attendance_detail.cpython-311.pyc b/yuthon_wechat_attendance/models/__pycache__/hr_attendance_detail.cpython-311.pyc
deleted file mode 100644
index 5b63e7225..000000000
Binary files a/yuthon_wechat_attendance/models/__pycache__/hr_attendance_detail.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/models/__pycache__/hr_attendance_month.cpython-311.pyc b/yuthon_wechat_attendance/models/__pycache__/hr_attendance_month.cpython-311.pyc
deleted file mode 100644
index 4f5ffe86b..000000000
Binary files a/yuthon_wechat_attendance/models/__pycache__/hr_attendance_month.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/utils/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat_attendance/utils/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index ecec09667..000000000
Binary files a/yuthon_wechat_attendance/utils/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/utils/__pycache__/common.cpython-311.pyc b/yuthon_wechat_attendance/utils/__pycache__/common.cpython-311.pyc
deleted file mode 100644
index c8c5a5c3c..000000000
Binary files a/yuthon_wechat_attendance/utils/__pycache__/common.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/wizard/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat_attendance/wizard/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index adf7498f8..000000000
Binary files a/yuthon_wechat_attendance/wizard/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/wizard/__pycache__/hr_attendance_detail_wizard.cpython-311.pyc b/yuthon_wechat_attendance/wizard/__pycache__/hr_attendance_detail_wizard.cpython-311.pyc
deleted file mode 100644
index 838fe5cb6..000000000
Binary files a/yuthon_wechat_attendance/wizard/__pycache__/hr_attendance_detail_wizard.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_attendance/wizard/__pycache__/hr_attendance_month_wizard.cpython-311.pyc b/yuthon_wechat_attendance/wizard/__pycache__/hr_attendance_month_wizard.cpython-311.pyc
deleted file mode 100644
index d8341104a..000000000
Binary files a/yuthon_wechat_attendance/wizard/__pycache__/hr_attendance_month_wizard.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_employee/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat_employee/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index e35e95289..000000000
Binary files a/yuthon_wechat_employee/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_employee/models/__pycache__/__init__.cpython-311.pyc b/yuthon_wechat_employee/models/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index eb53d04e8..000000000
Binary files a/yuthon_wechat_employee/models/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_wechat_employee/models/__pycache__/hr_employee.cpython-311.pyc b/yuthon_wechat_employee/models/__pycache__/hr_employee.cpython-311.pyc
deleted file mode 100644
index e33181915..000000000
Binary files a/yuthon_wechat_employee/models/__pycache__/hr_employee.cpython-311.pyc and /dev/null differ
diff --git a/yuthon_work_brand/__pycache__/__init__.cpython-311.pyc b/yuthon_work_brand/__pycache__/__init__.cpython-311.pyc
index 99fc9258c..6204de0ef 100644
Binary files a/yuthon_work_brand/__pycache__/__init__.cpython-311.pyc and b/yuthon_work_brand/__pycache__/__init__.cpython-311.pyc differ
diff --git a/yuthon_work_brand/models/__pycache__/__init__.cpython-311.pyc b/yuthon_work_brand/models/__pycache__/__init__.cpython-311.pyc
index 2b4f3dc9d..4eda7920d 100644
Binary files a/yuthon_work_brand/models/__pycache__/__init__.cpython-311.pyc and b/yuthon_work_brand/models/__pycache__/__init__.cpython-311.pyc differ