Commit ef6a48d4d9e73dea7c0104117e0526777c44199b

Authored by Benjamin Renard
2 parents 6f8db0b8 fbdbf740

Merge branch 'FER_7862' into amdadev

help/catalogTTFilterHelp 0 → 100644
... ... @@ -0,0 +1,29 @@
  1 +<p>
  2 +The filter function is an only on-screen function, nothing will be saved untill you decide to save the catalog or time table. There is also a "<b><i>Clear Filters</i></b>" button at top right of the grid which will erase all filters applied on screen.<br/>
  3 +</p>
  4 +<p>
  5 +The mechanism is the same for integer and double type columns.<br/>
  6 +Once in the filter menu you will see three boxes you are able to fill:
  7 +<ul>
  8 + <li><b><i> '>'</i></b> box: returns on screen intervals where the values of the filtered column are higher than the number filled in the box.</li>
  9 + <li><b><i> '<'</i></b> box: returns on screen intervals where the values of the filtered column are lower than the number filled in the box.</li>
  10 + <li><b><i> '='</i></b> box: returns on screen intervals where the values of the filtered column are the same than the number filled in the box.</li>
  11 +</ul>
  12 +</p>
  13 +
  14 +<p>
  15 +For the filter on a string column, there is only one box. The filter will return on screen the intervals where the value of the filtered column contains the filled string of characters
  16 +</p>
  17 +
  18 +<p>
  19 +For the date filter, the boxes are self-explanatory:
  20 +<ul>
  21 + <li><b><i> 'before'</i></b> box: returns on screen intervals where the values of the filtered column are before than the date filled in the box.</li>
  22 + <li><b><i> 'after'</i></b> box: returns on screen intervals where the values of the filtered column are after than the date filled in the box.</li>
  23 + <li><b><i> 'on'</i></b> box: returns on screen intervals where the values of the filtered column are the same than the date filled in the box.</li>
  24 +</ul>
  25 +</p>
  26 +
  27 +
  28 +
  29 +
... ...
js/app/views/CatalogUI.js
... ... @@ -17,6 +17,7 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
17 17 'Ext.ux.grid.filter.DateFilter',
18 18 'Ext.ux.grid.filter.NumericFilter',
19 19 'Ext.ux.grid.filter.StringFilter',
  20 + 'amdaUI.CustomFilters',
20 21 'amdaUI.OperationsTT',
21 22 'amdaUI.DescriptionField',
22 23 'Ext.grid.plugin.BufferedRenderer',
... ... @@ -377,7 +378,7 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
377 378 updateDurationColumnsVisibility(this.ownerCt.getGridColumns(), amdaUI.CatalogUI.COL_TO_HIDE_DURATION + '1');
378 379 }
379 380 },
380   - filter: {type: 'numeric'}
  381 + filter: {type: 'customnumericfilter'}
381 382 },
382 383 {
383 384 xtype: 'gridcolumn',
... ... @@ -397,7 +398,7 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
397 398 updateDurationColumnsVisibility(this.ownerCt.getGridColumns(), amdaUI.CatalogUI.COL_TO_HIDE_DURATION + '2');
398 399 }
399 400 },
400   - filter: {type: 'numeric'}
  401 + filter: {type: 'customnumericfilter'}
401 402 },
402 403 {
403 404 xtype: 'gridcolumn',
... ... @@ -417,7 +418,7 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
417 418 updateDurationColumnsVisibility(this.ownerCt.getGridColumns(), amdaUI.CatalogUI.COL_TO_HIDE_DURATION + '3');
418 419 }
419 420 },
420   - filter: {type: 'numeric'}
  421 + filter: {type: 'customnumericfilter'}
421 422 },
422 423 {
423 424 xtype: 'gridcolumn',
... ... @@ -437,7 +438,7 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
437 438 updateDurationColumnsVisibility(this.ownerCt.getGridColumns(), amdaUI.CatalogUI.COL_TO_HIDE_DURATION + '4');
438 439 }
439 440 },
440   - filter: {type: 'numeric'}
  441 + filter: {type: 'customnumericfilter'}
