Jelajahi Sumber

Ticket #5186 - Tasks: Functionality improvements. Point 2.

AntonLV 11 bulan lalu
induk
melakukan
381aff03fa

+ 5 - 3
modules/boonex/tasks/classes/BxTasksConfig.php

@@ -229,17 +229,19 @@ class BxTasksConfig extends BxBaseModTextConfig
                 'txt_err_cannot_perform_action' => '_bx_tasks_txt_err_cannot_perform_action',
             ),
         ));
-        
+
         $this->_aJsClasses = array_merge($this->_aJsClasses, [
             'manage_tools' => 'BxTasksManageTools',
             'categories' => 'BxDolCategories',
-            'tasks' => 'BxTasksView'
+            'tasks' => 'BxTasksView',
+            'time' => 'BxTasksTime'
         ]);
 
         $this->_aJsObjects = array_merge($this->_aJsObjects, [
             'manage_tools' => 'oBxTasksManageTools',
             'categories' => 'oBxDolCategories',
-            'tasks' => 'oBxTasksView'
+            'tasks' => 'oBxTasksView',
+            'time' => 'oBxTasksTime'
         ]);
 
         $this->_aGridObjects = [

+ 3 - 0
modules/boonex/tasks/classes/BxTasksGridTime.php

@@ -198,6 +198,9 @@ class BxTasksGridTime extends BxTasksGridTimeAdministration
         $this->__getFilterControls();
 
         $sContent = $this->_getFilterSelectOne($this->_sFilter2Name, $this->_sFilter2Value, $this->_aFilter2Values);
+        $sContent .= $this->_getFilterDatePicker($this->_sFilter3Name, $this->_sFilter3Value);
+        $sContent .= $this->_getFilterLabel('-');
+        $sContent .= $this->_getFilterDatePicker($this->_sFilter4Name, $this->_sFilter4Value);
         $sContent .= $this->_getSearchInput();
 
         return $sContent;

+ 24 - 5
modules/boonex/tasks/classes/BxTasksGridTimeAdministration.php

@@ -18,6 +18,10 @@ class BxTasksGridTimeAdministration extends BxBaseModGeneralGrid
     protected $_sFilter2Name;
     protected $_sFilter2Value;
     protected $_aFilter2Values;
+    protected $_sFilter3Name;   //--- Date from
+    protected $_sFilter3Value;
+    protected $_sFilter4Name;   //--- Date to
+    protected $_sFilter4Value;
 
     public function __construct ($aOptions, $oTemplate = false)
     {
@@ -73,6 +77,12 @@ class BxTasksGridTimeAdministration extends BxBaseModGeneralGrid
             $this->_sFilter2Value = bx_process_input($sFilter2);
             $this->_aQueryAppend[$this->_sFilter2Name] = $this->_sFilter2Value;
         }
+
+        /*
+         * Filters by date from/to
+         */
+        $this->_sFilter3Name = 'filter3';
+        $this->_sFilter4Name = 'filter4';
     }
 
     public function performActionCalculate()
@@ -170,6 +180,9 @@ class BxTasksGridTimeAdministration extends BxBaseModGeneralGrid
 
         $sContent = $this->_getFilterSelectOne($this->_sFilter1Name, $this->_sFilter1Value, $this->_aFilter1Values);
         $sContent .= $this->_getFilterSelectOne($this->_sFilter2Name, $this->_sFilter2Value, $this->_aFilter2Values);
+        $sContent .= $this->_getFilterDatePicker($this->_sFilter3Name, $this->_sFilter3Value);
+        $sContent .= $this->_getFilterLabel('-');
+        $sContent .= $this->_getFilterDatePicker($this->_sFilter4Name, $this->_sFilter4Value);
         $sContent .= $this->_getSearchInput();
 
         return $sContent;
@@ -177,7 +190,7 @@ class BxTasksGridTimeAdministration extends BxBaseModGeneralGrid
 
     protected function _getFilterOnChange()
     {
-        return $this->_oModule->_oConfig->getJsObject('manage_tools') . '.onChangeFilter(this)';
+        return $this->_oModule->_oConfig->getJsObject('time') . '.onChangeFilter(this)';
     }
 
     protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
