changed hectare to area
This commit is contained in:
parent
2c1f431465
commit
2e08089ce1
|
|
@ -153,14 +153,14 @@ function group_and_create_agricultural_rows_silent(frm, table_fieldname, assets,
|
|||
if (!grouped_assets[group_key]) {
|
||||
grouped_assets[group_key] = {
|
||||
asset: asset,
|
||||
total_hectare: 0,
|
||||
total_area: 0, // ← ИЗМЕНЕНО с total_hectare
|
||||
count: 0,
|
||||
asset_names: []
|
||||
};
|
||||
console.log(`Создана новая группа: "${group_key}"`);
|
||||
}
|
||||
|
||||
grouped_assets[group_key].total_hectare += (asset.hectare || 0);
|
||||
grouped_assets[group_key].total_area += (asset.area || 0); // ← ИЗМЕНЕНО с hectare
|
||||
grouped_assets[group_key].count += 1;
|
||||
grouped_assets[group_key].asset_names.push(asset.name);
|
||||
});
|
||||
|
|
@ -172,7 +172,7 @@ function group_and_create_agricultural_rows_silent(frm, table_fieldname, assets,
|
|||
Object.entries(grouped_assets).forEach(([key, group]) => {
|
||||
console.log(`Группа "${key}":`, {
|
||||
количество_активов: group.count,
|
||||
общая_площадь: group.total_hectare,
|
||||
общая_площадь: group.total_area, // ← ИЗМЕНЕНО
|
||||
активы: group.asset_names
|
||||
});
|
||||
});
|
||||
|
|
@ -188,7 +188,7 @@ function group_and_create_agricultural_rows_silent(frm, table_fieldname, assets,
|
|||
Object.entries(grouped_assets).forEach(function([group_key, group]) {
|
||||
console.log(`Создание строки для группы: "${group_key}"`);
|
||||
|
||||
create_agricultural_row_with_calculation_silent(frm, table_fieldname, group.asset, agricultural_purposes, group.total_hectare, group, function() {
|
||||
create_agricultural_row_with_calculation_silent(frm, table_fieldname, group.asset, agricultural_purposes, group.total_area, group, function() {
|
||||
completed_calculations++;
|
||||
console.log(`Прогресс создания строк: ${completed_calculations}/${total_groups}`);
|
||||
|
||||
|
|
@ -218,20 +218,20 @@ function create_agricultural_group_key(asset, agricultural_purposes) {
|
|||
return key_parts.join('|');
|
||||
}
|
||||
|
||||
function create_agricultural_row_with_calculation_silent(frm, table_fieldname, asset, agricultural_purposes, total_hectare, group_info, callback) {
|
||||
function create_agricultural_row_with_calculation_silent(frm, table_fieldname, asset, agricultural_purposes, total_area, group_info, callback) {
|
||||
console.log('=== create_agricultural_row_with_calculation_silent ===');
|
||||
console.log('Актив:', asset.name, 'Общая площадь:', total_hectare);
|
||||
console.log('Актив:', asset.name, 'Общая площадь:', total_area); // ← ИЗМЕНЕНО
|
||||
|
||||
let row = frm.add_child(table_fieldname);
|
||||
console.log('Строка добавлена в таблицу');
|
||||
|
||||
fill_agricultural_row_fields(row, asset, agricultural_purposes, total_hectare, group_info);
|
||||
fill_agricultural_row_fields(row, asset, agricultural_purposes, total_area, group_info); // ← ИЗМЕНЕНО
|
||||
console.log('Поля строки заполнены:', row);
|
||||
|
||||
calculate_agricultural_tax_for_row_silent(row, asset, total_hectare, group_info, callback);
|
||||
calculate_agricultural_tax_for_row_silent(row, asset, total_area, group_info, callback); // ← ИЗМЕНЕНО
|
||||
}
|
||||
|
||||
function fill_agricultural_row_fields(row, asset, agricultural_purposes, total_hectare, group_info) {
|
||||
function fill_agricultural_row_fields(row, asset, agricultural_purposes, total_area, group_info) {
|
||||
console.log('=== fill_agricultural_row_fields ===');
|
||||
|
||||
if (asset.agricultural_purpose && agricultural_purposes[asset.agricultural_purpose]) {
|
||||
|
|
@ -271,19 +271,30 @@ function fill_agricultural_row_fields(row, asset, agricultural_purposes, total_h
|
|||
}
|
||||
}
|
||||
|
||||
if (total_hectare > 0) {
|
||||
row.torpaqsahəsi6001kodlarüzrəkvmetrlə6002kodlarüzrəhektarlaümumi = total_hectare;
|
||||
console.log('Общая площадь:', total_hectare, 'га');
|
||||
if (total_area > 0) { // ← ИЗМЕНЕНО с total_hectare
|
||||
row.torpaqsahəsi6001kodlarüzrəkvmetrlə6002kodlarüzrəhektarlaümumi = total_area;
|
||||
|
||||
// Определяем единицу измерения для лога
|
||||
let unit = 'единиц';
|
||||
if (asset.agricultural_purpose) {
|
||||
if (asset.agricultural_purpose === 'Təyinatı üzrə istifadə edilməyən kənd təsərrüfatı torpaqları üzrə hesablanmış vergi məbləği') {
|
||||
unit = 'кв.м';
|
||||
} else {
|
||||
unit = 'га';
|
||||
}
|
||||
}
|
||||
console.log('Общая площадь:', total_area, unit);
|
||||
}
|
||||
}
|
||||
|
||||
function calculate_agricultural_tax_for_row_silent(row, asset, total_hectare, group_info, callback) {
|
||||
function calculate_agricultural_tax_for_row_silent(row, asset, total_area, group_info, callback) {
|
||||
console.log('=== calculate_agricultural_tax_for_row_silent ===');
|
||||
console.log('Параметры расчета:', {
|
||||
hectare: total_hectare,
|
||||
area: total_area, // ← ИЗМЕНЕНО с hectare
|
||||
cadastral_district_name: asset.cadastral_district_name,
|
||||
quality_groups: asset.quality_groups,
|
||||
agricultural_land_purpose: asset.agricultural_land_purpose
|
||||
agricultural_land_purpose: asset.agricultural_land_purpose,
|
||||
agricultural_purpose: asset.agricultural_purpose
|
||||
});
|
||||
|
||||
if (!asset.cadastral_district_name || !asset.quality_groups || !asset.agricultural_land_purpose) {
|
||||
|
|
@ -295,15 +306,16 @@ function calculate_agricultural_tax_for_row_silent(row, asset, total_hectare, gr
|
|||
frappe.call({
|
||||
method: 'taxes_az.taxes_az.doctype.land_tax_declaration.land_tax_declaration.calculate_agricultural_tax',
|
||||
args: {
|
||||
hectare: total_hectare,
|
||||
area_value: total_area, // ← ИЗМЕНЕНО с hectare
|
||||
cadastral_district_name: asset.cadastral_district_name,
|
||||
quality_groups: asset.quality_groups,
|
||||
agricultural_land_purpose: asset.agricultural_land_purpose
|
||||
agricultural_land_purpose: asset.agricultural_land_purpose,
|
||||
agricultural_purpose_name: asset.agricultural_purpose // ← ДОБАВЛЕНО
|
||||
},
|
||||
callback: function(response) {
|
||||
console.log('Результат расчета налога:', response);
|
||||
|
||||
if (response.message && response.message.tax_amount) {
|
||||
if (response.message && 'tax_amount' in response.message) { // ← ИСПРАВЛЕНО
|
||||
row.vergiməbləğimanatla = response.message.tax_amount;
|
||||
console.log(`✅ Налог рассчитан: ${response.message.tax_amount} манат`);
|
||||
|
||||
|
|
@ -390,14 +402,14 @@ function group_and_create_industrial_rows_silent(frm, table_fieldname, assets, r
|
|||
if (!grouped_assets[group_key]) {
|
||||
grouped_assets[group_key] = {
|
||||
asset: asset,
|
||||
total_hectare: 0,
|
||||
total_area: 0, // ← ИЗМЕНЕНО с total_hectare
|
||||
count: 0,
|
||||
asset_names: []
|
||||
};
|
||||
console.log(`Создана новая группа: "${group_key}"`);
|
||||
}
|
||||
|
||||
grouped_assets[group_key].total_hectare += (asset.hectare || 0);
|
||||
grouped_assets[group_key].total_area += (asset.area || 0); // ← ИЗМЕНЕНО с hectare
|
||||
grouped_assets[group_key].count += 1;
|
||||
grouped_assets[group_key].asset_names.push(asset.name);
|
||||
});
|
||||
|
|
@ -409,7 +421,7 @@ function group_and_create_industrial_rows_silent(frm, table_fieldname, assets, r
|
|||
Object.entries(grouped_assets).forEach(([key, group]) => {
|
||||
console.log(`Группа "${key}":`, {
|
||||
количество_активов: group.count,
|
||||
общая_площадь: group.total_hectare,
|
||||
общая_площадь: group.total_area, // ← ИЗМЕНЕНО
|
||||
активы: group.asset_names
|
||||
});
|
||||
});
|
||||
|
|
@ -425,7 +437,7 @@ function group_and_create_industrial_rows_silent(frm, table_fieldname, assets, r
|
|||
Object.entries(grouped_assets).forEach(function([group_key, group]) {
|
||||
console.log(`Создание строки для группы: "${group_key}"`);
|
||||
|
||||
create_industrial_row_with_calculation_silent(frm, table_fieldname, group.asset, group.total_hectare, group, function() {
|
||||
create_industrial_row_with_calculation_silent(frm, table_fieldname, group.asset, group.total_area, group, function() {
|
||||
completed_calculations++;
|
||||
console.log(`Прогресс создания строк: ${completed_calculations}/${total_groups}`);
|
||||
|
||||
|
|
@ -449,20 +461,20 @@ function create_industrial_group_key(asset) {
|
|||
return key_parts.join('|');
|
||||
}
|
||||
|
||||
function create_industrial_row_with_calculation_silent(frm, table_fieldname, asset, total_hectare, group_info, callback) {
|
||||
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_hectare);
|
||||
console.log('Актив:', asset.name, 'Общая площадь:', total_area, 'кв.м'); // ← ИЗМЕНЕНО
|
||||
|
||||
let row = frm.add_child(table_fieldname);
|
||||
console.log('Строка добавлена в таблицу');
|
||||
|
||||
fill_industrial_row_fields(row, asset, total_hectare, group_info);
|
||||
fill_industrial_row_fields(row, asset, total_area, group_info); // ← ИЗМЕНЕНО
|
||||
console.log('Поля строки заполнены:', row);
|
||||
|
||||
calculate_industrial_tax_for_row_silent(row, asset, total_hectare, group_info, callback);
|
||||
calculate_industrial_tax_for_row_silent(row, asset, total_area, group_info, callback); // ← ИЗМЕНЕНО
|
||||
}
|
||||
|
||||
function fill_industrial_row_fields(row, asset, total_hectare, group_info) {
|
||||
function fill_industrial_row_fields(row, asset, total_area, group_info) {
|
||||
console.log('=== fill_industrial_row_fields ===');
|
||||
|
||||
if (asset.territorial_unit_code) {
|
||||
|
|
@ -493,16 +505,16 @@ function fill_industrial_row_fields(row, asset, total_hectare, group_info) {
|
|||
console.log('Полезные ископаемые:', asset.mining_note ? 'Да' : 'Нет');
|
||||
}
|
||||
|
||||
if (total_hectare > 0) {
|
||||
row.torpaqsahəsikvmetrləümumisahə = total_hectare;
|
||||
console.log('Общая площадь:', total_hectare, 'м²');
|
||||
if (total_area > 0) { // ← ИЗМЕНЕНО с total_hectare
|
||||
row.torpaqsahəsikvmetrləümumisahə = total_area;
|
||||
console.log('Общая площадь:', total_area, 'м²');
|
||||
}
|
||||
}
|
||||
|
||||
function calculate_industrial_tax_for_row_silent(row, asset, total_hectare, group_info, callback) {
|
||||
function calculate_industrial_tax_for_row_silent(row, asset, total_area, group_info, callback) {
|
||||
console.log('=== calculate_industrial_tax_for_row_silent ===');
|
||||
console.log('Параметры расчета:', {
|
||||
hectare: total_hectare,
|
||||
area_sqm: total_area, // ← ИЗМЕНЕНО с hectare
|
||||
territorial_unit_name: asset.territorial_unit_name,
|
||||
industrial_land_purpose: asset.industrial_land_purpose
|
||||
});
|
||||
|
|
@ -516,14 +528,14 @@ function calculate_industrial_tax_for_row_silent(row, asset, total_hectare, grou
|
|||
frappe.call({
|
||||
method: 'taxes_az.taxes_az.doctype.land_tax_declaration.land_tax_declaration.calculate_industrial_tax',
|
||||
args: {
|
||||
hectare: total_hectare,
|
||||
area_sqm: total_area, // ← ИЗМЕНЕНО с hectare
|
||||
territorial_unit_name: asset.territorial_unit_name,
|
||||
industrial_land_purpose: asset.industrial_land_purpose
|
||||
},
|
||||
callback: function(response) {
|
||||
console.log('Результат расчета налога:', response);
|
||||
|
||||
if (response.message && response.message.tax_amount) {
|
||||
if (response.message && 'tax_amount' in response.message) { // ← ИСПРАВЛЕНО
|
||||
row.vergiməbləğimanatla = response.message.tax_amount;
|
||||
console.log(`✅ Налог рассчитан: ${response.message.tax_amount} манат`);
|
||||
|
||||
|
|
|
|||
|
|
@ -81,14 +81,18 @@ def get_doctype_fields_info():
|
|||
# ===============================
|
||||
|
||||
@frappe.whitelist()
|
||||
def calculate_agricultural_tax(hectare, cadastral_district_name, quality_groups, agricultural_land_purpose):
|
||||
def calculate_agricultural_tax(area_value, cadastral_district_name, quality_groups, agricultural_land_purpose, agricultural_purpose_name=None):
|
||||
"""
|
||||
Calculates tax for agricultural land
|
||||
Formula: hectare × score × markup
|
||||
|
||||
area_value: может быть в гектарах или кв.м в зависимости от назначения
|
||||
agricultural_purpose_name: название назначения для определения единицы измерения
|
||||
"""
|
||||
params_info = (
|
||||
f"Параметры расчета:\n"
|
||||
f" - hectare: {hectare}\n"
|
||||
f" - area_value: {area_value}\n"
|
||||
f" - agricultural_purpose_name: {agricultural_purpose_name}\n"
|
||||
f" - cadastral_district_name: {cadastral_district_name}\n"
|
||||
f" - quality_groups: {quality_groups}\n"
|
||||
f" - agricultural_land_purpose: {agricultural_land_purpose}"
|
||||
|
|
@ -97,11 +101,26 @@ def calculate_agricultural_tax(hectare, cadastral_district_name, quality_groups,
|
|||
|
||||
try:
|
||||
# Input validation
|
||||
if not hectare or not cadastral_district_name or not quality_groups or not agricultural_land_purpose:
|
||||
if area_value is None or not cadastral_district_name or not quality_groups or not agricultural_land_purpose:
|
||||
error_msg = "Не все поля заполнены для расчета"
|
||||
frappe.log_error("Agri Tax Valid", error_msg)
|
||||
frappe.throw(error_msg)
|
||||
|
||||
# Конвертируем площадь в гектары если нужно
|
||||
hectare_value = float(area_value)
|
||||
original_unit = "неизвестно"
|
||||
|
||||
# Если неиспользуемые земли - area_value в кв.м, конвертируем в гектары
|
||||
if agricultural_purpose_name == 'Təyinatı üzrə istifadə edilməyən kənd təsərrüfatı torpaqları üzrə hesablanmış vergi məbləği':
|
||||
if hectare_value > 0:
|
||||
hectare_value = float(area_value) / 10000
|
||||
original_unit = "кв.м"
|
||||
frappe.log_error("Area Convert", f"Неиспользуемые земли: {area_value} кв.м → {hectare_value} гектар")
|
||||
else:
|
||||
# Используемые земли - уже в гектарах
|
||||
original_unit = "гектары"
|
||||
frappe.log_error("Area Direct", f"Используемые земли: {area_value} гектар (без конвертации)")
|
||||
|
||||
# Get score from JSON file
|
||||
frappe.log_error("Get Cadastral", f"Получение балла для района '{cadastral_district_name}', группа '{quality_groups}'")
|
||||
score = get_cadastral_score(cadastral_district_name, quality_groups)
|
||||
|
|
@ -112,12 +131,14 @@ def calculate_agricultural_tax(hectare, cadastral_district_name, quality_groups,
|
|||
markup = get_markup_coefficient(agricultural_land_purpose)
|
||||
frappe.log_error("Markup Retrieved", f"Получен коэффициент: {markup}")
|
||||
|
||||
# Calculate using formula
|
||||
result = float(hectare) * score * markup
|
||||
# Calculate using formula (всегда в гектарах)
|
||||
result = hectare_value * score * markup
|
||||
|
||||
calc_summary = (
|
||||
f"Расчет завершен:\n"
|
||||
f"Формула: {hectare} × {score} × {markup} = {result}\n"
|
||||
f"Исходная площадь: {area_value} {original_unit}\n"
|
||||
f"Площадь для расчета: {hectare_value} га\n"
|
||||
f"Формула: {hectare_value} га × {score} × {markup} = {result}\n"
|
||||
f"Результат: {result} манат"
|
||||
)
|
||||
frappe.log_error("Agri Tax Done", calc_summary)
|
||||
|
|
@ -125,10 +146,12 @@ def calculate_agricultural_tax(hectare, cadastral_district_name, quality_groups,
|
|||
return {
|
||||
'tax_amount': result,
|
||||
'calculation_details': {
|
||||
'hectare': float(hectare),
|
||||
'original_value': float(area_value),
|
||||
'original_unit': original_unit,
|
||||
'hectare': hectare_value,
|
||||
'score': score,
|
||||
'markup': markup,
|
||||
'formula': f"{hectare} × {score} × {markup} = {result}"
|
||||
'formula': f"{hectare_value} га × {score} × {markup} = {result}"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -220,14 +243,16 @@ def get_markup_coefficient(agricultural_land_purpose):
|
|||
# ===============================
|
||||
|
||||
@frappe.whitelist()
|
||||
def calculate_industrial_tax(hectare, territorial_unit_name, industrial_land_purpose):
|
||||
def calculate_industrial_tax(area_sqm, territorial_unit_name, industrial_land_purpose):
|
||||
"""
|
||||
Calculates tax for industrial land
|
||||
Formula: (area_in_sqm ÷ 100) × score (progressive system)
|
||||
|
||||
area_sqm: площадь в квадратных метрах
|
||||
"""
|
||||
params_info = (
|
||||
f"Параметры расчета:\n"
|
||||
f" - hectare (площадь в м²): {hectare}\n"
|
||||
f" - area_sqm (площадь в м²): {area_sqm}\n"
|
||||
f" - territorial_unit_name: {territorial_unit_name}\n"
|
||||
f" - industrial_land_purpose: {industrial_land_purpose}"
|
||||
)
|
||||
|
|
@ -235,14 +260,14 @@ def calculate_industrial_tax(hectare, territorial_unit_name, industrial_land_pur
|
|||
|
||||
try:
|
||||
# Input validation
|
||||
if not hectare or not territorial_unit_name or not industrial_land_purpose:
|
||||
if area_sqm is None or not territorial_unit_name or not industrial_land_purpose:
|
||||
error_msg = "Не все поля заполнены для расчета"
|
||||
frappe.log_error("Ind Tax Valid", error_msg)
|
||||
frappe.throw(error_msg)
|
||||
|
||||
# Use value as is - this is square meters
|
||||
area_sqm = float(hectare)
|
||||
frappe.log_error("Area Converted", f"Площадь для расчета: {area_sqm} м²")
|
||||
area_sqm_float = float(area_sqm)
|
||||
frappe.log_error("Area Converted", f"Площадь для расчета: {area_sqm_float} м²")
|
||||
|
||||
# Get scores from JSON file
|
||||
frappe.log_error("Get Ind Scores", f"Получение баллов для '{territorial_unit_name}', назначение '{industrial_land_purpose}'")
|
||||
|
|
@ -251,7 +276,7 @@ def calculate_industrial_tax(hectare, territorial_unit_name, industrial_land_pur
|
|||
|
||||
# Calculate using progressive formula
|
||||
frappe.log_error("Progressive Calc", "Начало расчета по прогрессивной формуле")
|
||||
calculation_result = calculate_industrial_land_formula(area_sqm, score_data)
|
||||
calculation_result = calculate_industrial_land_formula(area_sqm_float, score_data)
|
||||
|
||||
calc_summary = (
|
||||
f"Расчет завершен:\n"
|
||||
|
|
@ -443,7 +468,7 @@ def get_assets_for_year(asset_type, year):
|
|||
'cadastral_district_code',
|
||||
'quality_groups',
|
||||
'agricultural_land_purpose',
|
||||
'hectare',
|
||||
'area', # ← ИЗМЕНЕНО с hectare на area
|
||||
'purchase_date'
|
||||
]
|
||||
asset_type_short = "Сельхоз земли"
|
||||
|
|
@ -455,7 +480,7 @@ def get_assets_for_year(asset_type, year):
|
|||
'territorial_unit_code',
|
||||
'industrial_land_purpose',
|
||||
'mining_note',
|
||||
'hectare',
|
||||
'area', # ← ИЗМЕНЕНО с hectare на area
|
||||
'purchase_date'
|
||||
]
|
||||
asset_type_short = "Промышленные земли"
|
||||
|
|
@ -482,7 +507,8 @@ def get_assets_for_year(asset_type, year):
|
|||
|
||||
if purchase_year == target_year:
|
||||
filtered_assets.append(asset)
|
||||
frappe.log_error("Asset Matched", f"Актив подходит: {asset['name']} (дата: {asset['purchase_date']})")
|
||||
area_value = asset.get('area', 0)
|
||||
frappe.log_error("Asset Matched", f"Актив подходит: {asset['name']} (дата: {asset['purchase_date']}, площадь: {area_value})")
|
||||
else:
|
||||
skipped_wrong_year += 1
|
||||
frappe.log_error("Asset Skipped", f"Актив пропущен: {asset['name']} (год: {purchase_year}, нужен {target_year})")
|
||||
|
|
|
|||
Loading…
Reference in New Issue