fixed bugs with reports ui and added rounding
This commit is contained in:
parent
e589956878
commit
7b811fb607
|
|
@ -416,10 +416,11 @@ def extract_field_from_report(data, columns, field_name):
|
|||
else:
|
||||
value = None
|
||||
|
||||
# Преобразуем в число
|
||||
# Преобразуем в число и округляем до 2 знаков
|
||||
try:
|
||||
if value is not None:
|
||||
return float(value)
|
||||
num_value = float(value)
|
||||
return round(num_value, 2)
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
|
||||
|
|
@ -449,7 +450,8 @@ def extract_field_from_report(data, columns, field_name):
|
|||
except (ValueError, TypeError):
|
||||
pass
|
||||
|
||||
return total
|
||||
# Округляем итоговую сумму до 2 знаков
|
||||
return round(total, 2)
|
||||
|
||||
return 0
|
||||
|
||||
|
|
|
|||
|
|
@ -205,16 +205,33 @@ function loadReportFilters(d, reportName, existingFilters = null) {
|
|||
},
|
||||
callback: function(r) {
|
||||
if (r.message && r.message.length > 0) {
|
||||
// Показываем секцию фильтров
|
||||
d.set_df_property('filters_section', 'hidden', 0);
|
||||
d.set_df_property('filters_helper', 'hidden', 0);
|
||||
// Фильтруем ненужные базовые поля, которые автоматически обрабатываются
|
||||
const excludeFields = ['company', 'from_date', 'to_date', 'fiscal_year', 'period_start_date', 'period_end_date'];
|
||||
const filteredFilters = r.message.filter(filter =>
|
||||
!excludeFields.includes(filter.fieldname)
|
||||
);
|
||||
|
||||
// Генерируем HTML для фильтров
|
||||
const filtersHtml = generateUniversalFiltersHtml(r.message, existingFilters);
|
||||
d.fields_dict.filters_container.$wrapper.html(filtersHtml);
|
||||
if (filteredFilters.length > 0) {
|
||||
// Показываем секцию фильтров
|
||||
d.set_df_property('filters_section', 'hidden', 0);
|
||||
d.set_df_property('filters_helper', 'hidden', 0);
|
||||
|
||||
// Инициализируем контролы фильтров
|
||||
initUniversalFilterControls(d, r.message, existingFilters);
|
||||
// Генерируем HTML для фильтров
|
||||
const filtersHtml = generateUniversalFiltersHtml(filteredFilters, existingFilters);
|
||||
d.fields_dict.filters_container.$wrapper.html(filtersHtml);
|
||||
|
||||
// Инициализируем контролы фильтров
|
||||
initUniversalFilterControls(d, filteredFilters, existingFilters);
|
||||
} else {
|
||||
// Если после фильтрации не осталось полей, скрываем секцию
|
||||
clearFiltersSection(d);
|
||||
|
||||
// Показываем информационное сообщение
|
||||
d.fields_dict.filters_container.$wrapper.html(
|
||||
'<div class="text-muted small"></div>'
|
||||
);
|
||||
d.set_df_property('filters_section', 'hidden', 0);
|
||||
}
|
||||
} else {
|
||||
clearFiltersSection(d);
|
||||
}
|
||||
|
|
@ -516,6 +533,15 @@ function createFallbackControl($container, filter, currentValue, d) {
|
|||
function collectFiltersFromControls(d) {
|
||||
const values = {};
|
||||
|
||||
// Автоматически добавляем базовые фильтры с их специальными значениями
|
||||
values.company = '$DefaultCompany';
|
||||
values.from_date = '$AyIlSpecial';
|
||||
values.to_date = '$AyIlSpecial';
|
||||
|
||||
// Добавляем фискальный год, если нужен
|
||||
values.fiscal_year = '$DefaultFiscalYear';
|
||||
|
||||
// Добавляем значения от пользовательских контролов
|
||||
if (d.filter_controls) {
|
||||
Object.keys(d.filter_controls).forEach(fieldname => {
|
||||
const ctrl = d.filter_controls[fieldname];
|
||||
|
|
@ -539,6 +565,15 @@ function updateFiltersJson(d) {
|
|||
try {
|
||||
const filtersJson = collectFiltersFromControls(d);
|
||||
d.set_value('filters_json', filtersJson);
|
||||
|
||||
// Также обновляем поля отчета при изменении фильтров
|
||||
const reportName = d.get_value('report');
|
||||
if (reportName) {
|
||||
// Небольшая задержка для применения изменений
|
||||
setTimeout(() => {
|
||||
loadReportFields(d, reportName);
|
||||
}, 300);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Error updating filters JSON:', e);
|
||||
}
|
||||
|
|
@ -915,6 +950,9 @@ async function getReportFieldValue(frm, reportName, filters, fieldName, aggregat
|
|||
let value = parseFloat(result.message);
|
||||
if (isNaN(value)) value = 0;
|
||||
|
||||
// Округляем до 2 знаков после запятой
|
||||
value = Math.round(value * 100) / 100;
|
||||
|
||||
// Сохраняем в кеш
|
||||
window.reportCache[cacheKey] = {
|
||||
value: value,
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
/home/frappe/frappe-bench/apps/formula_editor/node_modules
|
||||
Loading…
Reference in New Issue