@@ -186,12 +199,12 @@ class BxTasksGridTimeAdministration extends BxBaseModGeneralGrid
 
         $aFilterParts = explode($this->_sParamsDivider, $sFilter);
         switch (substr_count($sFilter, $this->_sParamsDivider)) {
-            case 1:
-                list($this->_sFilter1Value, $sFilter) = $aFilterParts;
+            case 3:
+                list($this->_sFilter2Value, $this->_sFilter3Value, $this->_sFilter4Value, $sFilter) = $aFilterParts;
                 break;
 
-            case 2:
-                list($this->_sFilter1Value, $this->_sFilter2Value, $sFilter) = $aFilterParts;
+            case 4:
+                list($this->_sFilter1Value, $this->_sFilter2Value, $this->_sFilter3Value, $this->_sFilter4Value, $sFilter) = $aFilterParts;
                 break;
         }
 
@@ -200,6 +213,12 @@ class BxTasksGridTimeAdministration extends BxBaseModGeneralGrid
 
         if(!empty($this->_sFilter2Value))
             $this->_aOptions['source'] .= $this->_oModule->_oDb->prepareAsString(" AND `ttt`.`object_id`=?", $this->_sFilter2Value);
+        
+        if(!empty($this->_sFilter3Value))
+            $this->_aOptions['source'] .= $this->_oModule->_oDb->prepareAsString(" AND `ttt`.`value_date`>=?", strtotime($this->_sFilter3Value));
+
+        if(!empty($this->_sFilter4Value))
+            $this->_aOptions['source'] .= $this->_oModule->_oDb->prepareAsString(" AND `ttt`.`value_date`<=?", strtotime($this->_sFilter4Value));
 
         return parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage);
     }

+ 5 - 3
modules/boonex/tasks/classes/BxTasksModule.php

@@ -299,10 +299,12 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
                 bx_api_get_block('grid', $oGrid->getCodeAPI())
             ];
 
-        $this->_oTemplate->addCss(['manage_tools.css']);
-        $this->_oTemplate->addJs(['modules/base/text/js/|manage_tools.js', 'manage_tools.js']);
+        list($aCssCalendar, $aJsCalendar) = BxBaseFormView::getCssJsCalendar();
+
+        $this->_oTemplate->addCss(array_merge($aCssCalendar, ['manage_tools.css', 'time.css']));
+        $this->_oTemplate->addJs(array_merge($aJsCalendar, ['modules/base/text/js/|manage_tools.js', 'time.js']));
         $this->_oTemplate->addJsTranslation(['_sys_grid_search']);
