reverted last change, and made function stable

This commit is contained in:
Ali 2025-12-22 16:24:46 +04:00
parent ef6e4197ef
commit 880a8f946a
4 changed files with 68 additions and 169 deletions

View File

@ -1,12 +1,20 @@
import frappe import frappe
def create_asset_categories(): def create_asset_categories():
"""Create default Asset Categories with accounts""" """
Создает категории активов с настройками счетов
"""
# Проверка существования таблицы Company
if not frappe.db.table_exists("Company"):
frappe.log_error("Company table not found", "Asset Categories Patch")
return
# Получаем первую компанию # Получаем первую компанию
company = frappe.get_all("Company", limit=1) company = frappe.get_all("Company", limit=1)
if not company: if not company:
frappe.throw("No company found in the system") frappe.log_error("No company found in the system", "Asset Categories Patch")
return
company_name = company[0].name company_name = company[0].name
@ -24,42 +32,63 @@ def create_asset_categories():
"Sənaye, tikinti, nəqliyyat, rabitə, ticarət-məişət xidməti və digər xüsusi təyinatlı torpaq sahələri" "Sənaye, tikinti, nəqliyyat, rabitə, ticarət-məişət xidməti və digər xüsusi təyinatlı torpaq sahələri"
] ]
# Находим нужные счета по account_name (только название, без кода) # Находим нужные счета
accumulated_depreciation = get_account_by_name( try:
"Tikililər üzrə yığılmış amortizasiya", accumulated_depreciation = get_account_by_name(
company_name "Tikililər üzrə yığılmış amortizasiya",
) company_name
depreciation_expense = get_account_by_name( )
"Amortizasiya xərci", depreciation_expense = get_account_by_name(
company_name "Amortizasiya xərci",
) company_name
fixed_asset = get_account_by_name( )
"Digər uzunmüddətli aktivlər", fixed_asset = get_account_by_name(
company_name "Digər uzunmüddətli aktivlər",
) company_name
)
except Exception as e:
frappe.log_error(f"Required accounts not found: {str(e)}", "Asset Categories Patch")
return
# Создаем категории активов # Создаем категории активов
created_count = 0
skipped_count = 0
for category_name in asset_categories: for category_name in asset_categories:
if not frappe.db.exists("Asset Category", category_name): try:
asset_category = frappe.new_doc("Asset Category") if not frappe.db.exists("Asset Category", category_name):
asset_category.asset_category_name = category_name asset_category = frappe.new_doc("Asset Category")
asset_category.enable_cwip_accounting = 0 asset_category.asset_category_name = category_name
asset_category.enable_cwip_accounting = 0
# Добавляем accounts # Добавляем accounts
asset_category.append("accounts", { asset_category.append("accounts", {
"company_name": company_name, "company_name": company_name,
"fixed_asset_account": fixed_asset, "fixed_asset_account": fixed_asset,
"accumulated_depreciation_account": accumulated_depreciation, "accumulated_depreciation_account": accumulated_depreciation,
"depreciation_expense_account": depreciation_expense, "depreciation_expense_account": depreciation_expense,
"capital_work_in_progress_account": "" "capital_work_in_progress_account": ""
}) })
asset_category.insert(ignore_permissions=True) asset_category.insert(ignore_permissions=True)
frappe.db.commit() created_count += 1
print(f"Created Asset Category: {category_name}") frappe.msgprint(f"Created Asset Category: {category_name}")
else: else:
print(f"Asset Category already exists: {category_name}") skipped_count += 1
except Exception as e:
frappe.log_error(
f"Failed to create Asset Category '{category_name}': {str(e)}",
"Asset Categories Patch"
)
# Коммитим все изменения разом
frappe.db.commit()
# Выводим итоговую информацию
message = f"Asset Categories Patch completed. Created: {created_count}, Skipped: {skipped_count}"
print(message)
frappe.msgprint(message)
def get_account_by_name(account_name, company): def get_account_by_name(account_name, company):
@ -74,25 +103,6 @@ def get_account_by_name(account_name, company):
) )
if not account: if not account:
frappe.throw(f"Account not found: {account_name} for company {company}") raise ValueError(f"Account not found: {account_name} for company {company}")
return account return account
def prevent_delete_system_asset_categories(doc, method):
"""Prevent deletion of system Asset Categories"""
system_categories = [
"Binalar, tikililər və qurğular",
"Maşınlar və avadanlıqlar",
"Yüksək texnologiyalar məhsulu olan hesablama texnikası",
"Nəqliyyat vasitələri",
"Digər əsas vəsaitlər",
"Düzən torpaqlar",
"Dağ torpaqlar",
"Orta və yüksək dağ torpaqlar",
"Şəhərin mövcud hüdudundan kənarda olan kənd təsərrüfatı təyinatlı torpaqlar",
"Sənaye, tikinti, nəqliyyat, rabitə, ticarət-məişət xidməti və digər xüsusi təyinatlı torpaq sahələri"
]
if doc.name in system_categories:
frappe.throw(f"System category '{doc.name}' cannot be deleted")

