添加文件

This commit is contained in:
李鹏宇
2026-02-09 00:05:53 +08:00
parent 969db3549a
commit 2c4af33fa8
10 changed files with 284 additions and 1 deletions
@@ -1351,3 +1351,82 @@ class ReportExcel(models.Model):
output.seek(0)
response.stream.write(output.read())
output.close()
def get_xlsx_meal_active_report(self, data, response):
"""误餐归档明细报表的自定义 Excel 样式"""
output = io.BytesIO()
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
sheet = workbook.add_worksheet('误餐归档明细')
tz = self.env.user.tz or 'Asia/Shanghai'
from pytz import timezone
user_tz = timezone(tz)
header_format = workbook.add_format({'font_size': 11, 'bold': True, 'border': 1, 'align': 'center', 'valign': 'vcenter', 'bg_color': '#D3D3D3'})
data_format = workbook.add_format({'font_size': 10, 'border': 1, 'align': 'center', 'valign': 'vcenter'})
datetime_format = workbook.add_format({'font_size': 10, 'border': 1, 'align': 'center', 'valign': 'vcenter', 'num_format': 'yyyy-mm-dd hh:mm'})
date_format = workbook.add_format({'font_size': 10, 'border': 1, 'align': 'center', 'valign': 'vcenter', 'num_format': 'yyyy-mm-dd'})
col = 0
for label in data['field_label']:
sheet.write(0, col, label, header_format)
if col == 0:
sheet.set_column(col, col, 15)
elif col == 1:
sheet.set_column(col, col, 18)
elif col == 2:
sheet.set_column(col, col, 18)
elif col in [3, 4]:
sheet.set_column(col, col, 20)
elif col == 6:
sheet.set_column(col, col, 40)
else:
sheet.set_column(col, col, 15)
col += 1
records = []
active_ids = data.get('active_ids')
if active_ids:
records = self.env[data['model_name']].browse(active_ids)
else:
records = self.env[data['model_name']].search([])
row = 1
for rec in records:
col = 0
for field_name in data['fields_name']:
field = rec._fields.get(field_name)
value = rec[field_name]
if isinstance(value, datetime.datetime):
if value:
from pytz import UTC
value_utc = UTC.localize(value) if value.tzinfo is None else value
value_local = value_utc.astimezone(user_tz)
sheet.write_datetime(row, col, value_local.replace(tzinfo=None), datetime_format)
else:
sheet.write(row, col, '', data_format)
elif isinstance(value, datetime.date):
sheet.write_datetime(row, col, value, date_format)
elif field:
if field.type == 'many2one':
value = value.display_name if value else ''
sheet.write(row, col, value, data_format)
elif field.type == 'many2many':
value = ', '.join(value.mapped('display_name')) if value else ''
sheet.write(row, col, value, data_format)
elif field.type == 'selection':
selection_dict = dict(field.selection)
value = selection_dict.get(value, value or '')
sheet.write(row, col, value, data_format)
elif field.type == 'float':
sheet.write(row, col, value or 0, data_format)
elif field.type == 'text':
sheet.write(row, col, value or '', data_format)
else:
sheet.write(row, col, value or '', data_format)
else:
sheet.write(row, col, value or '', data_format)
col += 1
row += 1
if row > 1:
sheet.autofilter(0, 0, row - 1, len(data['field_label']) - 1)
sheet.freeze_panes(1, 0)
workbook.close()
output.seek(0)
response.stream.write(output.read())
output.close()