-        return $this->_oTemplate->getJsCode('manage_tools', [
+        return $this->_oTemplate->getJsCode('time', [
             'sObjNameGrid' => $sGridObject
         ]) . $oGrid->getCode();
     }

+ 4 - 3
modules/boonex/tasks/install/sql/enable.sql

@@ -299,8 +299,8 @@ INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `f
 
 -- GRIDS: moderation time tools
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
-('bx_tasks_time_administration', 'Sql', 'SELECT `ttt`.*, `tt`.`title` FROM `bx_tasks_time_track` AS `ttt` INNER JOIN `bx_tasks_tasks` AS `tt` ON `ttt`.`object_id`=`tt`.`id` WHERE 1 ', 'bx_tasks_time_track', 'id', 'date', '', '', 20, NULL, 'start', '', 'ttt`.`text,tt`.`title,tt`.`text', '', 'like', 'date', '', 192, 'BxTasksGridTimeAdministration', 'modules/boonex/tasks/classes/BxTasksGridTimeAdministration.php'),
-('bx_tasks_time', 'Sql', 'SELECT `ttt`.*, `tt`.`title` FROM `bx_tasks_time_track` AS `ttt` INNER JOIN `bx_tasks_tasks` AS `tt` ON `ttt`.`object_id`=`tt`.`id` WHERE 1 ', 'bx_tasks_time_track', 'id', 'date', '', '', 20, NULL, 'start', '', 'ttt`.`text,tt`.`title,tt`.`text', '', 'like', 'date', '', 2147483647, 'BxTasksGridTime', 'modules/boonex/tasks/classes/BxTasksGridTime.php');
+('bx_tasks_time_administration', 'Sql', 'SELECT `ttt`.*, `tt`.`title` FROM `bx_tasks_time_track` AS `ttt` INNER JOIN `bx_tasks_tasks` AS `tt` ON `ttt`.`object_id`=`tt`.`id` WHERE 1 ', 'bx_tasks_time_track', 'id', 'value_date', '', '', 20, NULL, 'start', '', 'ttt`.`text,tt`.`title,tt`.`text', '', 'like', 'date', '', 192, 'BxTasksGridTimeAdministration', 'modules/boonex/tasks/classes/BxTasksGridTimeAdministration.php'),
+('bx_tasks_time', 'Sql', 'SELECT `ttt`.*, `tt`.`title` FROM `bx_tasks_time_track` AS `ttt` INNER JOIN `bx_tasks_tasks` AS `tt` ON `ttt`.`object_id`=`tt`.`id` WHERE 1 ', 'bx_tasks_time_track', 'id', 'value_date', '', '', 20, NULL, 'start', '', 'ttt`.`text,tt`.`title,tt`.`text', '', 'like', 'date', '', 2147483647, 'BxTasksGridTime', 'modules/boonex/tasks/classes/BxTasksGridTime.php');
 
 INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
 ('bx_tasks_time_administration', 'checkbox', '_sys_select', '2%', 0, 0, '', 1),
@@ -322,7 +322,8 @@ INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon
 ('bx_tasks_time_administration', 'bulk', 'delete', '_bx_tasks_grid_action_title_tm_delete', '', 0, 1, 2),
 
 ('bx_tasks_time', 'independent', 'add', '_bx_tasks_grid_action_title_tm_add', '', 0, 0, 1),
-('bx_tasks_time', 'bulk', 'delete', '_bx_tasks_grid_action_title_tm_delete', '', 0, 1, 1),
+('bx_tasks_time', 'bulk', 'calculate', '_bx_tasks_grid_action_title_tm_calculate', '', 0, 0, 1),
+('bx_tasks_time', 'bulk', 'delete', '_bx_tasks_grid_action_title_tm_delete', '', 0, 1, 2),
 ('bx_tasks_time', 'single', 'edit', '_bx_tasks_grid_action_title_tm_edit', 'pencil-alt', 1, 0, 1),
 ('bx_tasks_time', 'single', 'delete', '_bx_tasks_grid_action_title_tm_delete', 'remove', 1, 1, 2);
 

+ 45 - 0
modules/boonex/tasks/js/time.js

@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT 
+ * @defgroup    Tasks Tasks
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+function BxTasksTime(oOptions)
+{
+    BxBaseModTextManageTools.call(this, oOptions);
+
+    this._sObjName = oOptions.sObjName == undefined ? 'oBxTasksTime' : oOptions.sObjName;
+}
+
+BxTasksTime.prototype = Object.create(BxBaseModTextManageTools.prototype);
+BxTasksTime.prototype.constructor = BxTasksTime;
+
+BxTasksTime.prototype.onChangeFilter = function(oFilter) {
+    var $this = this;
+    var oFilter1 = $('#bx-grid-filter1-' + this._sObjNameGrid);
+    var sValueFilter1 = oFilter1.length > 0 ? oFilter1.val() : '';
+
+    var oFilter2 = $('#bx-grid-filter2-' + this._sObjNameGrid);
+    var sValueFilter2 = oFilter2.length > 0 ? oFilter2.val() : '';
+    
+    var oFilter3 = $('#bx-grid-filter3-' + this._sObjNameGrid);
+    var sValueFilter3 = oFilter3.length > 0 ? oFilter3.val() : '';
+    
+    var oFilter4 = $('#bx-grid-filter4-' + this._sObjNameGrid);
+    var sValueFilter4 = oFilter4.length > 0 ? oFilter4.val() : '';
+
+    var oSearch = $('#bx-grid-search-' + this._sObjNameGrid);
+    var sValueSearch = oSearch.length > 0 ? oSearch.val() : '';
+    if(sValueSearch == _t('_sys_grid_search'))
+        sValueSearch = '';
+
+    clearTimeout($this._iSearchTimeoutId);
+    $this._iSearchTimeoutId = setTimeout(function () {
+        glGrids[$this._sObjNameGrid].setFilter(sValueFilter1 + $this._sParamsDivider + sValueFilter2 + $this._sParamsDivider + sValueFilter3 + $this._sParamsDivider + sValueFilter4 + $this._sParamsDivider + sValueSearch, true);
+    }, 500);
+};
+
+/** @} */

+ 5 - 0
modules/boonex/tasks/template/css/time.css

@@ -0,0 +1,5 @@
+/*-- Manage Time Grid --*/
+.bx-grid-header #bx-form-element-filter3,
+.bx-grid-header #bx-form-element-filter4 {
+    width: 7.0rem;
+}