changed land tax report

This commit is contained in:
Ali 2025-11-27 15:46:42 +04:00
parent a403b17ffb
commit c5c7dd8194
1 changed files with 87 additions and 19 deletions

View File

@ -4,6 +4,10 @@
import frappe
from frappe import _
from frappe.utils import flt
from taxes_az.taxes_az.doctype.land_tax_declaration.land_tax_declaration import (
calculate_agricultural_tax,
calculate_industrial_tax
)
def execute(filters=None):
@ -47,13 +51,15 @@ def get_data(filters):
full_article_name = tax_article_names_mapping[tax_article_name]
if full_article_name in tax_articles_mapping:
field_key = tax_articles_mapping[full_article_name]
asset_cost = flt(asset['total_asset_cost'])
# ИЗМЕНЕНИЕ: Рассчитываем налог по формуле
calculated_tax = calculate_tax_for_agricultural_asset(asset)
# Для статьи 207.8 применяем коэффициент 75%
if field_key == 'vm_207_8':
asset_cost = asset_cost * 0.75
calculated_tax = calculated_tax * 0.75
row[field_key] = asset_cost
row[field_key] = calculated_tax
# Проверяем industrial_tax_article
elif asset.get('industrial_tax_article'):
@ -62,13 +68,15 @@ def get_data(filters):
full_article_name = tax_article_names_mapping[tax_article_name]
if full_article_name in tax_articles_mapping:
field_key = tax_articles_mapping[full_article_name]
asset_cost = flt(asset['total_asset_cost'])
# ИЗМЕНЕНИЕ: Рассчитываем налог по формуле
calculated_tax = calculate_tax_for_industrial_asset(asset)
# Для статьи 207.8 применяем коэффициент 75%
if field_key == 'vm_207_8':
asset_cost = asset_cost * 0.75
calculated_tax = calculated_tax * 0.75
row[field_key] = asset_cost
row[field_key] = calculated_tax
# Добавляем строку только если есть tax_article
if asset.get('agricultural_tax_article') or asset.get('industrial_tax_article'):
@ -116,7 +124,18 @@ def get_assets(filters):
company,
agricultural_tax_article,
industrial_tax_article,
total_asset_cost
total_asset_cost,
agricultural_purpose,
cadastral_district_name,
cadastral_district_code,
quality_groups,
agricultural_land_purpose,
territorial_unit_name,
territorial_unit_code,
industrial_land_purpose,
mining_note,
tax_exempt_area,
area
FROM
`tabAsset`
{where_clause}
@ -196,3 +215,52 @@ def get_columns():
})
return columns
def calculate_tax_for_agricultural_asset(asset):
"""Рассчитывает налог для сельскохозяйственной земли"""
try:
# Определяем agricultural_purpose_name
agricultural_purpose_name = get_agricultural_purpose_name(asset.get('agricultural_purpose'))
# Вызываем функцию расчета из land_tax_declaration
result = calculate_agricultural_tax(
area_value=asset.get('area'),
cadastral_district_name=asset.get('cadastral_district_name'),
quality_groups=asset.get('quality_groups'),
agricultural_land_purpose=asset.get('agricultural_land_purpose'),
agricultural_purpose_name=agricultural_purpose_name
)
return result.get('tax_amount', 0) if isinstance(result, dict) else 0
except Exception as e:
frappe.log_error(f"Error calculating agricultural tax for asset {asset.get('name')}: {str(e)}")
return 0
def calculate_tax_for_industrial_asset(asset):
"""Рассчитывает налог для промышленной земли"""
try:
# Вызываем функцию расчета из land_tax_declaration
result = calculate_industrial_tax(
area_sqm=asset.get('area'),
territorial_unit_name=asset.get('territorial_unit_name'),
industrial_land_purpose=asset.get('industrial_land_purpose')
)
return result.get('tax_amount', 0) if isinstance(result, dict) else 0
except Exception as e:
frappe.log_error(f"Error calculating industrial tax for asset {asset.get('name')}: {str(e)}")
return 0
def get_agricultural_purpose_name(agricultural_purpose_id):
"""Получает название agricultural purpose по ID"""
if not agricultural_purpose_id:
return None
try:
purpose_doc = frappe.get_doc('Agricultural Purpose Type', agricultural_purpose_id)
return purpose_doc.purpose_name
except:
return None