added test logs to land tax

This commit is contained in:
Ali 2025-10-23 13:30:17 +04:00
parent f665c21017
commit 7ffc5f327d
1 changed files with 138 additions and 131 deletions

View File

@ -10,13 +10,13 @@ class Landtaxdeclaration(Document):
def get_doctype_fields_info(): def get_doctype_fields_info():
"""Gets information about fields of əlavə_1 table and Asset""" """Gets information about fields of əlavə_1 table and Asset"""
frappe.log_error("=== get_doctype_fields_info: Начало ===", "Land Tax Debug") frappe.log_error("Начало получения метаданных полей", "Fields Info Start")
result = {} result = {}
try: try:
# Get metadata for əlavə_1 table # Get metadata for əlavə_1 table
frappe.log_error("Получение метаданных для Land tax declaration Elave 1", "Land Tax Debug") frappe.log_error("Получение метаданных для Land tax declaration Elave 1", "Elave1 Metadata")
elave1_meta = frappe.get_meta('Land tax declaration Elave 1') elave1_meta = frappe.get_meta('Land tax declaration Elave 1')
result['elave1_fields'] = [] result['elave1_fields'] = []
@ -31,10 +31,10 @@ def get_doctype_fields_info():
} }
result['elave1_fields'].append(field_info) result['elave1_fields'].append(field_info)
frappe.log_error(f"Elave 1 - найдено полей: {len(result['elave1_fields'])}", "Land Tax Debug") frappe.log_error(f"Найдено полей в Elave 1: {len(result['elave1_fields'])}", "Elave1 Fields Count")
# Get metadata for əlavə_2 table # Get metadata for əlavə_2 table
frappe.log_error("Получение метаданных для Land tax declaration Elave 2", "Land Tax Debug") frappe.log_error("Получение метаданных для Land tax declaration Elave 2", "Elave2 Metadata")
elave2_meta = frappe.get_meta('Land tax declaration Elave 2') elave2_meta = frappe.get_meta('Land tax declaration Elave 2')
result['elave2_fields'] = [] result['elave2_fields'] = []
@ -49,10 +49,10 @@ def get_doctype_fields_info():
} }
result['elave2_fields'].append(field_info) result['elave2_fields'].append(field_info)
frappe.log_error(f"Elave 2 - найдено полей: {len(result['elave2_fields'])}", "Land Tax Debug") frappe.log_error(f"Найдено полей в Elave 2: {len(result['elave2_fields'])}", "Elave2 Fields Count")
# Get metadata for Asset # Get metadata for Asset
frappe.log_error("Получение метаданных для Asset", "Land Tax Debug") frappe.log_error("Получение метаданных для Asset", "Asset Metadata")
asset_meta = frappe.get_meta('Asset') asset_meta = frappe.get_meta('Asset')
result['asset_fields'] = [] result['asset_fields'] = []
@ -67,13 +67,13 @@ def get_doctype_fields_info():
} }
result['asset_fields'].append(field_info) result['asset_fields'].append(field_info)
frappe.log_error(f"Asset - найдено полей: {len(result['asset_fields'])}", "Land Tax Debug") frappe.log_error(f"Найдено полей в Asset: {len(result['asset_fields'])}", "Asset Fields Count")
frappe.log_error("=== get_doctype_fields_info: Успешно завершено ===", "Land Tax Debug") frappe.log_error("Метаданные успешно получены", "Fields Info Success")
return result return result
except Exception as e: except Exception as e:
frappe.log_error(f"Ошибка в get_doctype_fields_info: {str(e)}\n{frappe.get_traceback()}", "Land Tax Error") frappe.log_error(f"Ошибка в get_doctype_fields_info: {str(e)}\n{frappe.get_traceback()}", "Fields Info Error")
return {'error': str(e)} return {'error': str(e)}
# =============================== # ===============================
@ -86,42 +86,47 @@ def calculate_agricultural_tax(hectare, cadastral_district_name, quality_groups,
Calculates tax for agricultural land Calculates tax for agricultural land
Formula: hectare × score × markup Formula: hectare × score × markup
""" """
frappe.log_error( params_info = (
f"=== calculate_agricultural_tax: Начало ===\n" f"Параметры расчета:\n"
f"Параметры:\n"
f" - hectare: {hectare}\n" f" - hectare: {hectare}\n"
f" - cadastral_district_name: {cadastral_district_name}\n" f" - cadastral_district_name: {cadastral_district_name}\n"
f" - quality_groups: {quality_groups}\n" f" - quality_groups: {quality_groups}\n"
f" - agricultural_land_purpose: {agricultural_land_purpose}", f" - agricultural_land_purpose: {agricultural_land_purpose}"
"Land Tax Debug"
) )
frappe.log_error(params_info, "Agri Tax Calc Start")
try: try:
# Input validation # Input validation
if not hectare or not cadastral_district_name or not quality_groups or not agricultural_land_purpose: if not hectare or not cadastral_district_name or not quality_groups or not agricultural_land_purpose:
error_msg = "Не все поля заполнены для расчета" error_msg = "Не все поля заполнены для расчета"
frappe.log_error(f"❌ Валидация: {error_msg}", "Land Tax Error") frappe.log_error(error_msg, "Agri Tax Validation")
frappe.throw(error_msg) frappe.throw(error_msg)
# Get score from JSON file # Get score from JSON file
frappe.log_error(f"Получение балла для района '{cadastral_district_name}', группа '{quality_groups}'", "Land Tax Debug") frappe.log_error(
f"Получение балла для района '{cadastral_district_name}', группа '{quality_groups}'",
"Get Cadastral Score"
)
score = get_cadastral_score(cadastral_district_name, quality_groups) score = get_cadastral_score(cadastral_district_name, quality_groups)
frappe.log_error(f"✅ Получен балл: {score}", "Land Tax Debug") frappe.log_error(f"Получен балл: {score}", "Score Retrieved")
# Determine markup # Determine markup
frappe.log_error(f"Получение коэффициента для назначения '{agricultural_land_purpose}'", "Land Tax Debug") frappe.log_error(
f"Получение коэффициента для назначения '{agricultural_land_purpose}'",
"Get Markup Coeff"
)
markup = get_markup_coefficient(agricultural_land_purpose) markup = get_markup_coefficient(agricultural_land_purpose)
frappe.log_error(f"✅ Получен коэффициент: {markup}", "Land Tax Debug") frappe.log_error(f"Получен коэффициент: {markup}", "Markup Retrieved")
# Calculate using formula # Calculate using formula
result = float(hectare) * score * markup result = float(hectare) * score * markup
frappe.log_error( calc_summary = (
f"=== Расчет завершен ===\n" f"Расчет завершен:\n"
f"Формула: {hectare} × {score} × {markup} = {result}\n" f"Формула: {hectare} × {score} × {markup} = {result}\n"
f"Результат: {result} манат", f"Результат: {result} манат"
"Land Tax Debug"
) )
frappe.log_error(calc_summary, "Agri Tax Calc Done")
return { return {
'tax_amount': result, 'tax_amount': result,
@ -134,77 +139,71 @@ def calculate_agricultural_tax(hectare, cadastral_district_name, quality_groups,
} }
except Exception as e: except Exception as e:
frappe.log_error( frappe.log_error(f"Ошибка: {str(e)}\n{frappe.get_traceback()}", "Agri Tax Calc Error")
f"❌ Ошибка в calculate_agricultural_tax: {str(e)}\n{frappe.get_traceback()}",
"Land Tax Error"
)
frappe.throw(f"Ошибка при расчете: {str(e)}") frappe.throw(f"Ошибка при расчете: {str(e)}")
def get_cadastral_score(cadastral_district_name, quality_group): def get_cadastral_score(cadastral_district_name, quality_group):
""" """
Extracts score from JSON file based on cadastral district name and quality group Extracts score from JSON file based on cadastral district name and quality group
""" """
frappe.log_error( search_info = (
f"=== get_cadastral_score ===\n" f"Поиск балла:\n"
f"Район: {cadastral_district_name}\n" f"Район: {cadastral_district_name}\n"
f"Группа качества: {quality_group}", f"Группа качества: {quality_group}"
"Land Tax Debug"
) )
frappe.log_error(search_info, "Cadastral Score Search")
try: try:
# Path to JSON file # Path to JSON file
json_file_path = frappe.get_app_path('taxes_az', 'data', 'cadastral_points_data.json') json_file_path = frappe.get_app_path('taxes_az', 'data', 'cadastral_points_data.json')
frappe.log_error(f"Путь к JSON: {json_file_path}", "Land Tax Debug") frappe.log_error(f"Путь к JSON: {json_file_path}", "JSON Path")
# Read JSON file # Read JSON file
with open(json_file_path, 'r', encoding='utf-8') as file: with open(json_file_path, 'r', encoding='utf-8') as file:
data = json.load(file) data = json.load(file)
frappe.log_error(f"JSON файл успешно загружен, всего регионов: {len(data.get('cadastral_regions', []))}", "Land Tax Debug") regions_count = len(data.get('cadastral_regions', []))
frappe.log_error(f"JSON загружен, регионов: {regions_count}", "JSON Loaded")
# Find corresponding region # Find corresponding region
for region in data.get('cadastral_regions', []): for region in data.get('cadastral_regions', []):
if region.get('region_name') == cadastral_district_name: if region.get('region_name') == cadastral_district_name:
frappe.log_error(f"✅ Найден регион: {cadastral_district_name}", "Land Tax Debug") frappe.log_error(f"Регион найден: {cadastral_district_name}", "Region Found")
# Get score for specified quality group # Get score for specified quality group
quality_groups = region.get('quality_groups', {}) quality_groups = region.get('quality_groups', {})
score = quality_groups.get(quality_group) score = quality_groups.get(quality_group)
frappe.log_error( score_info = (
f"Группы качества в регионе: {list(quality_groups.keys())}\n" f"Группы качества в регионе: {list(quality_groups.keys())}\n"
f"Балл для группы '{quality_group}': {score}", f"Балл для группы '{quality_group}': {score}"
"Land Tax Debug"
) )
frappe.log_error(score_info, "Score Found")
# If score is null or not found, return 0 # If score is null or not found, return 0
return score if score is not None else 0 return score if score is not None else 0
# If region not found # If region not found
error_msg = f"Кадастровый район '{cadastral_district_name}' не найден в базе данных" error_msg = f"Кадастровый район '{cadastral_district_name}' не найден в базе данных"
frappe.log_error(f"{error_msg}", "Land Tax Error") frappe.log_error(error_msg, "Region Not Found")
frappe.throw(error_msg) frappe.throw(error_msg)
except FileNotFoundError: except FileNotFoundError:
error_msg = "Файл кадастровых данных не найден. Обратитесь к администратору" error_msg = f"Файл не найден: {json_file_path}"
frappe.log_error(f"{error_msg}\nПуть: {json_file_path}", "Land Tax Error") frappe.log_error(error_msg, "JSON File Not Found")
frappe.throw(error_msg) frappe.throw("Файл кадастровых данных не найден. Обратитесь к администратору")
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
error_msg = f"Ошибка чтения файла кадастровых данных: {str(e)}" frappe.log_error(f"Ошибка парсинга JSON: {str(e)}", "JSON Parse Error")
frappe.log_error(f"{error_msg}", "Land Tax Error")
frappe.throw("Ошибка чтения файла кадастровых данных") frappe.throw("Ошибка чтения файла кадастровых данных")
except Exception as e: except Exception as e:
frappe.log_error( frappe.log_error(f"Ошибка: {str(e)}\n{frappe.get_traceback()}", "Cadastral Score Error")
f"❌ Ошибка получения кадастрового балла: {str(e)}\n{frappe.get_traceback()}",
"Land Tax Error"
)
frappe.throw(f"Ошибка получения кадастрового балла: {str(e)}") frappe.throw(f"Ошибка получения кадастрового балла: {str(e)}")
def get_markup_coefficient(agricultural_land_purpose): def get_markup_coefficient(agricultural_land_purpose):
""" """
Determines markup coefficient based on land use purpose Determines markup coefficient based on land use purpose
""" """
frappe.log_error(f"=== get_markup_coefficient ===\nНазначение: {agricultural_land_purpose}", "Land Tax Debug") frappe.log_error(f"Назначение: {agricultural_land_purpose}", "Get Markup Start")
markup_map = { markup_map = {
"Əkin, dinc və çoxillik əkmələr": 0.06, "Əkin, dinc və çoxillik əkmələr": 0.06,
@ -214,14 +213,12 @@ def get_markup_coefficient(agricultural_land_purpose):
coefficient = markup_map.get(agricultural_land_purpose) coefficient = markup_map.get(agricultural_land_purpose)
if coefficient is None: if coefficient is None:
error_msg = f"Неизвестный тип назначения земли: {agricultural_land_purpose}" available = list(markup_map.keys())
frappe.log_error( error_msg = f"Неизвестный тип: {agricultural_land_purpose}\nДоступные: {available}"
f"{error_msg}\nДоступные типы: {list(markup_map.keys())}", frappe.log_error(error_msg, "Unknown Purpose Type")
"Land Tax Error" frappe.throw(f"Неизвестный тип назначения земли: {agricultural_land_purpose}")
)
frappe.throw(error_msg)
frappe.log_error(f"Коэффициент: {coefficient}", "Land Tax Debug") frappe.log_error(f"Коэффициент: {coefficient}", "Markup Found")
return coefficient return coefficient
# =============================== # ===============================
@ -234,41 +231,43 @@ def calculate_industrial_tax(hectare, territorial_unit_name, industrial_land_pur
Calculates tax for industrial land Calculates tax for industrial land
Formula: (area_in_sqm ÷ 100) × score (progressive system) Formula: (area_in_sqm ÷ 100) × score (progressive system)
""" """
frappe.log_error( params_info = (
f"=== calculate_industrial_tax: Начало ===\n" f"Параметры расчета:\n"
f"Параметры:\n"
f" - hectare (площадь в м²): {hectare}\n" f" - hectare (площадь в м²): {hectare}\n"
f" - territorial_unit_name: {territorial_unit_name}\n" f" - territorial_unit_name: {territorial_unit_name}\n"
f" - industrial_land_purpose: {industrial_land_purpose}", f" - industrial_land_purpose: {industrial_land_purpose}"
"Land Tax Debug"
) )
frappe.log_error(params_info, "Ind Tax Calc Start")
try: try:
# Input validation # Input validation
if not hectare or not territorial_unit_name or not industrial_land_purpose: if not hectare or not territorial_unit_name or not industrial_land_purpose:
error_msg = "Не все поля заполнены для расчета" error_msg = "Не все поля заполнены для расчета"
frappe.log_error(f"❌ Валидация: {error_msg}", "Land Tax Error") frappe.log_error(error_msg, "Ind Tax Validation")
frappe.throw(error_msg) frappe.throw(error_msg)
# Use value as is - this is square meters # Use value as is - this is square meters
area_sqm = float(hectare) area_sqm = float(hectare)
frappe.log_error(f"Площадь для расчета: {area_sqm} м²", "Land Tax Debug") frappe.log_error(f"Площадь для расчета: {area_sqm} м²", "Area Converted")
# Get scores from JSON file # Get scores from JSON file
frappe.log_error(f"Получение баллов для '{territorial_unit_name}', назначение '{industrial_land_purpose}'", "Land Tax Debug") frappe.log_error(
f"Получение баллов для '{territorial_unit_name}', назначение '{industrial_land_purpose}'",
"Get Ind Scores"
)
score_data = get_industrial_land_scores(territorial_unit_name, industrial_land_purpose) score_data = get_industrial_land_scores(territorial_unit_name, industrial_land_purpose)
frappe.log_error(f"✅ Получены баллы: {score_data}", "Land Tax Debug") frappe.log_error(f"Получены баллы: {score_data}", "Scores Retrieved")
# Calculate using progressive formula # Calculate using progressive formula
frappe.log_error("Начало расчета по прогрессивной формуле", "Land Tax Debug") frappe.log_error("Начало расчета по прогрессивной формуле", "Progressive Calc")
calculation_result = calculate_industrial_land_formula(area_sqm, score_data) calculation_result = calculate_industrial_land_formula(area_sqm, score_data)
frappe.log_error( calc_summary = (
f"=== Расчет завершен ===\n" f"Расчет завершен:\n"
f"Формула: {calculation_result['formula']}\n" f"Формула: {calculation_result['formula']}\n"
f"Результат: {calculation_result['total']} манат", f"Результат: {calculation_result['total']} манат"
"Land Tax Debug"
) )
frappe.log_error(calc_summary, "Ind Tax Calc Done")
return { return {
'tax_amount': calculation_result['total'], 'tax_amount': calculation_result['total'],
@ -276,38 +275,36 @@ def calculate_industrial_tax(hectare, territorial_unit_name, industrial_land_pur
} }
except Exception as e: except Exception as e:
frappe.log_error( frappe.log_error(f"Ошибка: {str(e)}\n{frappe.get_traceback()}", "Ind Tax Calc Error")
f"❌ Ошибка в calculate_industrial_tax: {str(e)}\n{frappe.get_traceback()}",
"Land Tax Error"
)
frappe.throw(f"Ошибка при расчете: {str(e)}") frappe.throw(f"Ошибка при расчете: {str(e)}")
def get_industrial_land_scores(territorial_unit_name, industrial_land_purpose): def get_industrial_land_scores(territorial_unit_name, industrial_land_purpose):
""" """
Extracts scores from JSON file for industrial land Extracts scores from JSON file for industrial land
""" """
frappe.log_error( search_info = (
f"=== get_industrial_land_scores ===\n" f"Поиск баллов:\n"
f"Территория: {territorial_unit_name}\n" f"Территория: {territorial_unit_name}\n"
f"Назначение: {industrial_land_purpose}", f"Назначение: {industrial_land_purpose}"
"Land Tax Debug"
) )
frappe.log_error(search_info, "Ind Scores Search")
try: try:
# Path to JSON file # Path to JSON file
json_file_path = frappe.get_app_path('taxes_az', 'data', 'industrial_land_data.json') json_file_path = frappe.get_app_path('taxes_az', 'data', 'industrial_land_data.json')
frappe.log_error(f"Путь к JSON: {json_file_path}", "Land Tax Debug") frappe.log_error(f"Путь к JSON: {json_file_path}", "JSON Path")
# Read JSON file # Read JSON file
with open(json_file_path, 'r', encoding='utf-8') as file: with open(json_file_path, 'r', encoding='utf-8') as file:
data = json.load(file) data = json.load(file)
frappe.log_error(f"JSON файл успешно загружен, всего регионов: {len(data.get('industrial_land_regions', []))}", "Land Tax Debug") regions_count = len(data.get('industrial_land_regions', []))
frappe.log_error(f"JSON загружен, регионов: {regions_count}", "JSON Loaded")
# Find corresponding region # Find corresponding region
for region in data.get('industrial_land_regions', []): for region in data.get('industrial_land_regions', []):
if region.get('settlement_name') == territorial_unit_name: if region.get('settlement_name') == territorial_unit_name:
frappe.log_error(f"✅ Найден регион: {territorial_unit_name}", "Land Tax Debug") frappe.log_error(f"Регион найден: {territorial_unit_name}", "Region Found")
# Get scores for specified land purpose # Get scores for specified land purpose
land_purpose_rates = region.get('land_purpose_rates', {}) land_purpose_rates = region.get('land_purpose_rates', {})
@ -318,41 +315,44 @@ def get_industrial_land_scores(territorial_unit_name, industrial_land_purpose):
'up_to_10000': purpose_rates.get('up_to_10000_sqm', 0), 'up_to_10000': purpose_rates.get('up_to_10000_sqm', 0),
'above_10000': purpose_rates.get('above_10000_sqm', 0) 'above_10000': purpose_rates.get('above_10000_sqm', 0)
} }
frappe.log_error(f"Получены ставки: {result}", "Land Tax Debug") frappe.log_error(f"Получены ставки: {result}", "Rates Found")
return result return result
else: else:
frappe.log_error(f"⚠️ Назначение '{industrial_land_purpose}' не найдено в регионе", "Land Tax Debug") frappe.log_error(
f"Назначение '{industrial_land_purpose}' не найдено в регионе",
"Purpose Not Found"
)
# If region or purpose not found # If region or purpose not found
error_msg = f"Данные не найдены для территории '{territorial_unit_name}' и назначения '{industrial_land_purpose}'" error_msg = (
frappe.log_error(f"{error_msg}", "Land Tax Error") f"Данные не найдены:\n"
frappe.throw(error_msg) f"Территория: '{territorial_unit_name}'\n"
f"Назначение: '{industrial_land_purpose}'"
)
frappe.log_error(error_msg, "Data Not Found")
frappe.throw(f"Данные не найдены для территории '{territorial_unit_name}' и назначения '{industrial_land_purpose}'")
except FileNotFoundError: except FileNotFoundError:
error_msg = "Файл данных промышленных земель не найден. Обратитесь к администратору" error_msg = f"Файл не найден: {json_file_path}"
frappe.log_error(f"{error_msg}\nПуть: {json_file_path}", "Land Tax Error") frappe.log_error(error_msg, "JSON File Not Found")
frappe.throw(error_msg) frappe.throw("Файл данных промышленных земель не найден. Обратитесь к администратору")
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
error_msg = f"Ошибка чтения файла промышленных земель: {str(e)}" frappe.log_error(f"Ошибка парсинга JSON: {str(e)}", "JSON Parse Error")
frappe.log_error(f"{error_msg}", "Land Tax Error")
frappe.throw("Ошибка чтения файла данных промышленных земель") frappe.throw("Ошибка чтения файла данных промышленных земель")
except Exception as e: except Exception as e:
frappe.log_error( frappe.log_error(f"Ошибка: {str(e)}\n{frappe.get_traceback()}", "Ind Scores Error")
f"❌ Ошибка получения баллов промышленных земель: {str(e)}\n{frappe.get_traceback()}",
"Land Tax Error"
)
frappe.throw(f"Ошибка получения баллов промышленных земель: {str(e)}") frappe.throw(f"Ошибка получения баллов промышленных земель: {str(e)}")
def calculate_industrial_land_formula(area_sqm, score_data): def calculate_industrial_land_formula(area_sqm, score_data):
""" """
Calculates cost using progressive formula for industrial land Calculates cost using progressive formula for industrial land
""" """
frappe.log_error( calc_info = (
f"=== calculate_industrial_land_formula ===\n" f"Прогрессивный расчет:\n"
f"Площадь: {area_sqm} м²\n" f"Площадь: {area_sqm} м²\n"
f"Баллы: {score_data}", f"Баллы: {score_data}"
"Land Tax Debug"
) )
frappe.log_error(calc_info, "Formula Calc Start")
up_to_10000_score = score_data['up_to_10000'] up_to_10000_score = score_data['up_to_10000']
above_10000_score = score_data['above_10000'] above_10000_score = score_data['above_10000']
@ -375,9 +375,8 @@ def calculate_industrial_land_formula(area_sqm, score_data):
formula_text = f"{area_sqm} ÷ 100 × {up_to_10000_score} = {total}" formula_text = f"{area_sqm} ÷ 100 × {up_to_10000_score} = {total}"
frappe.log_error( frappe.log_error(
f"Простой расчет (площадь ≤ 10000):\n" f"Простой расчет (площадь ≤ 10000):\n{formula_text}",
f" {formula_text}", "Simple Formula"
"Land Tax Debug"
) )
else: else:
@ -405,13 +404,13 @@ def calculate_industrial_land_formula(area_sqm, score_data):
total = part1_result + part2_result total = part1_result + part2_result
formula_text = f"(10000 ÷ 100 × {up_to_10000_score}) + ({remaining_area} ÷ 100 × {above_10000_score}) = {part1_result} + {part2_result} = {total}" formula_text = f"(10000 ÷ 100 × {up_to_10000_score}) + ({remaining_area} ÷ 100 × {above_10000_score}) = {part1_result} + {part2_result} = {total}"
frappe.log_error( progressive_info = (
f"Прогрессивный расчет (площадь > 10000):\n" f"Прогрессивный расчет (площадь > 10000):\n"
f" Часть 1 (до 10000): {calculation_parts[0]['formula']}\n" f" Часть 1 (до 10000): {calculation_parts[0]['formula']}\n"
f" Часть 2 (свыше 10000): {calculation_parts[1]['formula']}\n" f" Часть 2 (свыше 10000): {calculation_parts[1]['formula']}\n"
f" Итого: {total}", f" Итого: {total}"
"Land Tax Debug"
) )
frappe.log_error(progressive_info, "Progressive Formula")
result = { result = {
'total': total, 'total': total,
@ -421,7 +420,7 @@ def calculate_industrial_land_formula(area_sqm, score_data):
'scores_used': score_data 'scores_used': score_data
} }
frappe.log_error(f"Расчет завершен, результат: {result}", "Land Tax Debug") frappe.log_error(f"Расчет завершен, результат: {result}", "Formula Calc Done")
return result return result
@frappe.whitelist() @frappe.whitelist()
@ -429,17 +428,17 @@ def get_assets_for_year(asset_type, year):
""" """
Gets assets filtered by type and purchase year Gets assets filtered by type and purchase year
""" """
frappe.log_error( search_info = (
f"=== get_assets_for_year: Начало ===\n" f"Поиск активов:\n"
f"Тип актива: {asset_type}\n" f"Тип актива: {asset_type}\n"
f"Год: {year}", f"Год: {year}"
"Land Tax Debug"
) )
frappe.log_error(search_info, "Get Assets Start")
try: try:
# Convert year to int for comparison # Convert year to int for comparison
target_year = int(year) target_year = int(year)
frappe.log_error(f"Целевой год (int): {target_year}", "Land Tax Debug") frappe.log_error(f"Целевой год (int): {target_year}", "Year Converted")
# Build filters # Build filters
filters = { filters = {
@ -447,7 +446,7 @@ def get_assets_for_year(asset_type, year):
'custom_asset_type': asset_type 'custom_asset_type': asset_type
} }
frappe.log_error(f"Фильтры для поиска: {filters}", "Land Tax Debug") frappe.log_error(f"Фильтры: {filters}", "Filters Set")
# Get appropriate fields based on asset type # Get appropriate fields based on asset type
if asset_type == 'Kənd təsərrüfatı təyinatlı torpaq sahələri': if asset_type == 'Kənd təsərrüfatı təyinatlı torpaq sahələri':
@ -462,7 +461,7 @@ def get_assets_for_year(asset_type, year):
'hectare', 'hectare',
'purchase_date' 'purchase_date'
] ]
frappe.log_error("Тип: Сельскохозяйственные земли", "Land Tax Debug") asset_type_short = "Сельхоз земли"
else: # Industrial assets else: # Industrial assets
fields = [ fields = [
'name', 'name',
@ -474,17 +473,24 @@ def get_assets_for_year(asset_type, year):
'hectare', 'hectare',
'purchase_date' 'purchase_date'
] ]
frappe.log_error("Тип: Промышленные земли", "Land Tax Debug") asset_type_short = "Промышленные земли"
frappe.log_error(f"Поля для выборки: {fields}", "Land Tax Debug") fields_info = (
f"Тип: {asset_type_short}\n"
f"Поля для выборки:\n" + "\n".join([f" - {f}" for f in fields])
)
frappe.log_error(fields_info, "Fields Selected")
# Get all assets of the specified type # Get all assets of the specified type
frappe.log_error("Выполнение запроса к базе данных...", "Land Tax Debug") frappe.log_error("Выполнение запроса к БД...", "DB Query Start")
assets = frappe.get_list('Asset', filters=filters, fields=fields) assets = frappe.get_list('Asset', filters=filters, fields=fields)
frappe.log_error(f"Получено активов из БД: {len(assets)}", "Land Tax Debug") frappe.log_error(f"Получено активов из БД: {len(assets)}", "DB Query Done")
# Filter by purchase_date year # Filter by purchase_date year
filtered_assets = [] filtered_assets = []
skipped_no_date = 0
skipped_wrong_year = 0
for asset in assets: for asset in assets:
if asset.get('purchase_date'): if asset.get('purchase_date'):
purchase_year = asset['purchase_date'].year purchase_year = asset['purchase_date'].year
@ -492,32 +498,33 @@ def get_assets_for_year(asset_type, year):
if purchase_year == target_year: if purchase_year == target_year:
filtered_assets.append(asset) filtered_assets.append(asset)
frappe.log_error( frappe.log_error(
f"Актив подходит: {asset['name']} (дата покупки: {asset['purchase_date']})", f"Актив подходит: {asset['name']} (дата: {asset['purchase_date']})",
"Land Tax Debug" "Asset Matched"
) )
else: else:
skipped_wrong_year += 1
frappe.log_error( frappe.log_error(
f"⏭️ Актив пропущен: {asset['name']} (год покупки: {purchase_year}, нужен {target_year})", f"Актив пропущен: {asset['name']} (год: {purchase_year}, нужен {target_year})",
"Land Tax Debug" "Asset Skipped"
) )
else: else:
skipped_no_date += 1
frappe.log_error( frappe.log_error(
f"⚠️ Актив без даты покупки: {asset['name']} - пропущен", f"Актив без даты: {asset['name']}",
"Land Tax Debug" "Asset No Date"
) )
frappe.log_error( summary = (
f"=== get_assets_for_year: Завершено ===\n" f"Результаты фильтрации:\n"
f"Всего активов из БД: {len(assets)}\n" f"Всего из БД: {len(assets)}\n"
f"Отфильтровано по году {target_year}: {len(filtered_assets)}", f"Подходят по году {target_year}: {len(filtered_assets)}\n"
"Land Tax Debug" f"Пропущено (другой год): {skipped_wrong_year}\n"
f"Пропущено (нет даты): {skipped_no_date}"
) )
frappe.log_error(summary, "Get Assets Done")
return filtered_assets return filtered_assets
except Exception as e: except Exception as e:
frappe.log_error( frappe.log_error(f"Ошибка: {str(e)}\n{frappe.get_traceback()}", "Get Assets Error")
f"❌ Ошибка в get_assets_for_year: {str(e)}\n{frappe.get_traceback()}",
"Land Tax Error"
)
return [] return []