From 6009cb4ed95dce92a5399363c8bf5a853389e3ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cornelius=20Wei=C3=9F?= Date: Mon, 15 Jan 2024 12:02:44 +0100 Subject: [PATCH 1/2] tweak(Sales): limit eval dims to division --- tine20/Sales/Controller/Division.php | 6 +++++- .../Sales/Model/DivisionEvalDimensionItem.php | 3 +++ tine20/Sales/Setup/Initialize.php | 7 ++++++- .../Sales/js/Document/AbstractEditDialog.js | 21 +++++++++++++++++++ .../js/widgets/grid/PickerGridPanel.js | 2 +- 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/tine20/Sales/Controller/Division.php b/tine20/Sales/Controller/Division.php index ac5e80db276..572cc71fa09 100644 --- a/tine20/Sales/Controller/Division.php +++ b/tine20/Sales/Controller/Division.php @@ -209,7 +209,11 @@ public static function evalDimModelConfigHook(array &$_fields, Tinebase_ModelCon $expander = $mc->jsonExpander; $expander[Tinebase_Record_Expander::EXPANDER_PROPERTIES][Tinebase_Model_EvaluationDimension::FLD_ITEMS] - [Tinebase_Record_Expander::EXPANDER_PROPERTIES]['divisions'] = []; + [Tinebase_Record_Expander::EXPANDER_PROPERTIES]['divisions'] = [ + Tinebase_Record_Expander::EXPANDER_PROPERTIES => [ + Sales_Model_DivisionEvalDimensionItem::FLD_DIVISION_ID => [], + ] + ]; $mc->setJsonExpander($expander); } diff --git a/tine20/Sales/Model/DivisionEvalDimensionItem.php b/tine20/Sales/Model/DivisionEvalDimensionItem.php index 687a21d9062..620c8837b4f 100644 --- a/tine20/Sales/Model/DivisionEvalDimensionItem.php +++ b/tine20/Sales/Model/DivisionEvalDimensionItem.php @@ -32,6 +32,8 @@ class Sales_Model_DivisionEvalDimensionItem extends Tinebase_Record_NewAbstract self::MODEL_NAME => self::MODEL_NAME_PART, self::MODLOG_ACTIVE => true, self::IS_DEPENDENT => true, + self::RECORD_NAME => 'Division', // gettext('GENDER_Division') + self::RECORDS_NAME => 'Divisions', // ngettext('Division', 'Divisions', n) self::JSON_EXPANDER => [ Tinebase_Record_Expander::EXPANDER_PROPERTIES => [ @@ -56,6 +58,7 @@ class Sales_Model_DivisionEvalDimensionItem extends Tinebase_Record_NewAbstract self::FIELDS => [ self::FLD_DIVISION_ID => [ + self::LABEL => 'Division', // _('Division') self::TYPE => self::TYPE_RECORD, self::CONFIG => [ self::APP_NAME => Sales_Config::APP_NAME, diff --git a/tine20/Sales/Setup/Initialize.php b/tine20/Sales/Setup/Initialize.php index 3bdfd53ace2..78aebfa8458 100644 --- a/tine20/Sales/Setup/Initialize.php +++ b/tine20/Sales/Setup/Initialize.php @@ -126,7 +126,7 @@ public static function createTbSystemCFEvaluationDimension(): void 'is_system' => true, 'definition' => [ Tinebase_Model_CustomField_Config::DEF_FIELD => [ - TMCC::LABEL => 'Sales Divisions', // _('Sales Divisions') + TMCC::LABEL => 'Limit to Sales Divisions', // _('Limit to Sales Divisions') TMCC::TYPE => TMCC::TYPE_RECORDS, TMCC::CONFIG => [ TMCC::APP_NAME => Sales_Config::APP_NAME, @@ -134,6 +134,11 @@ public static function createTbSystemCFEvaluationDimension(): void TMCC::REF_ID_FIELD => Sales_Model_DivisionEvalDimensionItem::FLD_EVAL_DIMENSION_ITEM_ID, TMCC::DEPENDENT_RECORDS => true, ], + TMCC::UI_CONFIG => [ + 'searchComboConfig' => [ + 'useEditPlugin' => false, + ], + ] ], ] ], true)); diff --git a/tine20/Sales/js/Document/AbstractEditDialog.js b/tine20/Sales/js/Document/AbstractEditDialog.js index a5224f10b6a..f0cd026cf2e 100644 --- a/tine20/Sales/js/Document/AbstractEditDialog.js +++ b/tine20/Sales/js/Document/AbstractEditDialog.js @@ -111,6 +111,27 @@ Tine.Sales.Document_AbstractEditDialog = Ext.extend(Tine.widgets.dialog.EditDial field.setReadOnly(booked); } }); + + // handle eval_dim division subfilter + this.getForm().items.each((field) => { + if (field.name?.match(/(^eval_dim_.*)/) && !field._documentEditDialogEvalDimBeforeLoadApplied) { + field.store.on('beforeload', (store, options) => { + const category = this.getForm().findField('document_category').selectedRecord; + const division = _.get(category, 'data.division_id.id'); + store.baseParams.filter = store.baseParams.filter.concat([ + { condition: 'OR', filters: [ + { field: 'divisions', operator: 'definedBy', value: null }, + { field: 'divisions', operator: 'definedBy', value: [ + { field: 'division_id', operator: 'equals', value: division } + ]} + ] } + ]) + + }) + field._documentEditDialogEvalDimBeforeLoadApplied = true; + } + }) + }, getRecordFormItems: function() { diff --git a/tine20/Tinebase/js/widgets/grid/PickerGridPanel.js b/tine20/Tinebase/js/widgets/grid/PickerGridPanel.js index c974f829897..29ef2dfaa4e 100644 --- a/tine20/Tinebase/js/widgets/grid/PickerGridPanel.js +++ b/tine20/Tinebase/js/widgets/grid/PickerGridPanel.js @@ -545,7 +545,7 @@ Tine.widgets.grid.PickerGridPanel = Ext.extend(Ext.grid.EditorGridPanel, { var mappingFieldDef = this.recordClass.getField(this.isMetadataModelFor), mappingRecordClass = mappingFieldDef.getRecordClass(); this.searchRecordClass = mappingRecordClass; - searchComboConfig.useEditPlugin = true; + searchComboConfig.useEditPlugin = searchComboConfig.hasOwnProperty('useEditPlugin') ? searchComboConfig.useEditPlugin : true; } Ext.apply(searchComboConfig, { From 122e8777424972ad31fdf36ae1fee2ab52ed937f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cornelius=20Wei=C3=9F?= Date: Mon, 15 Jan 2024 12:04:08 +0100 Subject: [PATCH 2/2] tweak(Tinebase): disable eval dim depends_on for the moment, not clear how to use it --- tine20/Tinebase/Model/EvaluationDimension.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tine20/Tinebase/Model/EvaluationDimension.php b/tine20/Tinebase/Model/EvaluationDimension.php index 3e87afdefcd..098552c3166 100644 --- a/tine20/Tinebase/Model/EvaluationDimension.php +++ b/tine20/Tinebase/Model/EvaluationDimension.php @@ -100,15 +100,15 @@ class Tinebase_Model_EvaluationDimension extends Tinebase_Record_NewAbstract 'xtype' => 'tw-modelspickers', ] ], - self::FLD_DEPENDS_ON => [ - self::TYPE => self::TYPE_RECORD, - self::LABEL => 'Depends on', // _('Depends on') - self::NULLABLE => true, - self::CONFIG => [ - self::APP_NAME => Tinebase_Config::APP_NAME, - self::MODEL_NAME => Tinebase_Model_EvaluationDimension::MODEL_NAME_PART, - ], - ], +// self::FLD_DEPENDS_ON => [ +// self::TYPE => self::TYPE_RECORD, +// self::LABEL => 'Depends on', // _('Depends on') +// self::NULLABLE => true, +// self::CONFIG => [ +// self::APP_NAME => Tinebase_Config::APP_NAME, +// self::MODEL_NAME => Tinebase_Model_EvaluationDimension::MODEL_NAME_PART, +// ], +// ], self::FLD_SORTING => [ self::TYPE => self::TYPE_INTEGER, self::LABEL => 'Sorting', // _('Sorting')