mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-22 06:30:59 +01:00
W.I.P of holiday report for calendar app
This commit is contained in:
parent
96b39eefe6
commit
6a035feb6f
@ -26,11 +26,11 @@ use EGroupware\Api\Etemplate;
|
|||||||
* days/ or weeks.
|
* days/ or weeks.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class calendar_holiday_report {
|
class calendar_holiday_report extends calendar_ui{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Public functions allowed to get called
|
* Public functions allowed to get called
|
||||||
*
|
*
|
||||||
* @var type
|
* @var type
|
||||||
*/
|
*/
|
||||||
var $public_functions = array(
|
var $public_functions = array(
|
||||||
@ -42,8 +42,8 @@ class calendar_holiday_report {
|
|||||||
*/
|
*/
|
||||||
function __construct()
|
function __construct()
|
||||||
{
|
{
|
||||||
$this->bo = new calendar_bo();
|
parent::__construct(true); // call the parent's constructor
|
||||||
$this->tmpl = new Etemplate('calendar.holiday_report');
|
$this->tmpl = new Api\Etemplate('calendar.holiday_report');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,9 +53,9 @@ class calendar_holiday_report {
|
|||||||
*/
|
*/
|
||||||
public function index ($content = null)
|
public function index ($content = null)
|
||||||
{
|
{
|
||||||
|
$cat = new Api\Categories($GLOBALS['egw_info']['user']['account_id'],'calendar');
|
||||||
if (is_null($content))
|
if (is_null($content))
|
||||||
{
|
{
|
||||||
$cat = new Api\Categories($GLOBALS['egw_info']['user']['account_id'],'calendar');
|
|
||||||
$cats = $cat->return_sorted_array($start=0, false, '', 'ASC', 'cat_name', true, 0, true);
|
$cats = $cat->return_sorted_array($start=0, false, '', 'ASC', 'cat_name', true, 0, true);
|
||||||
|
|
||||||
foreach ($cats as &$value)
|
foreach ($cats as &$value)
|
||||||
@ -65,15 +65,80 @@ class calendar_holiday_report {
|
|||||||
'user' => '',
|
'user' => '',
|
||||||
'weekend' => '',
|
'weekend' => '',
|
||||||
'holidays' => '',
|
'holidays' => '',
|
||||||
'min_days' => 4
|
'min_days' => 4,
|
||||||
|
'enable' => true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
list($button) = @each($content['button']);
|
||||||
|
$categories = array ();
|
||||||
|
$users_map = $GLOBALS['egw']->accounts->search(array('type'=>'accounts', active=>true));
|
||||||
|
$users = array_keys($users_map);
|
||||||
|
$result = array();
|
||||||
|
|
||||||
|
// report button pressed
|
||||||
|
if (!empty($button))
|
||||||
|
{
|
||||||
|
Api\Preferences::change_preference($content, $name, $value);
|
||||||
|
foreach ($content['grid'] as $row)
|
||||||
|
{
|
||||||
|
if ($row['enable'])
|
||||||
|
{
|
||||||
|
$categories [] = $row['cat_id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$params = array(
|
||||||
|
'startdate' => $content['start'],
|
||||||
|
'enddate' => $content['end'],
|
||||||
|
'users' => $users,
|
||||||
|
'cat_id' => $categories
|
||||||
|
);
|
||||||
|
$events = $this->bo->search($params);
|
||||||
|
|
||||||
|
// iterate over found events
|
||||||
|
foreach($events as $event)
|
||||||
|
{
|
||||||
|
$cats = explode(',',$event['category']);
|
||||||
|
if (is_array($cats))
|
||||||
|
{
|
||||||
|
foreach($cats as $val)
|
||||||
|
{
|
||||||
|
if (in_array($val, $categories)) $cat_index = (int)$val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$result [$event['owner']]['user_name'] = $users_map[$event['owner']]['account_lid'];
|
||||||
|
|
||||||
|
// number of days of event (in sec)
|
||||||
|
$days = $event['end'] - $event['start'];
|
||||||
|
|
||||||
|
if (isset($result[$event['owner']][$cat->id2name($cat_index)]))
|
||||||
|
{
|
||||||
|
$result[$event['owner']][$cat->id2name($cat_index)] =
|
||||||
|
$result[$event['owner']][$cat->id2name($cat_index)] + $days;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$result[$event['owner']][$cat->id2name($cat_index)] = $days;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// calculates total days for each user based on cats
|
||||||
|
foreach ($result as &$record)
|
||||||
|
{
|
||||||
|
$total = 0;
|
||||||
|
foreach($record as $c => $value)
|
||||||
|
{
|
||||||
|
if ($c != 'user_name') $total += (int)$value;
|
||||||
|
}
|
||||||
|
$record ['total_days'] = $total;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
$preserv = $content;
|
||||||
$this->tmpl->exec('calendar.holiday_report', $content);
|
$this->tmpl->exec('calendar.calendar_holiday_report.index', $content, array(), array(), $preserv, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -524,7 +524,7 @@ class calendar_ui
|
|||||||
);
|
);
|
||||||
$GLOBALS['egw']->framework->sidebox($appname,lang('Admin'),$file,'admin');
|
$GLOBALS['egw']->framework->sidebox($appname,lang('Admin'),$file,'admin');
|
||||||
}
|
}
|
||||||
display_sidebox('calendar', lang('Utilities'), array('Holiday report' => Egw::link('/index.php','menuaction=calendar.calendar_holiday_report.index')));
|
display_sidebox('calendar', lang('Utilities'), array('Holiday report' => Egw::link('/index.php','menuaction=calendar.calendar_holiday_report.index&appname=calendar&ajax=true')));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -247,6 +247,9 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend(
|
|||||||
this.filter_change();
|
this.filter_change();
|
||||||
},this),0);
|
},this),0);
|
||||||
break;
|
break;
|
||||||
|
case 'calendar.holiday_report':
|
||||||
|
this.holiday_report_init();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Record the templates for the views so we can switch between them
|
// Record the templates for the views so we can switch between them
|
||||||
@ -3736,6 +3739,49 @@ app.classes.calendar = (function(){ "use strict"; return AppJS.extend(
|
|||||||
d.setUTCDate(d.getUTCDate() + (7 * delta));
|
d.setUTCDate(d.getUTCDate() + (7 * delta));
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialization function in order to set/unset
|
||||||
|
* categories status.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
holiday_report_init: function ()
|
||||||
|
{
|
||||||
|
var content = this.et2.getArrayMgr('content').data;
|
||||||
|
for (var i=0;i<content.grid.length;i++)
|
||||||
|
{
|
||||||
|
if (content.grid[i] != null) this.holiday_report_enable({name:i+'', checked:content.grid[i]['enable']});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set/unset selected category's row
|
||||||
|
*
|
||||||
|
* @param {type} _widget
|
||||||
|
* @returns {undefined}
|
||||||
|
*/
|
||||||
|
holiday_report_enable: function (_widget)
|
||||||
|
{
|
||||||
|
var widgets = ['[user]','[weekend]','[holidays]','[min_days]'];
|
||||||
|
var row_id = _widget.name.match(/\d+/);
|
||||||
|
var w = {};
|
||||||
|
for (var i=0;i<widgets.length;i++)
|
||||||
|
{
|
||||||
|
w = this.et2.getWidgetById(row_id+widgets[i]);
|
||||||
|
if (w) w.set_readonly(!_widget.checked);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {type} _widget
|
||||||
|
* @returns {undefined}
|
||||||
|
*/
|
||||||
|
holiday_report_send: function (_widget)
|
||||||
|
{
|
||||||
|
var content = this.et2.getArrayMgr('content').data;
|
||||||
|
egw.set_preference('calendar','holiday_report',JSON.stringify(content.grid));
|
||||||
|
this.et2._inst.submit(_widget);
|
||||||
}
|
}
|
||||||
});}).call(this);
|
});}).call(this);
|
||||||
|
|
||||||
|
@ -30,9 +30,11 @@ Egroupware
|
|||||||
<column/>
|
<column/>
|
||||||
<column/>
|
<column/>
|
||||||
<column/>
|
<column/>
|
||||||
|
<column/>
|
||||||
</columns>
|
</columns>
|
||||||
<rows>
|
<rows>
|
||||||
<row class="th">
|
<row class="th">
|
||||||
|
<description value="Select"/>
|
||||||
<description value="Category"/>
|
<description value="Category"/>
|
||||||
<description align="center" value="User"/>
|
<description align="center" value="User"/>
|
||||||
<description align="center" value="Weekend"/>
|
<description align="center" value="Weekend"/>
|
||||||
@ -40,8 +42,9 @@ Egroupware
|
|||||||
<description align="center" value="Min days as week"/>
|
<description align="center" value="Min days as week"/>
|
||||||
</row>
|
</row>
|
||||||
<row class="row">
|
<row class="row">
|
||||||
|
<checkbox id="${row}[enable]" onchange="app.calendar.holiday_report_enable"/>
|
||||||
<taglist-cat id="${row}[cat_id]" readonly="true" width="500" class="select-cat"/>
|
<taglist-cat id="${row}[cat_id]" readonly="true" width="500" class="select-cat"/>
|
||||||
<checkbox align="center" id="${row}[user]"/>
|
<checkbox align="center" id="${row}[user]" disable="false"/>
|
||||||
<checkbox align="center" id="${row}[weekend]"/>
|
<checkbox align="center" id="${row}[weekend]"/>
|
||||||
<checkbox align="center" id="${row}[holidays]"/>
|
<checkbox align="center" id="${row}[holidays]"/>
|
||||||
<number type="integer" align="center" id="${row}[min_days]"/>
|
<number type="integer" align="center" id="${row}[min_days]"/>
|
||||||
@ -52,10 +55,10 @@ Egroupware
|
|||||||
</rows>
|
</rows>
|
||||||
</grid>
|
</grid>
|
||||||
<hbox class="dialogFooterToolbar">
|
<hbox class="dialogFooterToolbar">
|
||||||
<description value="Range"/>
|
<description value="Date range"/>
|
||||||
<date id="start" label="Start"/>
|
<date id="start" label="Start"/>
|
||||||
<date id="end" label="End"/>
|
<date id="end" label="End"/>
|
||||||
<button id="report" label="Report"/>
|
<button id="button[report]" label="Report" background_image="1" image="template" onclick="app.calendar.holiday_report_send" />
|
||||||
</hbox>
|
</hbox>
|
||||||
</template>
|
</template>
|
||||||
</overlay>
|
</overlay>
|
||||||
|
Loading…
Reference in New Issue
Block a user