441 442 }
442 443 ];
443 444 var pramColumnWidth = 120 * (1 - 0.7 * (1 - 1 / result.parameters.length));
... ... @@ -462,7 +463,7 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
462 463 xtype: 'gridcolumn',
463 464 width: pramColumnWidth * parseInt(obj.size),
464 465 editor: 'textfield',
465   - filter: {type: 'numeric', menuItemCfgs: {decimalPrecision: 10}},
  466 + filter: {type: 'customnumericfilter', menuItemCfgs: {decimalPrecision: 10}},
466 467 renderer :function(value){
467 468 return (value == "NAN") ? "nan": value;
468 469 },
... ... @@ -488,7 +489,7 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
488 489 hideTrigger: true,
489 490 format: 'Y-m-d\\TH:i:s.u'
490 491 },
491   - filter: {type: 'date', dateFormat: 'Y-m-d'},
  492 + filter: {type: 'customdatefilter', dateFormat: 'Y-m-d'},
492 493 renderer: function (value) {
493 494 if (value != null) {
494 495 if (Ext.isDate(value)) {
... ... @@ -510,14 +511,14 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
510 511 xtype: 'gridcolumn',
511 512 width: pramColumnWidth * parseInt(obj.size),
512 513 editor: 'textfield',
  514 + filter: {type: 'customstringfilter'},
513 515 renderer :function(value){
514 516 var renderedVal = value;
515 517 if(value.toLowerCase().startsWith("http://") ||value.toLowerCase().startsWith("https://")) {
516 518 renderedVal = '<a href="' + value + '" target="_blank">' + value +'</a>';
517 519 }
518 520 return renderedVal;
519   - },
520   - filter: {type: 'string'}
  521 + }
521 522 });
522 523 break;
523 524 case 3: //int
... ... @@ -528,7 +529,7 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
528 529 xtype: 'gridcolumn',
529 530 width: pramColumnWidth * parseInt(obj.size),
530 531 editor: 'textfield',
531   - filter: {type: 'numeric'}
  532 + filter: {type: 'customnumericfilter'}
532 533 });
533 534 break;
534 535 default:
... ... @@ -539,7 +540,7 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
539 540 xtype: 'gridcolumn',
540 541 width: pramColumnWidth * parseInt(obj.size),
541 542 editor: 'textfield',
542   - filter: {type: 'string'}
  543 + filter: {type: 'customstringfilter'}
