From d72ce0b06b912ee6af399ac242e561ea63b10dad Mon Sep 17 00:00:00 2001
From: Ali <010109ali@gmail.com>
Date: Tue, 28 Oct 2025 14:43:48 +0400
Subject: [PATCH] table sums are now available in table row formulas
---
.../public/js/formula_editor_table_rows.js | 313 ++++++++++++------
1 file changed, 206 insertions(+), 107 deletions(-)
diff --git a/formula_editor/public/js/formula_editor_table_rows.js b/formula_editor/public/js/formula_editor_table_rows.js
index f98373e..3a4ab7f 100644
--- a/formula_editor/public/js/formula_editor_table_rows.js
+++ b/formula_editor/public/js/formula_editor_table_rows.js
@@ -114,7 +114,29 @@ function createTableRowFormulaModal() {
`;
+ // Стили для модального окна
+ const modalStyles = `
+
+ `;
+
$('body').append(modalHtml);
+
+ // Добавляем стили только если их еще нет
+ if (!$('#table-row-formula-modal-styles').length) {
+ $('head').append(modalStyles);
+ }
// Обработчики для селекторов
$("#table_row_table").on('change', function() {
@@ -525,125 +547,202 @@ function populateTableRowFormulaFieldsAsync(frm, $modal, callback) {
$container.append($documentFieldsGroup);
- // 2. Добавляем раздел с полями текущей строки таблицы
- const $rowFieldsGroup = $(`
+ // === НОВЫЙ КОД: Добавляем поля из табличных частей ===
+ // 2. Добавляем раздел с полями табличных частей (суммы)
+ const $tableFieldsGroup = $(`
-
Поля из строк табличных частей
-
- `);
-
- $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. Добавляем обработчики для кнопок полей
- $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' :
- $(this).hasClass('report-field-btn') ? 'report-field' : 'field';
+ `);
- // Добавляем в формулу
- const $token = $(`
${fieldText}×`);
- $formulaContainer.append($token).append(' ');
+ $container.append($rowFieldsGroup);
- // Добавляем обработчики к токену
- addTokenHandlers($formulaContainer);
- });
-
- if (callback) callback();
+ // 4. Добавляем раздел с универсальными полями
+ if (frm.doc.universal_fields_storage) {
+ const universalFields = JSON.parse(frm.doc.universal_fields_storage || "{}");
+
+ if (Object.keys(universalFields).length > 0) {
+ const $universalFieldGroup = $(`
+
+ `);
+
+ const $universalButtonsContainer = $universalFieldGroup.find('.field-buttons-container');
+
+ Object.keys(universalFields).forEach(fieldId => {
+ const field = universalFields[fieldId];
+
+ if (!field || !field.name) return;
+
+ const $fieldBtn = $(`
+
+ `);
+
+ $universalButtonsContainer.append($fieldBtn);
+ });
+
+ $container.append($universalFieldGroup);
+ }
+ }
+
+ // 5. Добавляем раздел с полями отчетов
+ if (frm.doc.report_fields_storage) {
+ const reportFields = JSON.parse(frm.doc.report_fields_storage || "{}");
+
+ if (Object.keys(reportFields).length > 0) {
+ const $reportFieldGroup = $(`
+
+ `);
+
+ const $reportButtonsContainer = $reportFieldGroup.find('.field-buttons-container');
+
+ Object.keys(reportFields).forEach(fieldId => {
+ const field = reportFields[fieldId];
+
+ if (!field || !field.name) return;
+
+ const $fieldBtn = $(`
+
+ `);
+
+ $reportButtonsContainer.append($fieldBtn);
+ });
+
+ $container.append($reportFieldGroup);
+ }
+ }
+
+ // 6. Добавляем группу для полей из конкретных строк табличных частей
+ const $tableFieldGroup = $(`
+
+
Поля из строк табличных частей
+
+
+
+
+ `);
+
+ $container.append($tableFieldGroup);
+
+ // Добавляем обработчик для кнопки выбора поля из строки табличной части
+ $tableFieldGroup.find('.select-table-field-in-row').on('click', function() {
+ const targetContainer = $modal.find(".table-row-formula");
+ openTableFieldSelector(frm, targetContainer, false);
+ });
+
+ // 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' :
+ $(this).hasClass('report-field-btn') ? 'report-field' : 'field';
+
+ // Добавляем в формулу
+ const $token = $(`
${fieldText}×`);
+ $formulaContainer.append($token).append(' ');
+
+ // Добавляем обработчики к токену
+ addTokenHandlers($formulaContainer);
+ });
+
+ if (callback) callback();
+ }
});
}