View File

@ -63,8 +63,8 @@ def after_migrate_combined():
show_item_tax_template_in_sales_invoice() show_item_tax_template_in_sales_invoice()
from jey_erp.custom.vat_calculations import patch_sales_documents from jey_erp.custom.vat_calculations import patch_sales_documents
patch_sales_documents() patch_sales_documents()
# from jey_erp.custom.create_asset_categories import create_asset_categories from jey_erp.custom.create_asset_categories import create_asset_categories
# create_asset_categories() create_asset_categories()
fixtures = [ fixtures = [

View File

@ -4,4 +4,3 @@
[post_model_sync] [post_model_sync]
# Patches added in this section will be executed after doctypes are migrated # Patches added in this section will be executed after doctypes are migrated
jey_erp.patches.v1_0.create_asset_categories

View File

@ -1,110 +0,0 @@
import frappe
def execute():
"""
Создает категории активов с настройками счетов
Этот патч выполняется только один раз
"""
# Проверка существования таблицы Company
if not frappe.db.table_exists("Company"):
frappe.log_error("Company table not found", "Asset Categories Patch")
return
# Получаем первую компанию
company = frappe.get_all("Company", limit=1)
if not company:
frappe.log_error("No company found in the system", "Asset Categories Patch")
return
company_name = company[0].name
# Список категорий активов
asset_categories = [
"Binalar, tikililər və qurğular",
"Maşınlar və avadanlıqlar",
"Yüksək texnologiyalar məhsulu olan hesablama texnikası",
"Nəqliyyat vasitələri",
"Digər əsas vəsaitlər",
"Düzən torpaqlar",
"Dağ torpaqlar",
"Orta və yüksək dağ torpaqlar",
"Şəhərin mövcud hüdudundan kənarda olan kənd təsərrüfatı təyinatlı torpaqlar",
"Sənaye, tikinti, nəqliyyat, rabitə, ticarət-məişət xidməti və digər xüsusi təyinatlı torpaq sahələri"
]
# Находим нужные счета
try:
accumulated_depreciation = get_account_by_name(
"Tikililər üzrə yığılmış amortizasiya",
company_name
)
depreciation_expense = get_account_by_name(
"Amortizasiya xərci",
company_name
)
fixed_asset = get_account_by_name(
"Digər uzunmüddətli aktivlər",
company_name
)
except Exception as e:
frappe.log_error(f"Required accounts not found: {str(e)}", "Asset Categories Patch")
return
# Создаем категории активов
created_count = 0
skipped_count = 0
for category_name in asset_categories:
try:
if not frappe.db.exists("Asset Category", category_name):
asset_category = frappe.new_doc("Asset Category")
asset_category.asset_category_name = category_name
asset_category.enable_cwip_accounting = 0
# Добавляем accounts
asset_category.append("accounts", {
"company_name": company_name,
"fixed_asset_account": fixed_asset,
"accumulated_depreciation_account": accumulated_depreciation,
"depreciation_expense_account": depreciation_expense,
"capital_work_in_progress_account": ""
})
asset_category.insert(ignore_permissions=True)
created_count += 1
frappe.msgprint(f"Created Asset Category: {category_name}")
else:
skipped_count += 1
except Exception as e:
frappe.log_error(
f"Failed to create Asset Category '{category_name}': {str(e)}",
"Asset Categories Patch"
)
# Коммитим все изменения разом
frappe.db.commit()
# Выводим итоговую информацию
message = f"Asset Categories Patch completed. Created: {created_count}, Skipped: {skipped_count}"
print(message)
frappe.msgprint(message)
def get_account_by_name(account_name, company):
"""Get account by account_name field"""
account = frappe.db.get_value(
"Account",
{
"account_name": account_name,
"company": company
},
"name"
)
if not account:
raise ValueError(f"Account not found: {account_name} for company {company}")
return account