From 67eeb51cd4f548b44260e946450fc579fbf7a72e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Fri, 13 Feb 2026 22:25:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=97=E6=AE=B5=E9=A1=BA=E5=BA=8F=EF=BC=8C?= =?UTF-8?q?=E9=87=91=E8=9D=B6=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/property_accounts_receivable.py | 127 ++++++++++++++++++ .../static/tmpl/yingshoudanjindiedaoru.xlsx | Bin 0 -> 13279 bytes .../property_accounts_receivable_views.xml | 8 ++ .../views/yuthon_salary_active_views.xml | 6 +- 4 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 yuthon_property/static/tmpl/yingshoudanjindiedaoru.xlsx diff --git a/yuthon_property/models/property_accounts_receivable.py b/yuthon_property/models/property_accounts_receivable.py index fa978fb60..df45bc916 100644 --- a/yuthon_property/models/property_accounts_receivable.py +++ b/yuthon_property/models/property_accounts_receivable.py @@ -3,6 +3,8 @@ import xlwt import base64 import io from openpyxl import load_workbook +from openpyxl.styles import Alignment +from copy import copy from odoo.modules import get_module_resource from datetime import datetime, timedelta, date @@ -286,3 +288,128 @@ class PropertyAccountsReceivable(models.Model): 'url': f'/web/content/{attachment.id}?download=true', 'target': 'self', } + + def export_kingdee_receivable(self): + """导出应收单金蝶数据到Excel模板""" + # 获取勾选的应收账单记录 + receivable_ids = self._context.get('active_ids', []) + if not receivable_ids: + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'message': '请先勾选需要导出的应收账单记录', + 'type': 'warning', + 'sticky': False, + } + } + + receivable_records = self.env['property.accounts.receivable'].browse(receivable_ids) + + # 加载模板文件 + template_path = get_module_resource('yuthon_property', 'static', 'tmpl', 'yingshoudanjindiedaoru.xlsx') + workbook = load_workbook(template_path) + sheet = workbook.active + + # 从第3行开始写入数据(第1-2行是表头) + row = 3 + # 序号起始值 + sequence_number = 104101 + + # 获取模板样式行(使用第3行作为参考,但会被数据覆盖) + # 建议:确保模板第3行有完整的样式设置 + template_row_idx = 3 + if sheet.max_row >= template_row_idx: + # 先保存第3行的样式 + template_styles = {} + for col in range(1, 37): # A到AJ列(36列) + cell = sheet.cell(row=template_row_idx, column=col) + template_styles[col] = { + 'font': copy(cell.font), + 'fill': copy(cell.fill), + 'border': copy(cell.border), + 'alignment': copy(cell.alignment), + } + else: + template_styles = {} + + for record in receivable_records: + # 先解除当前行的合并单元格(如果有) + merged_cells_to_unmerge = [] + for merged_range in sheet.merged_cells.ranges: + if merged_range.min_row <= row <= merged_range.max_row: + merged_cells_to_unmerge.append(str(merged_range)) + for merged_range_str in merged_cells_to_unmerge: + sheet.unmerge_cells(merged_range_str) + + # 先为所有列应用模板样式 + for col in range(1, 37): # A到AJ列 + cell = sheet.cell(row=row, column=col) + if col in template_styles: + cell.font = copy(template_styles[col]['font']) + cell.fill = copy(template_styles[col]['fill']) + cell.border = copy(template_styles[col]['border']) + cell.alignment = copy(template_styles[col]['alignment']) + + # A列:序号(从104101开始) + sheet.cell(row=row, column=1, value=sequence_number) + + # B列:应收开始日期 + if record.due_date: + sheet.cell(row=row, column=2, value=record.due_date.strftime('%Y-%m-%d')) + + # C列:应收结束日期 + if record.due_date_end: + sheet.cell(row=row, column=3, value=record.due_date_end.strftime('%Y-%m-%d')) + + # E列:物业地址(设置自动换行) + e_cell = sheet.cell(row=row, column=5, value=record.property_name or '') + e_cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True) + + # M列:租赁单位(第13列) + rent_company = '' + if record.contract_id: + rent_company = record.contract_id.rent_company or '' + sheet.cell(row=row, column=13, value=rent_company) + + # N列:备注(设置自动换行) + n_cell = sheet.cell(row=row, column=14, value=record.remark or '') + n_cell.alignment = Alignment(horizontal='left', vertical='center', wrap_text=True) + + # 设置行高为自动(让Excel自动调整) + # 为确保自动换行生效,设置最小行高 + if not sheet.row_dimensions[row].height or sheet.row_dimensions[row].height < 30: + sheet.row_dimensions[row].height = 30 # 设置最小行高30,确保能显示2-3行文本 + + # P列:承租方 + sheet.cell(row=row, column=16, value=record.lessee_id.name if record.lessee_id else '') + + # AF列:税率(第32列) + sheet.cell(row=row, column=32, value=record.tax or 0) + + # AJ列:当期金额(第36列) + sheet.cell(row=row, column=36, value=record.original_amount or 0) + + row += 1 + sequence_number += 1 + + # 保存到内存 + output = io.BytesIO() + workbook.save(output) + output.seek(0) + excel_data = base64.b64encode(output.read()) + output.close() + + # 创建附件并返回下载 + attachment = self.env['ir.attachment'].create({ + 'name': '应收单金蝶导入.xlsx', + 'datas': excel_data, + 'mimetype': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'type': 'binary', + }) + + return { + 'type': 'ir.actions.act_url', + 'url': f'/web/content/{attachment.id}?download=true', + 'target': 'self', + } diff --git a/yuthon_property/static/tmpl/yingshoudanjindiedaoru.xlsx b/yuthon_property/static/tmpl/yingshoudanjindiedaoru.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..55fd2713b6a1bdce4fbc9fcca018dd8d7839bba0 GIT binary patch literal 13279 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 action = model.export_batch_invoice() + + 应收单金蝶导出 + + + list + code + action = model.export_kingdee_receivable() + \ No newline at end of file diff --git a/yuthon_salary/views/yuthon_salary_active_views.xml b/yuthon_salary/views/yuthon_salary_active_views.xml index a38353af0..0b3ae8375 100644 --- a/yuthon_salary/views/yuthon_salary_active_views.xml +++ b/yuthon_salary/views/yuthon_salary_active_views.xml @@ -36,9 +36,6 @@ - - - @@ -71,6 +68,9 @@ + + +