table sums are now available in table row formulas
This commit is contained in:
parent
2dd18c4143
commit
d72ce0b06b
|
|
@ -114,8 +114,30 @@ function createTableRowFormulaModal() {
|
|||
</div>
|
||||
`;
|
||||
|
||||
// Стили для модального окна
|
||||
const modalStyles = `
|
||||
<style id="table-row-formula-modal-styles">
|
||||
/* Стили для кнопок полей табличных частей (суммы) */
|
||||
.table-sum-field-btn {
|
||||
background-color: #fff3e0 !important;
|
||||
border-color: #ffb74d !important;
|
||||
}
|
||||
|
||||
.table-sum-field-btn:hover {
|
||||
background-color: #ffe0b2 !important;
|
||||
}
|
||||
|
||||
/* Остальные стили уже есть в основных стилях */
|
||||
</style>
|
||||
`;
|
||||
|
||||
$('body').append(modalHtml);
|
||||
|
||||
// Добавляем стили только если их еще нет
|
||||
if (!$('#table-row-formula-modal-styles').length) {
|
||||
$('head').append(modalStyles);
|
||||
}
|
||||
|
||||
// Обработчики для селекторов
|
||||
$("#table_row_table").on('change', function() {
|
||||
const selectedTable = $(this).val();
|
||||
|
|
@ -525,7 +547,83 @@ function populateTableRowFormulaFieldsAsync(frm, $modal, callback) {
|
|||
|
||||
$container.append($documentFieldsGroup);
|
||||
|
||||
// 2. Добавляем раздел с полями текущей строки таблицы
|
||||
// === НОВЫЙ КОД: Добавляем поля из табличных частей ===
|
||||
// 2. Добавляем раздел с полями табличных частей (суммы)
|
||||
const $tableFieldsGroup = $(`
|
||||
<div class="field-group">
|
||||
<div class="field-group-title">Поля табличных частей (суммы)</div>
|
||||
<div class="field-buttons-container" data-group="table-fields"></div>
|
||||
</div>
|
||||
`);
|
||||
|
||||
const $tableFieldsContainer = $tableFieldsGroup.find('.field-buttons-container');
|
||||
|
||||
// Счетчик для отслеживания загруженных таблиц
|
||||
let tablesToLoad = 0;
|
||||
let tablesLoaded = 0;
|
||||
|
||||
// Подсчитываем количество таблиц
|
||||
if (meta && meta.fields) {
|
||||
meta.fields.forEach(tableField => {
|
||||
if (tableField.fieldtype === 'Table' && tableField.options) {
|
||||
tablesToLoad++;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Если нет табличных частей, сразу продолжаем
|
||||
if (tablesToLoad === 0) {
|
||||
continueWithOtherGroups();
|
||||
return;
|
||||
}
|
||||
|
||||
// Проходим по всем табличным частям
|
||||
if (meta && meta.fields) {
|
||||
meta.fields.forEach(tableField => {
|
||||
if (tableField.fieldtype === 'Table' && tableField.options) {
|
||||
// Получаем meta дочерней таблицы
|
||||
frappe.model.with_doctype(tableField.options, function() {
|
||||
const childMeta = frappe.get_meta(tableField.options);
|
||||
if (childMeta && childMeta.fields) {
|
||||
// Добавляем только числовые поля
|
||||
childMeta.fields.forEach(childField => {
|
||||
if (childField.fieldname && ['Int', 'Float', 'Currency'].includes(childField.fieldtype)) {
|
||||
const tableLabel = tableField.label || tableField.fieldname;
|
||||
const fieldLabel = childField.label || childField.fieldname;
|
||||
const combinedFieldname = `${tableField.fieldname}_${childField.fieldname}`;
|
||||
|
||||
const $fieldBtn = $(`
|
||||
<button class="btn btn-sm field-btn table-sum-field-btn draggable-item"
|
||||
data-fieldname="${combinedFieldname}"
|
||||
data-label="${tableLabel} → ${fieldLabel}"
|
||||
data-group="table-fields"
|
||||
data-fieldtype="${childField.fieldtype}"
|
||||
draggable="true">
|
||||
val(${combinedFieldname})
|
||||
</button>
|
||||
`);
|
||||
|
||||
$tableFieldsContainer.append($fieldBtn);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Увеличиваем счетчик загруженных таблиц
|
||||
tablesLoaded++;
|
||||
|
||||
// Если все таблицы загружены, продолжаем
|
||||
if (tablesLoaded === tablesToLoad) {
|
||||
$container.append($tableFieldsGroup);
|
||||
continueWithOtherGroups();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Функция для продолжения загрузки остальных групп
|
||||
function continueWithOtherGroups() {
|
||||
// 3. Добавляем раздел с полями текущей строки таблицы
|
||||
const $rowFieldsGroup = $(`
|
||||
<div class="field-group">
|
||||
<div class="field-group-title">Поля текущей строки</div>
|
||||
|
|
@ -535,7 +633,7 @@ function populateTableRowFormulaFieldsAsync(frm, $modal, callback) {
|
|||
|
||||
$container.append($rowFieldsGroup);
|
||||
|
||||
// 3. Добавляем раздел с универсальными полями
|
||||
// 4. Добавляем раздел с универсальными полями
|
||||
if (frm.doc.universal_fields_storage) {
|
||||
const universalFields = JSON.parse(frm.doc.universal_fields_storage || "{}");
|
||||
|
||||
|
|
@ -572,7 +670,7 @@ function populateTableRowFormulaFieldsAsync(frm, $modal, callback) {
|
|||
}
|
||||
}
|
||||
|
||||
// 4. Добавляем раздел с полями отчетов
|
||||
// 5. Добавляем раздел с полями отчетов
|
||||
if (frm.doc.report_fields_storage) {
|
||||
const reportFields = JSON.parse(frm.doc.report_fields_storage || "{}");
|
||||
|
||||
|
|
@ -609,7 +707,7 @@ function populateTableRowFormulaFieldsAsync(frm, $modal, callback) {
|
|||
}
|
||||
}
|
||||
|
||||
// НОВОЕ: 5. Добавляем группу для полей из конкретных строк табличных частей
|
||||
// 6. Добавляем группу для полей из конкретных строк табличных частей
|
||||
const $tableFieldGroup = $(`
|
||||
<div class="field-group">
|
||||
<div class="field-group-title">Поля из строк табличных частей</div>
|
||||
|
|
@ -623,13 +721,13 @@ function populateTableRowFormulaFieldsAsync(frm, $modal, callback) {
|
|||
|
||||
$container.append($tableFieldGroup);
|
||||
|
||||
// НОВОЕ: Добавляем обработчик для кнопки выбора поля из строки табличной части
|
||||
// Добавляем обработчик для кнопки выбора поля из строки табличной части
|
||||
$tableFieldGroup.find('.select-table-field-in-row').on('click', function() {
|
||||
const targetContainer = $modal.find(".table-row-formula");
|
||||
openTableFieldSelector(frm, targetContainer, false);
|
||||
});
|
||||
|
||||
// 6. Добавляем обработчики для кнопок полей
|
||||
// 7. Добавляем обработчики для кнопок полей
|
||||
$modal.off('click', '.field-btn, .universal-field-btn, .report-field-btn').on('click', '.field-btn, .universal-field-btn, .report-field-btn', function() {
|
||||
const fieldText = $(this).text().trim();
|
||||
const fieldType = $(this).hasClass('universal-field-btn') ? 'universal-field' :
|
||||
|
|
@ -644,6 +742,7 @@ function populateTableRowFormulaFieldsAsync(frm, $modal, callback) {
|
|||
});
|
||||
|
||||
if (callback) callback();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue