first push message

This commit is contained in:
2026-07-01 14:41:49 +07:00
parent 6667dec2bf
commit 58b5f46cc4
2951 changed files with 316619 additions and 0 deletions
@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import ks_base_export_gantt
@@ -0,0 +1,76 @@
# -*- coding: utf-8 -*-
import json
from odoo import http, _
from odoo.http import request, content_disposition
# Odoo 19: ExcelExport moved — try the 17+ path first, fall back to older path.
try:
from odoo.addons.web.controllers.export import ExcelExport
except ImportError:
try:
from odoo.addons.web.controllers.main import ExcelExport
except ImportError:
ExcelExport = object # graceful degradation; export simply won't work
class KsBaseGanttExportBase(ExcelExport):
@http.route('/web/ksganttbase/export/xlsx', type='http', auth="user")
def ks_gantt_base_export_excel(self, ks_fields, ks_model_name, ks_domain, ks_context):
"""Export Gantt data as an XLSX file."""
file_name = self.ks_get_export_file_name()
ks_domain = self.ks_validate_domain(ks_domain)
ks_fields = json.loads(ks_fields)
ks_context = json.loads(ks_context)
ks_export_data = []
ks_model_data = request.env[ks_model_name].with_context(ks_context).search(ks_domain)
for ks_data in ks_model_data:
ks_row_list = []
for ks_export_field in ks_fields:
if ks_data._fields[ks_export_field].type == 'many2one':
ks_column_data = False
if ks_data[ks_export_field].id:
ks_column_data = (
str(ks_data[ks_export_field].id)
+ ','
+ ks_data[ks_export_field].display_name
)
ks_row_list.append(ks_column_data)
else:
ks_row_list.append(ks_data[ks_export_field])
ks_export_data.append(ks_row_list)
response_data = self.from_data(ks_fields, ks_export_data)
return request.make_response(
response_data,
headers=[
(
'Content-Disposition',
content_disposition(self.filename(file_name.get(ks_model_name))),
),
('Content-Type', self.content_type),
],
)
def ks_get_export_file_name(self):
"""Return a mapping of model name → export file label."""
return {
'hr.leave': _('Time Off'),
'mrp.production': _('Manufacturing Orders'),
'mrp.workorder': _('Work Orders'),
}
def ks_validate_domain(self, ks_domain):
"""Convert JSON domain string to a proper list of tuples."""
if not ks_domain:
return []
ks_domain_list = json.loads(ks_domain)
ks_return_list = []
for ks_list in ks_domain_list:
if isinstance(ks_list, list):
ks_return_list.append(tuple(ks_list))
else:
ks_return_list.append(ks_list)
return ks_return_list