543 544 });
544 545 }
545 546 fieldsConfig.push(field);
... ... @@ -1041,6 +1042,7 @@ Ext.define(&#39;amdaUI.CatalogUI&#39;, {
1041 1042  
1042 1043 init: function (config)
1043 1044 {
  1045 + amdaUI.CustomFilters.init();
1044 1046 var me = this;
1045 1047 this.object = config.object;
1046 1048 this.fieldName = new Ext.form.field.Text({
... ...
js/app/views/CustomFilters.js 0 → 100644
... ... @@ -0,0 +1,40 @@
  1 +// File: CustomFilters.js
  2 +
  3 +Ext.define('amdaUI.CustomFilters', {
  4 + singleton: true, // Ensure only one instance is created
  5 +
  6 + init: function () {
  7 + this.initCustomFilter('Numeric', 'NumericFilter', 'numericfilter');
  8 + this.initCustomFilter('Date', 'DateFilter', 'datefilter');
  9 + this.initCustomFilter('String', 'StringFilter', 'stringfilter');
  10 + },
  11 +
  12 + initCustomFilter: function (filterName, filterClass, aliasSuffix) {
  13 + Ext.define('amdaUI.Custom' + filterName + 'Filter', {
  14 + extend: 'Ext.ux.grid.filter.' + filterClass,
  15 + alias: 'gridfilter.custom' + aliasSuffix,
  16 +
  17 + helpTitle: 'Help on ' + filterName + ' filter',
  18 + helpFile: 'catalogTTFilterHelp',
  19 +
  20 + init: function () {
  21 + var me = this;
  22 + this.callParent(); // Ensure parent initialization
  23 +
  24 + // Add custom help menu item
  25 + this.menu.add(Ext.create('Ext.menu.Item', {
  26 + text: 'Help on filters',
  27 + iconCls: 'icon-help',
  28 + listeners: {
  29 + click: function (item, e, eOpts) {
  30 + myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.info.id, true, function (module) {
  31 + module.createWindow(me.helpFile, me.helpTitle);
  32 + });
  33 + }
  34 + }
  35 + }));
  36 + }
  37 + });
  38 + }
  39 +});
  40 +
... ...
js/app/views/TimeTableUI.js
... ... @@ -16,6 +16,7 @@ Ext.define(&#39;amdaUI.TimeTableUI&#39;, {
16 16 'Ext.ux.grid.FiltersFeature',
17 17 'Ext.ux.grid.filter.DateFilter',
18 18 'Ext.ux.grid.filter.NumericFilter',
  19 + 'amdaUI.CustomFilters',
19 20 'amdaUI.OperationsTT',
20 21 'amdaUI.StatisticalPlug',
21 22 'amdaUI.DescriptionField',
... ... @@ -399,6 +400,7 @@ Ext.define(&#39;amdaUI.TimeTableUI&#39;, {
399 400  
400 401 init: function (config)
401 402 {
  403 + amdaUI.CustomFilters.init();
402 404 this.object = config.object;
403 405  
404 406 this.fieldName = new Ext.form.field.Text({
... ... @@ -508,12 +510,12 @@ Ext.define(&#39;amdaUI.TimeTableUI&#39;, {
508 510 encode: true, // json encode the filter query
509 511 local: false, // defaults to false (remote filte
510 512 filters: [
511   - {type: 'numeric', dataIndex: 'durationDay'},
512   - {type: 'numeric', dataIndex: 'durationHour'},
513   - {type: 'numeric', dataIndex: 'durationMin'},
514   - {type: 'numeric', dataIndex: 'durationSec'},
515   - {type: 'date', dataIndex: 'start', dateFormat: 'c'},
516   - {type: 'date', dataIndex: 'stop', dateFormat: 'c'}
  513 + {type: 'customnumericfilter', dataIndex: 'durationDay'},
  514 + {type: 'customnumericfilter', dataIndex: 'durationHour'},
  515 + {type: 'customnumericfilter', dataIndex: 'durationMin'},
  516 + {type: 'customnumericfilter', dataIndex: 'durationSec'},
  517 + {type: 'customdatefilter', dataIndex: 'start', dateFormat: 'c'},
  518 + {type: 'customdatefilter', dataIndex: 'stop', dateFormat: 'c'}
517 519 ]
518 520 };
519 521 var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
... ...
php/classes/CatalogCacheFilterObject.php
... ... @@ -47,9 +47,9 @@ class CatalogCacheFilterPartObject extends TimeTableCacheFilterPartObject
47 47 $param_value = floatval($params[$this->paramId]);
48 48 switch ($this->op) {
49 49 case self::$OPERATION_LT :
50   - return ($param_value < $this->value);
51   - case self::$OPERATION_GT :
52 50 return ($param_value > $this->value);
  51 + case self::$OPERATION_GT :
  52 + return ($param_value < $this->value);
53 53 case self::$OPERATION_EQ :
54 54 return ($param_value != $this->value);
55 55 default :
... ... @@ -62,9 +62,9 @@ class CatalogCacheFilterPartObject extends TimeTableCacheFilterPartObject
62 62 $param_value = intval($params[$this->paramId]);
63 63 switch ($this->op) {
64 64 case self::$OPERATION_LT :
65   - return ($param_value < $this->value);
66   - case self::$OPERATION_GT :
67 65 return ($param_value > $this->value);
  66 + case self::$OPERATION_GT :
  67 + return ($param_value < $this->value);
68 68 case self::$OPERATION_EQ :
69 69 return (!(($param_value >= $this->value) && ($param_value <= $this->value+86400)));
70 70 default :
... ... @@ -84,9 +84,9 @@ class CatalogCacheFilterPartObject extends TimeTableCacheFilterPartObject
84 84 $param_value = intval($params[$this->paramId]);
85 85 switch ($this->op) {
86 86 case self::$OPERATION_LT :
87   - return ($param_value < $this->value);
88   - case self::$OPERATION_GT :
89 87 return ($param_value > $this->value);
  88 + case self::$OPERATION_GT :
  89 + return ($param_value < $this->value);
90 90 case self::$OPERATION_EQ :
91 91 return ($param_value != $this->value);
92 92 default :
... ...