forked from extern/egroupware
Calendar category report:
- Fix weekend and holidays don't for multidays events
This commit is contained in:
parent
76f5a91c75
commit
2d100f082d
@ -90,10 +90,11 @@ class calendar_category_report extends calendar_ui{
|
|||||||
foreach ($events as &$event)
|
foreach ($events as &$event)
|
||||||
{
|
{
|
||||||
$categories = explode(',', $event['category']);
|
$categories = explode(',', $event['category']);
|
||||||
if (!in_array($cat_id, $categories) || ($weekend && self::isWeekend($event['start'])) || (!$holidays && $this->isHoliday($event['start']))) continue;
|
if (!in_array($cat_id, $categories)) continue;
|
||||||
|
|
||||||
// processing day as timestamp
|
// processing day as timestamp
|
||||||
$day_timestamp = strtotime($day_index);
|
$day_timestamp = strtotime($day_index);
|
||||||
|
|
||||||
// week number
|
// week number
|
||||||
$week_number = date('W', $day_timestamp);
|
$week_number = date('W', $day_timestamp);
|
||||||
|
|
||||||
@ -101,10 +102,28 @@ class calendar_category_report extends calendar_ui{
|
|||||||
// check if multidays event starts before start range
|
// check if multidays event starts before start range
|
||||||
$is_over_range_event = $day_timestamp< $event['end'] && $start_range > $event['start'];
|
$is_over_range_event = $day_timestamp< $event['end'] && $start_range > $event['start'];
|
||||||
|
|
||||||
|
$is_multiple_days_event = $event['start']< $day_timestamp && $day_timestamp< $event['end'];
|
||||||
|
|
||||||
|
|
||||||
|
if (($weekend && self::isWeekend($day_timestamp)) || (!$holidays && $this->isHoliday($day_timestamp)))
|
||||||
|
{
|
||||||
|
// calculate reduction of holidays or weekend amounts from
|
||||||
|
// multidays event
|
||||||
|
if ($is_multiple_days_event)
|
||||||
|
{
|
||||||
|
$day_diff_to_end = $event['end'] - $day_timestamp;
|
||||||
|
$reduction_amount = $day_diff_to_end > 86400? 86400: $day_diff_to_end;
|
||||||
|
$events_log['reductions'][$event['owner']][$cat_id] = $events_log['reductions'][$event['owner']][$cat_id] + $reduction_amount;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Mark multidays event as counted after the first day of event, therefore
|
// Mark multidays event as counted after the first day of event, therefore
|
||||||
// we can procced calculating the amount of the event via the first day
|
// we can procced calculating the amount of the event via the first day
|
||||||
// and mark as counted for the rest of the days to avoid miscalculation.
|
// and mark as counted for the rest of the days to avoid miscalculation.
|
||||||
if ($event['start']< $day_timestamp && $day_timestamp< $event['end'])
|
if ($event['start']< $day_timestamp && $day_timestamp< $event['end'] &&
|
||||||
|
($events_log[$week_number][$event['id']]['counted'] ||
|
||||||
|
$events_log[$previous_week_number][$event['id']]['counted']))
|
||||||
{
|
{
|
||||||
$events_log[$week_number][$event['id']]['counted'] = true;
|
$events_log[$week_number][$event['id']]['counted'] = true;
|
||||||
}
|
}
|
||||||
@ -136,6 +155,7 @@ class calendar_category_report extends calendar_ui{
|
|||||||
{
|
{
|
||||||
$amount = $event['end'] - $event['start'];
|
$amount = $event['end'] - $event['start'];
|
||||||
}
|
}
|
||||||
|
$events_log[$week_number][$event['id']]['counted'] = true;
|
||||||
}
|
}
|
||||||
// store day
|
// store day
|
||||||
$day[$event['owner']][$cat_id][$event['id']] = array (
|
$day[$event['owner']][$cat_id][$event['id']] = array (
|
||||||
@ -330,7 +350,9 @@ class calendar_category_report extends calendar_ui{
|
|||||||
$cats_row = array();
|
$cats_row = array();
|
||||||
foreach ($categories as $cat_id)
|
foreach ($categories as $cat_id)
|
||||||
{
|
{
|
||||||
$cats_row [$cat_id] = ceil($cats_data[$cat_id]['amount']? $cats_data[$cat_id]['amount'] / $cats_data[$cat_id]['unit']: 0);
|
$cats_row [$cat_id] = ceil($cats_data[$cat_id]['amount']?
|
||||||
|
($cats_data[$cat_id]['amount'] - $events_log['reductions'][$user_id][$cat_id]) /
|
||||||
|
$cats_data[$cat_id]['unit']: 0);
|
||||||
}
|
}
|
||||||
// printout each row into file
|
// printout each row into file
|
||||||
fputcsv($fp, array_values(array(Api\Accounts::id2name($user_id, 'account_fullname')) + $cats_row));
|
fputcsv($fp, array_values(array(Api\Accounts::id2name($user_id, 'account_fullname')) + $cats_row));
|
||||||
|
Loading…
Reference in New Issue
Block a user