From 4f69e9bc6ccf2e9f2973f74b80bb42b21dd4c1a4 Mon Sep 17 00:00:00 2001 From: Ali <010109ali@gmail.com> Date: Fri, 28 Nov 2025 15:59:45 +0400 Subject: [PATCH] tax exempt now in formula for land tax reprot --- .../report/land_tax_report/land_tax_report.py | 56 ++++++++++++++++++- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/taxes_az/taxes_az/report/land_tax_report/land_tax_report.py b/taxes_az/taxes_az/report/land_tax_report/land_tax_report.py index 5c2019b..87c7596 100644 --- a/taxes_az/taxes_az/report/land_tax_report/land_tax_report.py +++ b/taxes_az/taxes_az/report/land_tax_report/land_tax_report.py @@ -223,9 +223,16 @@ def calculate_tax_for_agricultural_asset(asset): # Определяем agricultural_purpose_name agricultural_purpose_name = get_agricultural_purpose_name(asset.get('agricultural_purpose')) + # Рассчитываем налогооблагаемую площадь + taxable_area = calculate_taxable_area(asset.get('area'), asset.get('tax_exempt_area')) + + # Если вся площадь освобождена от налогов, возвращаем 0 + if taxable_area <= 0: + return 0 + # Вызываем функцию расчета из land_tax_declaration result = calculate_agricultural_tax( - area_value=asset.get('area'), + area_value=taxable_area, cadastral_district_name=asset.get('cadastral_district_name'), quality_groups=asset.get('quality_groups'), agricultural_land_purpose=asset.get('agricultural_land_purpose'), @@ -241,9 +248,16 @@ def calculate_tax_for_agricultural_asset(asset): def calculate_tax_for_industrial_asset(asset): """Рассчитывает налог для промышленной земли""" try: + # Рассчитываем налогооблагаемую площадь + taxable_area = calculate_taxable_area(asset.get('area'), asset.get('tax_exempt_area')) + + # Если вся площадь освобождена от налогов, возвращаем 0 + if taxable_area <= 0: + return 0 + # Вызываем функцию расчета из land_tax_declaration result = calculate_industrial_tax( - area_sqm=asset.get('area'), + area_sqm=taxable_area, territorial_unit_name=asset.get('territorial_unit_name'), industrial_land_purpose=asset.get('industrial_land_purpose') ) @@ -263,4 +277,40 @@ def get_agricultural_purpose_name(agricultural_purpose_id): purpose_doc = frappe.get_doc('Agricultural Purpose Type', agricultural_purpose_id) return purpose_doc.purpose_name except: - return None \ No newline at end of file + return None + + +def calculate_taxable_area(total_area, tax_exempt_area): + """ + Рассчитывает налогооблагаемую площадь, вычитая освобожденную от налогов площадь. + + Args: + total_area: Общая площадь (float) + tax_exempt_area: Освобожденная от налогов площадь (строка или число) + + Returns: + float: Налогооблагаемая площадь (total_area - tax_exempt_area) + """ + # Если общая площадь не указана, возвращаем 0 + if not total_area: + return 0 + + total_area_float = flt(total_area) + + # Если нет освобожденной площади, возвращаем полную площадь + if not tax_exempt_area: + return total_area_float + + # Преобразуем tax_exempt_area в число (может быть строкой) + try: + exempt_area_float = flt(tax_exempt_area) + except (ValueError, TypeError): + # Если не удалось преобразовать, игнорируем освобожденную площадь + frappe.log_error(f"Invalid tax_exempt_area value: {tax_exempt_area}. Using full area for tax calculation.") + return total_area_float + + # Рассчитываем налогооблагаемую площадь + taxable_area = total_area_float - exempt_area_float + + # Возвращаем 0, если результат отрицательный + return max(0, taxable_area) \ No newline at end of file