diff --git a/taxes_az/taxes_az/doctype/land_tax_declaration/land_tax_declaration.js b/taxes_az/taxes_az/doctype/land_tax_declaration/land_tax_declaration.js index df77f5d..aeb8f7d 100644 --- a/taxes_az/taxes_az/doctype/land_tax_declaration/land_tax_declaration.js +++ b/taxes_az/taxes_az/doctype/land_tax_declaration/land_tax_declaration.js @@ -82,7 +82,6 @@ function process_agricultural_assets_silent(frm, table_fieldname, assets, resolv unique_purposes.forEach(purpose_id => { console.log(`Загрузка данных для назначения ID: "${purpose_id}"`); - // ИСПРАВЛЕНО: Используем frappe.client.get и ищем по name (ID) frappe.call({ method: 'frappe.client.get', args: { @@ -228,7 +227,6 @@ function create_agricultural_row_with_calculation_silent(frm, table_fieldname, a fill_agricultural_row_fields(row, asset, agricultural_purposes, total_area, group_info); console.log('Поля строки заполнены:', row); - // ИСПРАВЛЕНО: Передаем agricultural_purposes в функцию расчета calculate_agricultural_tax_for_row_silent(row, asset, total_area, group_info, callback, agricultural_purposes); } @@ -275,7 +273,6 @@ function fill_agricultural_row_fields(row, asset, agricultural_purposes, total_a if (total_area > 0) { row.torpaqsahəsi6001kodlarüzrəkvmetrlə6002kodlarüzrəhektarlaümumi = total_area; - // ИСПРАВЛЕНО: Определяем единицу измерения из purpose_name let unit = 'единиц'; if (asset.agricultural_purpose && agricultural_purposes[asset.agricultural_purpose]) { let purpose_name = agricultural_purposes[asset.agricultural_purpose].purpose_name; @@ -292,7 +289,6 @@ function fill_agricultural_row_fields(row, asset, agricultural_purposes, total_a function calculate_agricultural_tax_for_row_silent(row, asset, total_area, group_info, callback, agricultural_purposes) { console.log('=== calculate_agricultural_tax_for_row_silent ==='); - // ИСПРАВЛЕНО: Получаем purpose_name из agricultural_purposes let agricultural_purpose_name = null; if (asset.agricultural_purpose && agricultural_purposes && agricultural_purposes[asset.agricultural_purpose]) { agricultural_purpose_name = agricultural_purposes[asset.agricultural_purpose].purpose_name; @@ -319,7 +315,7 @@ function calculate_agricultural_tax_for_row_silent(row, asset, total_area, group cadastral_district_name: asset.cadastral_district_name, quality_groups: asset.quality_groups, agricultural_land_purpose: asset.agricultural_land_purpose, - agricultural_purpose_name: agricultural_purpose_name // ИСПРАВЛЕНО: Теперь это текст + agricultural_purpose_name: agricultural_purpose_name }, callback: function(response) { console.log('Результат расчета налога:', response); @@ -412,6 +408,7 @@ function group_and_create_industrial_rows_silent(frm, table_fieldname, assets, r grouped_assets[group_key] = { asset: asset, total_area: 0, + total_tax_exempt_area: 0, // ← ДОБАВЛЕНО count: 0, asset_names: [] }; @@ -419,6 +416,7 @@ function group_and_create_industrial_rows_silent(frm, table_fieldname, assets, r } grouped_assets[group_key].total_area += (asset.area || 0); + grouped_assets[group_key].total_tax_exempt_area += (asset.tax_exempt_area || 0); // ← ДОБАВЛЕНО grouped_assets[group_key].count += 1; grouped_assets[group_key].asset_names.push(asset.name); }); @@ -431,6 +429,7 @@ function group_and_create_industrial_rows_silent(frm, table_fieldname, assets, r console.log(`Группа "${key}":`, { количество_активов: group.count, общая_площадь: group.total_area, + tax_exempt_area: group.total_tax_exempt_area, // ← ДОБАВЛЕНО активы: group.asset_names }); }); @@ -473,6 +472,7 @@ function create_industrial_group_key(asset) { function create_industrial_row_with_calculation_silent(frm, table_fieldname, asset, total_area, group_info, callback) { console.log('=== create_industrial_row_with_calculation_silent ==='); console.log('Актив:', asset.name, 'Общая площадь:', total_area, 'кв.м'); + console.log('Tax-exempt площадь:', group_info.total_tax_exempt_area, 'кв.м'); // ← ДОБАВЛЕНО let row = frm.add_child(table_fieldname); console.log('Строка добавлена в таблицу'); @@ -518,6 +518,12 @@ function fill_industrial_row_fields(row, asset, total_area, group_info) { row.torpaqsahəsikvmetrləümumisahə = total_area; console.log('Общая площадь:', total_area, 'м²'); } + + // ← ДОБАВЛЕНО: Заполнение tax_exempt_area + if (group_info.total_tax_exempt_area > 0) { + row.torpaqsahəsikvmetrləocümlədənvergiyəcəlbolunmayansahə = group_info.total_tax_exempt_area; + console.log('Tax-exempt площадь:', group_info.total_tax_exempt_area, 'м²'); + } } function calculate_industrial_tax_for_row_silent(row, asset, total_area, group_info, callback) { diff --git a/taxes_az/taxes_az/doctype/land_tax_declaration/land_tax_declaration.py b/taxes_az/taxes_az/doctype/land_tax_declaration/land_tax_declaration.py index cdd9da7..bbe726a 100644 --- a/taxes_az/taxes_az/doctype/land_tax_declaration/land_tax_declaration.py +++ b/taxes_az/taxes_az/doctype/land_tax_declaration/land_tax_declaration.py @@ -468,7 +468,7 @@ def get_assets_for_year(asset_type, year): 'cadastral_district_code', 'quality_groups', 'agricultural_land_purpose', - 'area', # ← ИЗМЕНЕНО с hectare на area + 'area', 'purchase_date' ] asset_type_short = "Сельхоз земли" @@ -480,7 +480,8 @@ def get_assets_for_year(asset_type, year): 'territorial_unit_code', 'industrial_land_purpose', 'mining_note', - 'area', # ← ИЗМЕНЕНО с hectare на area + 'area', + 'tax_exempt_area', # ← ДОБАВЛЕНО 'purchase_date' ] asset_type_short = "Промышленные земли" @@ -508,7 +509,8 @@ def get_assets_for_year(asset_type, year): if purchase_year == target_year: filtered_assets.append(asset) area_value = asset.get('area', 0) - frappe.log_error("Asset Matched", f"Актив подходит: {asset['name']} (дата: {asset['purchase_date']}, площадь: {area_value})") + tax_exempt = asset.get('tax_exempt_area', 0) + frappe.log_error("Asset Matched", f"Актив подходит: {asset['name']} (дата: {asset['purchase_date']}, площадь: {area_value}, tax_exempt: {tax_exempt})") else: skipped_wrong_year += 1 frappe.log_error("Asset Skipped", f"Актив пропущен: {asset['name']} (год: {purchase_year}, нужен {target_year})")