Merge pull request !9204 from 李鹏宇/dev
This commit is contained in:
@@ -15,7 +15,7 @@ _logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class preview(http.Controller):
|
||||
@http.route('/web/content/preview/<int:id>', type='http', method=['Get'], auth="user")
|
||||
@http.route('/web/content/preview/<int:id>', type='http', method=['Get'], auth="public")
|
||||
def content_preview(self, id=None):
|
||||
ir_attach = request.env['ir.attachment'].sudo()
|
||||
attach = ir_attach.browse(id)
|
||||
|
||||
@@ -33,23 +33,25 @@ class YuthonConfirmUsers(models.Model):
|
||||
for record in self.search([('state', '=', 'no')]):
|
||||
partner_ids = record.employee_id.user_id.partner_id.id
|
||||
record.with_context(lang=record.env.lang)._message_auto_subscribe_notify(partner_ids, 'yuthon_notice.message_yuthon_confirm_users_data')
|
||||
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=yuthon.notice&view_type=list&menu_id={menu_id.id}'
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', user_id=record.employee_id.wecom_userid, title="通知公告",
|
||||
# url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=yuthon.notice&view_type=list&menu_id={menu_id.id}'
|
||||
url = f'https://phone.thtzjt.com/phone/Notice/110?employee_id={record.employee_id.id}'
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', touser=record.employee_id.wecom_userid, title="通知公告",
|
||||
description="您有待确认的通知公告请尽快确认", url=url, btntxt="详细信息")
|
||||
|
||||
|
||||
def reminders_notice(self):
|
||||
confirm_noice_ids = self.env["yuthon.confirm.users"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||
for rec in confirm_noice_ids:
|
||||
if rec.state in ['yes', 'to_sent']:
|
||||
raise UserError('该通知已确认或未发送,不可催办')
|
||||
# menu_id = self.env['ir.ui.menu'].search([('name', '=', '通知公告')])
|
||||
url = f'http://oa.thtzjt.com/webh5#/notice?id={rec.notice_id.id}'
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', user_id=rec.employee_id.wecom_userid,
|
||||
title="通知公告(催办)", description="您有待确认的通知公告请尽快确认",
|
||||
continue
|
||||
url = f'https://phone.thtzjt.com/phone/Notice/110?employee_id={rec.employee_id.id}'
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', touser=rec.employee_id.wecom_userid,
|
||||
title="通知公告", description="您有待确认的通知公告请尽快确认",
|
||||
url=url, btntxt="详细信息")
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice',
|
||||
user_id='18562027762',
|
||||
title="通知公告(催办)",
|
||||
touser='18562027762',
|
||||
# user_id='18562027762',
|
||||
title="通知公告",
|
||||
description="您有待确认的通知公告请尽快确认",
|
||||
url=url, btntxt="详细信息")
|
||||
# partner_ids = rec.employee_id.user_id.partner_id.id
|
||||
@@ -61,12 +63,12 @@ class YuthonConfirmUsers(models.Model):
|
||||
we_id_list = []
|
||||
for rec in confirm_noice_ids:
|
||||
if rec.state != 'to_sent':
|
||||
raise UserError(f'该通知已发送,请选择催办')
|
||||
continue
|
||||
rec.write({'state': 'no'})
|
||||
if rec.employee_id.wecom_userid:
|
||||
we_id_list.append(rec.employee_id.wecom_userid)
|
||||
touser = "|".join(we_id_list) if we_id_list else ""
|
||||
url = f'http://oa.thtzjt.com/webh5#/notice?id={rec.notice_id.id}'
|
||||
url = f'https://phone.thtzjt.com/phone/Notice/110?employee_id={self.users_id.id}'
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', touser=touser, title="通知公告",
|
||||
description=self.name + '发布人:' + self.users_id.name,
|
||||
url=url, btntxt="详细信息")
|
||||
|
||||
@@ -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.
Reference in New Issue
Block a user