Merge pull request !9203 from 李鹏宇/dev_wang
This commit is contained in:
李鹏宇
2026-03-04 02:30:29 +00:00
committed by Gitee
3 changed files with 73 additions and 29 deletions
@@ -212,17 +212,51 @@ class PropertyAccountsReceivable(models.Model):
receivable_records = self.env['property.accounts.receivable'].browse(receivable_ids)
# 加载新模板文件
template_path = get_module_resource('yuthon_property', 'static', 'tmpl', 'piliangkaipiao (2).xlsx')
template_path = get_module_resource('yuthon_property', 'static', 'tmpl', 'piliangkaipiao (3).xlsx')
workbook = load_workbook(template_path)
# 指定写入"原始数据"sheet
sheet = workbook['原始数据']
# 从第3行开始写入数据(第1-2行是表头)
row = 3
# 统计导出数据中最常见的年月(用于B2单元格)
year_month_list = []
for record in receivable_records:
if record.due_date:
year_month_list.append((record.due_date.year, record.due_date.month))
# 获取模板样式行(使用第3行作为参考)
template_row_idx = 3
if year_month_list:
# 取出现次数最多的年月
from collections import Counter
most_common_ym = Counter(year_month_list).most_common(1)[0][0]
title_year, title_month = most_common_ym
else:
# 如果没有应收日期,使用当前年月
now = datetime.now()
title_year, title_month = now.year, now.month
# 填充B2单元格:年月
sheet['B2'] = f'{title_year}年{title_month}月'
# 统计导出数据中最常见的公司(用于C2单元格)
company_list = []
for record in receivable_records:
if record.contract_id and record.contract_id.company_id:
company_list.append(record.contract_id.company_id.name)
if company_list:
from collections import Counter
most_common_company = Counter(company_list).most_common(1)[0][0]
else:
most_common_company = ''
# 填充C2单元格:所属公司
sheet['C2'] = most_common_company
# 从第4行开始写入数据(第1-2行是标题,第3行是表头)
row = 4
# 获取模板样式行(使用第4行作为参考,因为第3行是表头)
template_row_idx = 4
if sheet.max_row >= template_row_idx:
template_styles = {}
for col in range(1, 11): # A到J列(10列)
@@ -266,10 +300,22 @@ class PropertyAccountsReceivable(models.Model):
date_range = record.due_date.strftime('%Y-%m-%d')
sheet.cell(row=row, column=2, value=date_range)
# C列:承租方名称(lessee_id)
sheet.cell(row=row, column=3, value=record.lessee_id.name if record.lessee_id else '')
# C列:金额(original_amount)
sheet.cell(row=row, column=3, value=record.original_amount or 0)
# D列:统一社会信用代码/纳税人识别号(从invoicing.information.line获取)
# D列:物业名称(property_name)
sheet.cell(row=row, column=4, value=record.property_name or '')
# E列:合同编号(contract_code,从合同获取)
contract_code = ''
if record.contract_id:
contract_code = record.contract_id.contract_code or ''
sheet.cell(row=row, column=5, value=contract_code)
# F列:承租方名称(lessee_id)
sheet.cell(row=row, column=6, value=record.lessee_id.name if record.lessee_id else '')
# G列:统一社会信用代码/纳税人识别号(从invoicing.information.line获取)
tax_number = ''
if record.lessee_id and record.lessee_id.invoicing_ids:
# 取第一条有效记录的税号
@@ -277,21 +323,15 @@ class PropertyAccountsReceivable(models.Model):
if inv_line.tax_number:
tax_number = inv_line.tax_number
break
sheet.cell(row=row, column=4, value=tax_number)
sheet.cell(row=row, column=7, value=tax_number)
# E列:金额(original_amount)
sheet.cell(row=row, column=5, value=record.original_amount or 0)
# F列:物业名称(property_name)
sheet.cell(row=row, column=6, value=record.property_name or '')
# G列:产权证(title_information,从合同获取)
# H列:产权证(title_information,从合同获取)
title_info = ''
if record.contract_id:
title_info = record.contract_id.title_information or ''
sheet.cell(row=row, column=7, value=title_info)
sheet.cell(row=row, column=8, value=title_info)
# H列:发票类型(从invoicing.information.line的invoicing_type_id获取)
# I列:发票类型(从invoicing.information.line的invoicing_type_id获取)
invoicing_type = ''
if record.lessee_id and record.lessee_id.invoicing_ids:
# 取第一条有效记录的发票类型
@@ -299,19 +339,23 @@ class PropertyAccountsReceivable(models.Model):
if inv_line.invoicing_type_id:
invoicing_type = inv_line.invoicing_type_id.name or ''
break
sheet.cell(row=row, column=8, value=invoicing_type)
sheet.cell(row=row, column=9, value=invoicing_type)
# I列:税率(从合同的tax_rate获取)
tax_rate_name = ''
# J列:税率(从合同的tax_rate获取,使用小数格式,如0.05)
tax_rate_value = 0.0
if record.contract_id and record.contract_id.tax_rate:
tax_rate_name = record.contract_id.tax_rate.name or ''
sheet.cell(row=row, column=9, value=tax_rate_name)
# J列:合同编号(contract_code,从合同获取)
contract_code = ''
if record.contract_id:
contract_code = record.contract_id.contract_code or ''
sheet.cell(row=row, column=10, value=contract_code)
# 将税率名称(如"0.05"或"5%")转换为小数
tax_rate_name = record.contract_id.tax_rate.name or '0'
try:
# 如果是百分比格式(如"5%"),转换为小数
if '%' in tax_rate_name:
tax_rate_value = float(tax_rate_name.replace('%', '')) / 100
else:
# 直接是小数格式(如"0.05")
tax_rate_value = float(tax_rate_name)
except (ValueError, TypeError):
tax_rate_value = 0.0
sheet.cell(row=row, column=10, value=tax_rate_value)
# 设置最小行高
if not sheet.row_dimensions[row].height or sheet.row_dimensions[row].height < 30:
Binary file not shown.
Binary file not shown.