人财事物信息化 - accounts_settings.py


  1. 一段话总结:该Python代码定义了AccountsSettings类用于管理ERPNext系统中的账户设置。 在保存设置时,会验证并处理如启用通用方会计从项目税模板添加税等设置变更,同时会清除缓存。还会对过期天数自动对账作业触发间隔对账队列大小等进行有效性验证,若自动对账作业触发间隔对账队列大小变更,会相应同步自动对账配置

  2. 思维导图

mindmap
## **AccountsSettings类定义**
- 继承自Document类,用于管理账户设置
- 包含众多账户设置相关的属性
## **验证与设置变更处理**
- 保存时验证设置变更,处理属性修改
- 变更特定属性时清除缓存
## **属性有效性验证**
- 验证stale_days属性
- 验证auto_reconciliation_job_trigger属性
- 验证reconciliation_queue_size属性
## **自动对账配置同步**
- 变更auto_reconciliation_job_trigger时同步配置
- 变更reconciliation_queue_size时同步配置
  1. 详细总结 AccountsSettings.py文件定义了AccountsSettings类,用于管理ERPNext系统的账户设置。
    • 类属性:包含多种账户设置相关属性,如acc_frozen_upto(冻结账户截止日期)、add_taxes_from_item_tax_template(是否从项目税模板添加税)、auto_reconcile_payments(是否自动对账支付)等。
    • 验证方法
      • validate方法:在保存文档时执行,对比保存前后设置的差异。若add_taxes_from_item_tax_templateenable_common_party_accounting变更,会更新数据库默认值并清除缓存。同时调用其他验证方法,如验证过期天数、支付计划打印设置、待处理重新过账、自动对账配置等。
      • validate_stale_days方法:当allow_stale为否且stale_days小于等于0时,提示错误信息“Stale Days should start from 1.”。
      • enable_payment_schedule_in_print方法:根据show_payment_schedule_in_print的值,设置Sales OrderSales InvoicePurchase OrderPurchase Invoice这几个单据的due_datepayment_schedule字段的打印隐藏属性。
      • validate_pending_reposts方法:若设置了acc_frozen_upto,检查是否有待处理的重新过账。
      • validate_and_sync_auto_reconcile_config方法:若auto_reconciliation_job_trigger变更,且值在1到59分钟之间,同步自动对账配置;否则抛出异常。若reconciliation_queue_size变更,且值不在5到100之间,抛出异常。
属性名 类型 描述 关键验证
acc_frozen_upto DF.Date 冻结账户截止日期 设置时检查待处理重新过账
add_taxes_from_item_tax_template DF.Check 是否从项目税模板添加税 变更时更新默认值并清缓存
auto_reconciliation_job_trigger DF.Int 自动对账作业触发间隔 需在1到59分钟之间
reconciliation_queue_size DF.Int 对账队列大小 需在5到100之间
  1. 关键问题
    • 问题1:当add_taxes_from_item_tax_template属性变更时会执行哪些操作?
      • 答案:当add_taxes_from_item_tax_template属性变更时,会调用frappe.db.set_default方法更新数据库中add_taxes_from_item_tax_template的默认值,并将clear_cache设为True,若clear_cacheTrue,最后会调用frappe.clear_cache清除缓存。
    • 问题2validate_and_sync_auto_reconcile_config方法主要验证和处理哪些内容?
      • 答案:该方法主要验证auto_reconciliation_job_triggerreconciliation_queue_size属性。当auto_reconciliation_job_trigger变更且值在1到59分钟之间时,同步自动对账配置;否则抛出异常。当reconciliation_queue_size变更且值不在5到100之间时,抛出异常。
    • 问题3enable_payment_schedule_in_print方法如何实现对支付计划打印设置的修改?
      • 答案enable_payment_schedule_in_print方法根据show_payment_schedule_in_print的值(0或1),通过make_property_setter方法分别对Sales OrderSales InvoicePurchase OrderPurchase Invoice这几个单据的due_datepayment_schedule字段设置print_hide属性,0表示不隐藏,1表示隐藏。 由于我没办法直接访问网页内容,你可以把accounts_settings.py文件里的代码复制粘贴给我,这样我就能按照要求进行总结了。

