Merge: keep local version of property_tax_return.json
This commit is contained in:
commit
7953790e1e
|
|
@ -42,6 +42,9 @@ frappe.ui.form.on('Property tax return', {
|
||||||
// Calculate totals for Elave 1 and Elave 2
|
// Calculate totals for Elave 1 and Elave 2
|
||||||
calculate_elave_1_totals(frm);
|
calculate_elave_1_totals(frm);
|
||||||
calculate_elave_2_totals(frm);
|
calculate_elave_2_totals(frm);
|
||||||
|
|
||||||
|
// Validate minimum asset values
|
||||||
|
validate_minimum_asset_value(frm);
|
||||||
},
|
},
|
||||||
|
|
||||||
// Handle year changes
|
// Handle year changes
|
||||||
|
|
@ -69,13 +72,24 @@ frappe.ui.form.on('Property tax return', {
|
||||||
if (frm.doc.il_erzinde) {
|
if (frm.doc.il_erzinde) {
|
||||||
frm.set_value('tam_il', 0);
|
frm.set_value('tam_il', 0);
|
||||||
toggle_field_readonly(frm);
|
toggle_field_readonly(frm);
|
||||||
|
|
||||||
|
// Validate when checking il_erzinde
|
||||||
|
validate_minimum_asset_value(frm);
|
||||||
|
|
||||||
if (frm.doc.il) {
|
if (frm.doc.il) {
|
||||||
reload_property_tax_data(frm);
|
reload_property_tax_data(frm);
|
||||||
}
|
}
|
||||||
} else if (!frm.doc.tam_il) {
|
} else if (!frm.doc.tam_il) {
|
||||||
// If unchecking il_erzinde and tam_il is also unchecked, default to tam_il
|
// If unchecking il_erzinde and tam_il is also unchecked, default to tam_il
|
||||||
frm.set_value('tam_il', 1);
|
frm.set_value('tam_il', 1);
|
||||||
|
} else {
|
||||||
|
// Clear warnings when unchecking il_erzinde
|
||||||
|
validate_minimum_asset_value(frm);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
validate: function(frm) {
|
||||||
|
return validate_minimum_asset_value(frm);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -341,11 +355,146 @@ function update_child_table_values(frm, table_name, data_map) {
|
||||||
if (table_name === 'elave_2') {
|
if (table_name === 'elave_2') {
|
||||||
calculate_binalar_totals(frm);
|
calculate_binalar_totals(frm);
|
||||||
calculate_elave_2_totals(frm);
|
calculate_elave_2_totals(frm);
|
||||||
|
// Validate after auto-populating Əlavə 2
|
||||||
|
try {
|
||||||
|
validate_minimum_asset_value(frm);
|
||||||
|
} catch (e) {
|
||||||
|
console.log('Validation error:', e);
|
||||||
|
}
|
||||||
} else if (table_name === 'elave_1') {
|
} else if (table_name === 'elave_1') {
|
||||||
calculate_elave_1_totals(frm);
|
calculate_elave_1_totals(frm);
|
||||||
|
// Validate after auto-populating Əlavə 1
|
||||||
|
try {
|
||||||
|
validate_minimum_asset_value(frm);
|
||||||
|
} catch (e) {
|
||||||
|
console.log('Validation error:', e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ==================== MINIMUM ASSET VALUE VALIDATION ====================
|
||||||
|
// Validate that asset values in columns 503.1 and 503.2 are >= 500 AZN
|
||||||
|
// when il_erzinde mode is selected
|
||||||
|
|
||||||
|
function validate_minimum_asset_value(frm) {
|
||||||
|
// Only run if il_erzinde is checked
|
||||||
|
if (!frm.doc.il_erzinde) {
|
||||||
|
// Hide warnings and allow save
|
||||||
|
const field1 = frm.get_field('warning_elave_1_html');
|
||||||
|
const field2 = frm.get_field('warning_elave_2_html');
|
||||||
|
if (field1) field1.$wrapper.hide();
|
||||||
|
if (field2) field2.$wrapper.hide();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
let has_error_elave_1 = false;
|
||||||
|
let has_error_elave_2 = false;
|
||||||
|
let invalid_rows_1 = [];
|
||||||
|
let invalid_rows_2 = [];
|
||||||
|
|
||||||
|
// Check Əlavə 1 (column 503.2)
|
||||||
|
(frm.doc.elave_1 || []).forEach((row, idx) => {
|
||||||
|
let value = row.hesabatiliərzindəəsasvəsaitlərinqalıqdəyəri || 0;
|
||||||
|
if (value > 0 && value < 500) {
|
||||||
|
has_error_elave_1 = true;
|
||||||
|
invalid_rows_1.push({row: idx + 1, value: value, category: row.azadolmasəbəbi});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check Əlavə 2 (column 503.1)
|
||||||
|
(frm.doc.elave_2 || []).forEach((row, idx) => {
|
||||||
|
let value = row.hesabatilierzindeuçotaalınan || 0;
|
||||||
|
if (value > 0 && value < 500) {
|
||||||
|
has_error_elave_2 = true;
|
||||||
|
invalid_rows_2.push({row: idx + 1, value: value, category: row.vergiyəcəlbolunanəmlaklarınkateqoriyası});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Debug logging
|
||||||
|
if (invalid_rows_1.length > 0) {
|
||||||
|
console.log('Əlavə 1 invalid rows:', invalid_rows_1);
|
||||||
|
}
|
||||||
|
if (invalid_rows_2.length > 0) {
|
||||||
|
console.log('Əlavə 2 invalid rows:', invalid_rows_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show/hide warnings and set validation state
|
||||||
|
show_warning_if_needed(frm, 'elave_1', has_error_elave_1);
|
||||||
|
show_warning_if_needed(frm, 'elave_2', has_error_elave_2);
|
||||||
|
|
||||||
|
// Block save if any errors
|
||||||
|
if (has_error_elave_1 || has_error_elave_2) {
|
||||||
|
frm.validated = false;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function show_warning_if_needed(frm, table_name, has_error) {
|
||||||
|
const field_name = `warning_${table_name}_html`;
|
||||||
|
const field = frm.get_field(field_name);
|
||||||
|
|
||||||
|
if (!field) return;
|
||||||
|
|
||||||
|
if (has_error) {
|
||||||
|
// Unhide the field
|
||||||
|
frm.set_df_property(field_name, 'hidden', 0);
|
||||||
|
|
||||||
|
// Show red warning message
|
||||||
|
const warning_html = `
|
||||||
|
<div style="padding: 15px; background-color: #ffe6e6; border: 2px solid #ff0000; border-radius: 5px; margin-bottom: 15px;">
|
||||||
|
<p style="color: #ff0000; font-weight: bold; font-size: 14px; margin: 0;">
|
||||||
|
⚠️ Əsas vəsaitlərin dəyəri 500 manatdan az ola bilməz
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
field.$wrapper.html(warning_html);
|
||||||
|
field.$wrapper.show();
|
||||||
|
|
||||||
|
// Add red emoji to tab title
|
||||||
|
update_tab_title(frm, table_name, true);
|
||||||
|
} else {
|
||||||
|
// Hide warning
|
||||||
|
field.$wrapper.hide();
|
||||||
|
frm.set_df_property(field_name, 'hidden', 1);
|
||||||
|
update_tab_title(frm, table_name, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_tab_title(frm, table_name, has_error) {
|
||||||
|
const tab_map = {
|
||||||
|
'elave_1': 'Əlavə 1',
|
||||||
|
'elave_2': 'Əlavə 2'
|
||||||
|
};
|
||||||
|
|
||||||
|
const base_title = tab_map[table_name];
|
||||||
|
if (!base_title) return;
|
||||||
|
|
||||||
|
// Find tab element and update title
|
||||||
|
const tab_title = has_error ? `🔴 ${base_title}` : base_title;
|
||||||
|
|
||||||
|
// Update tab title using jQuery/DOM
|
||||||
|
setTimeout(() => {
|
||||||
|
try {
|
||||||
|
// Find all tabs and update the matching one
|
||||||
|
$('.form-tabs .nav-link').each(function() {
|
||||||
|
const $tab = $(this);
|
||||||
|
const text = $tab.text().trim();
|
||||||
|
|
||||||
|
// Check if this is the tab we want to update
|
||||||
|
if (text === base_title || text === `🔴 ${base_title}`) {
|
||||||
|
$tab.text(tab_title);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.log('Could not update tab title:', e);
|
||||||
|
}
|
||||||
|
}, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== END VALIDATION ====================
|
||||||
|
|
||||||
// Обработчики для дочерней таблицы Elave 2 - автоматический пересчет суммы binalar
|
// Обработчики для дочерней таблицы Elave 2 - автоматический пересчет суммы binalar
|
||||||
frappe.ui.form.on('Property tax return Elave 2', {
|
frappe.ui.form.on('Property tax return Elave 2', {
|
||||||
form_render: function(frm, cdt, cdn) {
|
form_render: function(frm, cdt, cdn) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue