From fe4f7bf17dd87e2f983a56c8138dc27916d5b449 Mon Sep 17 00:00:00 2001 From: Ali <010109ali@gmail.com> Date: Tue, 23 Dec 2025 22:04:44 +0400 Subject: [PATCH] added red glow to error rows --- .../property_tax_return.js | 56 +++++++++++++------ 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/taxes_az/taxes_az/doctype/property_tax_return/property_tax_return.js b/taxes_az/taxes_az/doctype/property_tax_return/property_tax_return.js index f325320..31f453b 100644 --- a/taxes_az/taxes_az/doctype/property_tax_return/property_tax_return.js +++ b/taxes_az/taxes_az/doctype/property_tax_return/property_tax_return.js @@ -406,28 +406,48 @@ function validate_minimum_asset_value(frm) { // 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) { + let value = row.hesabatiliərzindəəsasvəsaitlərinqalıqdəyəri; + + // Skip if value is null, undefined, or empty + if (value === null || value === undefined || value === '') { + return; + } + + // Convert to number (handle both comma and dot as decimal separator) + let numValue = parseFloat(String(value).replace(',', '.')); + + // Only flag as invalid if: value is a valid number, greater than 0, and less than 500 + if (!isNaN(numValue) && numValue > 0 && numValue < 500) { has_error_elave_1 = true; - invalid_rows_1.push({row: idx + 1, value: value, category: row.azadolmasəbəbi}); + invalid_rows_1.push({name: row.name, value: numValue, 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) { + let value = row.hesabatilierzindeuçotaalınan; + + // Skip if value is null, undefined, or empty + if (value === null || value === undefined || value === '') { + return; + } + + // Convert to number (handle both comma and dot as decimal separator) + let numValue = parseFloat(String(value).replace(',', '.')); + + // Only flag as invalid if: value is a valid number, greater than 0, and less than 500 + if (!isNaN(numValue) && numValue > 0 && numValue < 500) { has_error_elave_2 = true; - invalid_rows_2.push({row: idx + 1, value: value, category: row.vergiyəcəlbolunanəmlaklarınkateqoriyası}); + invalid_rows_2.push({name: row.name, value: numValue, category: row.vergiyəcəlbolunanəmlaklarınkateqoriyası}); } }); // Debug logging if (invalid_rows_1.length > 0) { - console.log('Əlavə 1 invalid rows:', invalid_rows_1); + console.log('Əlavə 1 invalid rows:', invalid_rows_1.map(r => ({name: r.name, value: r.value}))); } if (invalid_rows_2.length > 0) { - console.log('Əlavə 2 invalid rows:', invalid_rows_2); + console.log('Əlavə 2 invalid rows:', invalid_rows_2.map(r => ({name: r.name, value: r.value}))); } // Highlight invalid cells in red @@ -528,12 +548,11 @@ function highlight_invalid_cells(frm, invalid_rows_1, invalid_rows_2) { // Highlight Əlavə 1 invalid cells (503.2) if (invalid_rows_1.length > 0) { - console.log('Highlighting Əlavə 1 invalid rows:', invalid_rows_1.map(r => r.row)); + console.log('Highlighting Əlavə 1 invalid rows:', invalid_rows_1.map(r => r.name)); invalid_rows_1.forEach(item => { - const rowIdx = item.row - 1; // Convert to 0-based data-idx - // Target the whole cell container (not just .static-area) - const $cell = $(`[data-fieldname="elave_1"] .grid-row[data-idx="${rowIdx}"] [data-fieldname="hesabatiliərzindəəsasvəsaitlərinqalıqdəyəri"]`); - console.log(` Row ${item.row} (data-idx=${rowIdx}): Found ${$cell.length} elements`); + // Use data-name instead of data-idx for accurate row matching + const $cell = $(`[data-fieldname="elave_1"] .grid-row[data-name="${item.name}"] [data-fieldname="hesabatiliərzindəəsasvəsaitlərinqalıqdəyəri"]`); + console.log(` Row ${item.name}: Found ${$cell.length} elements`); if ($cell.length > 0) { $cell.css({ 'background-color': '#ffe6e6', @@ -545,12 +564,11 @@ function highlight_invalid_cells(frm, invalid_rows_1, invalid_rows_2) { // Highlight Əlavə 2 invalid cells (503.1) if (invalid_rows_2.length > 0) { - console.log('Highlighting Əlavə 2 invalid rows:', invalid_rows_2.map(r => r.row)); + console.log('Highlighting Əlavə 2 invalid rows:', invalid_rows_2.map(r => r.name)); invalid_rows_2.forEach(item => { - const rowIdx = item.row - 1; // Convert to 0-based data-idx - // Target the whole cell container (not just .static-area) - const $cell = $(`[data-fieldname="elave_2"] .grid-row[data-idx="${rowIdx}"] [data-fieldname="hesabatilierzindeuçotaalınan"]`); - console.log(` Row ${item.row} (data-idx=${rowIdx}): Found ${$cell.length} elements`); + // Use data-name instead of data-idx for accurate row matching + const $cell = $(`[data-fieldname="elave_2"] .grid-row[data-name="${item.name}"] [data-fieldname="hesabatilierzindeuçotaalınan"]`); + console.log(` Row ${item.name}: Found ${$cell.length} elements`); if ($cell.length > 0) { $cell.css({ 'background-color': '#ffe6e6', @@ -586,6 +604,7 @@ frappe.ui.form.on('Property tax return Elave 2', { hesabatilierzindeuçotaalınan: function(frm, cdt, cdn) { calculate_binalar_totals(frm); calculate_elave_2_totals(frm); + validate_minimum_asset_value(frm); }, hesabatilinsonunaəsasvəsaitlərinqalıqdəyəri: function(frm, cdt, cdn) { calculate_binalar_totals(frm); @@ -619,6 +638,7 @@ frappe.ui.form.on('Property tax return Elave 1', { }, hesabatiližrzindəəsasvəsaitlərinqalıqdəyəri: function(frm, cdt, cdn) { calculate_elave_1_totals(frm); + validate_minimum_asset_value(frm); }, ilinsonunaəsasvəsaitlərinqalıqdəyəri: function(frm, cdt, cdn) { calculate_elave_1_totals(frm);