该Python代码文件主要定义了AccountsSettings类,用于管理ERPNext系统中的账户设置。在类型检查和文档保存验证等方面发挥关键作用,确保系统中账户相关功能的正确配置和运行。下面对TYPE_CHECKING中的参数以及各个def函数进行详细说明。

TYPE_CHECKING参数说明

TYPE_CHECKING是一个用于类型检查的特殊变量。当该变量为真时(通常在类型检查工具运行时),会导入类型相关的定义,以辅助类型检查,但这些导入在运行时不会实际执行,从而避免运行时错误。其中的参数对应着AccountsSettings类中的各个属性的类型定义,具体如下:

  • acc_frozen_upto: DF.Date | None:表示acc_frozen_upto属性可以是DF.Date类型(一个可能是自定义的日期类型),也可以是None。该属性用于设置冻结账户的截止日期。
  • add_taxes_from_item_tax_template: DF.CheckDF.Check类型表示这是一个布尔类型的复选框设置,用于确定是否从项目税模板添加税。
  • allow_multi_currency_invoices_against_single_party_account: DF.Check:同样是DF.Check类型,用于控制是否允许针对单个交易方账户开具多货币发票。
  • 其他参数:以此类推,它们分别定义了对应账户设置属性的类型,涵盖了日期、布尔、整数、链接、枚举等多种类型,涉及到自动对账、付款条件、递延会计分录处理、资产折旧记账、税务处理、地址税类确定等多方面的账户相关设置。
  • def函数功能及业务逻辑

    1. validate函数
      • 功能:在文档保存前进行验证和相关设置变更处理。
      • 业务逻辑:首先获取保存前的文档对象old_doc,初始化clear_cacheFalse。然后对比当前文档与保存前文档的多个属性值,若add_taxes_from_item_tax_templateenable_common_party_accounting发生变化,则更新数据库的默认值,并将clear_cache设为True。接着调用validate_stale_days验证过期天数设置,若show_payment_schedule_in_print有变化,则调用enable_payment_schedule_in_print调整相关单据的打印设置,若acc_frozen_upto改变,调用validate_pending_reposts检查待处理的重新过账。最后,如果clear_cacheTrue,则清除缓存,并调用validate_and_sync_auto_reconcile_config验证和同步自动对账配置。
    2. validate_stale_days函数
      • 功能:验证stale_days(过期天数)的设置是否合理。
      • 业务逻辑:当allow_stale(允许过期)为False,且stale_days小于等于0时,通过frappe.msgprint弹出错误提示,要求Stale Days should start from 1.,并停止后续操作(raise_exception = 1)。
    3. enable_payment_schedule_in_print函数
      • 功能:根据show_payment_schedule_in_print的设置,控制相关单据中付款计划和到期日期在打印时的显示状态。
      • 业务逻辑:获取show_payment_schedule_in_print的整数值show_in_print,遍历Sales OrderSales InvoicePurchase OrderPurchase Invoice这几个单据类型。针对每个单据类型,使用make_property_setter函数分别设置due_date字段的print_hide属性为show_in_print,以及payment_schedule字段的print_hide属性为0(显示)或1(隐藏),取决于show_in_print的值,同时跳过字段有效性检查(validate_fields_for_doctype = False)。
    4. validate_pending_reposts函数
      • 功能:检查在设置了冻结账户截止日期后,是否存在未处理的重新过账情况。
      • 业务逻辑:当acc_frozen_upto有值时,调用check_pending_reposting函数,传入acc_frozen_upto的值,以检查是否有待处理的重新过账操作。
    5. validate_and_sync_auto_reconcile_config函数
      • 功能:验证自动对账相关设置的合理性,并同步自动对账配置。
      • 业务逻辑:检查auto_reconciliation_job_trigger(自动对账作业触发间隔)是否发生变化,若发生变化且值大于0小于60,则调用sync_auto_reconcile_config函数同步自动对账配置;否则通过frappe.throw抛出异常,提示“Cron Interval should be between 1 and 59 Min”。同样检查reconciliation_queue_size(对账队列大小)是否变化,若变化且值不在5到100之间,也抛出异常提示“Queue Size should be between 5 and 100” 。
Discard
Save
Review Changes ← Back to Content
Message Status Space Raised By Last update on