mirror of
https://gitee.com/yuzelin/erpnext_china.git
synced 2026-03-02 05:14:04 +08:00
如果没有进入if他就会报错,
【Traceback with variables (most recent call last):
File "apps/erpnext_china/erpnext_china/chart_of_accounts/company_default/utils.py", line 35, in set_default_accounts
return values
company_name = '临沂市丰境电子商务有限责任公司'
file_path = 'apps/erpnext_china/erpnext_china/chart_of_accounts/company_default/default_accounts.csv'
in_file = <_io.TextIOWrapper name='apps/erpnext_china/erpnext_china/chart_of_accounts/company_default/default_accounts.csv' mode='r' encoding='utf-8'>
data = [['default_bank_account', '银行存款'], ['default_cash_account', '库存现金'], ['default_payable_account', '应付账款'], ['default_payable_account', '应付账款-供应商款'], ['default_payable_account', '应付账款-结算'], ['default_payroll_payable_account', '应付职工薪酬-职工工资'], ['default_payroll_payable_account', '职工工资'], ['default_receivable_account', '应收账款'], ['round_off_account', '财务费用-圆整差异'], ['write_off_account', '营业外支出-坏账损失'], ['exchange_gain_loss_account', '财务费用-汇兑损益'], ['exchange_gain_loss_account', '财务费用_汇兑差额'], ['unrealized_exchange_gain_loss_account', '财务费用-汇兑损益'], ['default_income_account', '主营业务收入'], ['default_income_account', '销售商品收入'], ['default_expense_account', '主营业务成本'], ['default_expense_account', '销售商品成本'], ['default_expense_claim_payable_account', '其他应付款'], ['default_discount_account', '财务费用-现金折扣'], ['default_inventory_account', '原材料'], ['stock_adjustment_account', '生产成本-库存调整'], ['stock_adjustment_account', '制造企业成本-库存调整'], ['stock_received_but_not_billed', '应付账款-暂估库存'], ['default_provisional_account', '...
company_doc = <Company: 临沂市丰境电子商务有限责任公司>
account_map = {}
builtins.UnboundLocalError: cannot access local variable 'values' where it is not associated with a value】
Signed-off-by: 丰茂德 <14475558+feng-maode@user.noreply.gitee.com>
178 lines
7.5 KiB
Python
178 lines
7.5 KiB
Python
import frappe, csv, os, json
|
|
from frappe import _
|
|
from erpnext.setup.setup_wizard.operations.taxes_setup import from_detailed_data
|
|
|
|
|
|
def set_company_default(company):
|
|
set_default_accounts(company)
|
|
setup_tax_template(company)
|
|
setup_tax_rule(company)
|
|
set_item_group_account(company)
|
|
set_warehouse_account(company)
|
|
|
|
def set_default_accounts(company_name):
|
|
try:
|
|
values = {}
|
|
file_path = os.path.join(os.path.dirname(__file__), 'default_accounts.csv')
|
|
with open(file_path, 'r', encoding='utf-8') as in_file:
|
|
data = list(csv.reader(in_file))
|
|
|
|
company_doc = frappe.get_doc('Company', company_name)
|
|
account_map = frappe._dict(frappe.get_all("Account",
|
|
filters = {
|
|
"company": company_name,
|
|
"account_name": ("in", [d[1] for d in data]),
|
|
"is_group": 0
|
|
},
|
|
fields = ["account_name", "name"],
|
|
as_list = 1
|
|
))
|
|
if account_map:
|
|
values = {d[0]:account_map.get(d[1]) for d in data if account_map.get(d[1])}
|
|
company_doc.update(values)
|
|
frappe.local.flags.ignore_chart_of_accounts = 1
|
|
company_doc.db_update()
|
|
|
|
return values
|
|
except:
|
|
frappe.log_error("china_company_default.utils.set_default_accounts")
|
|
|
|
def setup_tax_template(company_name):
|
|
try:
|
|
file_path = os.path.join(os.path.dirname(__file__), 'tax_template.json')
|
|
with open(file_path, 'r', encoding='utf-8') as json_file:
|
|
tax_data = json.load(json_file)
|
|
|
|
from_detailed_data(company_name, tax_data)
|
|
#标准功能中未处理含税字段,这里单独处理
|
|
for prefix in ('Purchase', 'Sales'):
|
|
header = frappe.qb.DocType(f"{prefix} Taxes and Charges Template")
|
|
detail = frappe.qb.DocType(f"{prefix} Taxes and Charges")
|
|
|
|
frappe.qb.update(detail
|
|
).join(header
|
|
).on(header.name == detail.parent
|
|
).where(header.title.like('%含税%')
|
|
).set(detail.included_in_print_rate, 1
|
|
).run()
|
|
except:
|
|
frappe.log_error("china_company_default.utils.setup_tax_template")
|
|
|
|
def setup_tax_rule(company_name):
|
|
try:
|
|
abbr = frappe.db.get_value('Company', company_name, 'abbr')
|
|
file_path = os.path.join(os.path.dirname(__file__), 'tax_rule.csv')
|
|
with open(file_path, 'r', encoding='utf-8') as in_file:
|
|
data = list(csv.reader(in_file))
|
|
if data: data = data[1:]
|
|
for (tax_category, tax_type, customer_group, item_group, billing_country,
|
|
shipping_country, priority, tax_template) in data:
|
|
template_field_name = 'purchase_tax_template' if tax_type =='Purchase' else 'sales_tax_template'
|
|
tax_rule = frappe.get_doc({
|
|
'doctype':'Tax Rule',
|
|
'tax_category': tax_category,
|
|
'tax_type': tax_type,
|
|
'customer_group': customer_group,
|
|
'item_group': item_group,
|
|
'billing_country': billing_country,
|
|
'shipping_country': shipping_country,
|
|
'priority': priority,
|
|
template_field_name: f'{tax_template} - {abbr}',
|
|
'company': company_name})
|
|
tax_rule.insert(ignore_permissions = 1)
|
|
except:
|
|
frappe.log_error("china_company_default.utils.setup_tax_rule")
|
|
|
|
def set_warehouse_account(company):
|
|
abbr = frappe.db.get_value('Company', company, 'abbr')
|
|
try:
|
|
wh_account_list = [
|
|
[_("Finished Goods"), '库存商品'],
|
|
[_("Work In Progress"), '在产品']
|
|
]
|
|
|
|
account_map = frappe._dict(frappe.get_all('Account',
|
|
filters ={'account_name': ('in', [row[1] for row in wh_account_list]),
|
|
'company': company},
|
|
fields = ['account_name', 'name'],
|
|
as_list = True))
|
|
for (wh, account_name) in wh_account_list:
|
|
if account_id := account_map.get(account_name):
|
|
frappe.db.set_value('Warehouse', f'{wh} - {abbr}', 'account', account_id)
|
|
except:
|
|
frappe.log_error("china_company_default.utils.setup_warehouse_account")
|
|
|
|
def set_item_group_account(company):
|
|
try:
|
|
# 按会计准则分组配置科目映射
|
|
chart_of_accounts_config = {
|
|
'小企业会计准则': [
|
|
(_("Raw Material"), '生产成本-基本生产成本'),
|
|
(_("Sub Assemblies"), '生产成本-基本生产成本'),
|
|
(_("Consumable"), '生产成本-基本生产成本'),
|
|
(_("Services"), '生产成本-辅助生产成本'),
|
|
(_("Product"), '主营业务成本')
|
|
],
|
|
'一般企业会计准则(2024)': [
|
|
(_("Raw Material"), '制造企业成本-直接材料'),
|
|
(_("Sub Assemblies"), '制造企业成本-直接材料'),
|
|
(_("Consumable"), '制造企业成本-直接材料'),
|
|
#(_("Services"), '生产成本-辅助生产成本'),
|
|
(_("Product"), '销售商品成本')
|
|
]
|
|
}
|
|
|
|
# 获取公司的会计准则
|
|
company_doc = frappe.get_doc('Company', company)
|
|
chart_of_accounts = getattr(company_doc, 'chart_of_accounts', None)
|
|
|
|
# 如果没有设置会计准则,使用默认配置(小企业会计准则)
|
|
if not chart_of_accounts or chart_of_accounts not in chart_of_accounts_config:
|
|
chart_of_accounts = '小企业会计准则'
|
|
|
|
# 获取当前会计准则对应的科目配置
|
|
item_group_account_list = chart_of_accounts_config[chart_of_accounts]
|
|
|
|
# 获取科目映射
|
|
account_names = [row[1] for row in item_group_account_list]
|
|
account_map = frappe._dict(frappe.get_all('Account',
|
|
filters={
|
|
'account_name': ('in', account_names),
|
|
'company': company,
|
|
'is_group': 0
|
|
},
|
|
fields=['account_name', 'name'],
|
|
as_list=True
|
|
))
|
|
|
|
item_group_account_assigned = set()
|
|
|
|
for (item_group, account_name) in item_group_account_list:
|
|
if item_group in item_group_account_assigned:
|
|
continue
|
|
|
|
account_id = account_map.get(account_name)
|
|
if account_id and frappe.db.exists('Item Group', item_group):
|
|
item_group_doc = frappe.get_doc('Item Group', item_group)
|
|
|
|
# 检查是否已存在该公司的配置
|
|
existing_company_config = None
|
|
for default in item_group_doc.get('item_group_defaults', []):
|
|
if default.company == company:
|
|
existing_company_config = default
|
|
break
|
|
|
|
# 如果已存在配置,则更新;否则新增
|
|
if existing_company_config:
|
|
existing_company_config.expense_account = account_id
|
|
else:
|
|
item_group_doc.append('item_group_defaults', {
|
|
'company': company,
|
|
'expense_account': account_id
|
|
})
|
|
|
|
item_group_doc.save()
|
|
item_group_account_assigned.add(item_group)
|
|
|
|
except Exception as e:
|
|
frappe.log_error("china_company_default.utils.set_item_group_account") |