Skip to content

Commit

Permalink
#40 [Timesheet] fix: planned working hours, passed hours & worked hou…
Browse files Browse the repository at this point in the history
…rs get & display
  • Loading branch information
evarisk-theo committed Nov 3, 2022
1 parent 971f518 commit fdbad4a
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -378,10 +378,10 @@ public function write_file($objectDocument, $outputlangs, $srctemplatepath, $hid
$firstdaytoshow = dol_get_first_day($datestart['year'], $datestart['mon']);
$firstdaytoshowgmt = dol_get_first_day($datestart['year'], $datestart['mon'], true);
$dayInMonth = cal_days_in_month(CAL_GREGORIAN, $datestart['mon'], $datestart['year']);
$daystarttoshow = $object->date_start - 12 * 60 * 60;
$daystarttoshowgmt = $object->date_start - 12 * 60 * 60;
$daystarttoshow = $object->date_start - 12 * 3600;
$daystarttoshowgmt = $object->date_start - 12 * 3600;
$dayInDateRange = num_between_day($object->date_start, $object->date_end, 1);
$lastdaytoshow = $object->date_end - 12 * 60 * 60;
$lastdaytoshow = $object->date_end - 12 * 3600;

for ($idw = 0; $idw < $dayInDateRange; $idw++) {
$dayinloopfromfirstdaytoshow = dol_time_plus_duree($daystarttoshow, $idw, 'd');
Expand Down
84 changes: 54 additions & 30 deletions view/timesheet/timesheet_card.php
Original file line number Diff line number Diff line change
Expand Up @@ -683,12 +683,12 @@
//$firstdaytoshowgmt = dol_get_first_day($datestart['year'], $datestart['mon'], true);

// Due to Dolibarr issue in common field add we do substract 12 hours in timestamp
$firstdaytoshow = $object->date_start - 12 * 60 * 60;
$firstdaytoshowgmt = $object->date_start - 12 * 60 * 60;
$firstdaytoshow = $object->date_start - 12 * 3600;
$firstdaytoshowgmt = $object->date_start - 12 * 3600;
//$dayInMonth = cal_days_in_month(CAL_GREGORIAN, $datestart['mon'], $datestart['year']);
$dayInMonth = num_between_day($object->date_start, $object->date_end, 1);
//$lastdaytoshow = dol_get_last_day($datestart['year'], $datestart['mon']);
$lastdaytoshow = $object->date_end - 12 * 60 * 60;
$lastdaytoshow = $object->date_end - 12 * 3600;
$currentDayCurrent = date('d', $now);
$currentMonth = date('m', $now);
$isavailable = array();
Expand Down Expand Up @@ -729,62 +729,70 @@
$totalforvisibletasks = loadTimeSpentWithinRange($object->date_start, $object->date_end, 0, $object->fk_user_assign);
}

$start_date = dol_print_date($firstdaytoshow, "dayreduceformat");
$end_date = dol_print_date($lastdaytoshow, "dayreduceformat");

// Planned working hours
print '<tr class="liste_total"><td class="liste_total">';
print $langs->trans("Total");
for ($idw = 0; $idw < $dayInMonth; $idw++) {
$dayinloopfromfirstdaytoshow = dol_time_plus_duree($firstdaytoshow, $idw, 'd');
if ($isavailable[$dayinloopfromfirstdaytoshow]['morning'] && $isavailable[$dayinloopfromfirstdaytoshow]['afternoon']) {
$currentDay = date('l', $dayinloopfromfirstdaytoshow);
$currentDay = 'workinghours_' . strtolower($currentDay);
$workinghoursMonth += $workinghoursArray->{$currentDay} * 60;
$plannedWorkingHours += $workinghoursArray->{$currentDay} * 60;
if ($workinghoursArray->{$currentDay} / 60 > 0) {
$nbworkinghoursMonth++;
}
if ($totalforvisibletasks[$dayinloopfromfirstdaytoshow] > 0) {
if ($totalforvisibletasks['total'] > 0) {
$nbconsumedworkinghoursMonth++;
}
}
}
print '<span class="opacitymediumbycolor"> - ' . $langs->trans("ExpectedWorkedHoursMonthTimeSheet", dol_print_date($firstdaytoshow, "dayreduceformat"), (($dayInMonth == $dayInMonthCurrent) ? dol_print_date($lastdaytoshow, "dayreduceformat") : dol_print_date($now, "dayreduceformat"))) . ' : <strong><a href="' . DOL_URL_ROOT . '/custom/dolisirh/view/workinghours_card.php?id=' . $object->fk_user_assign . '" target="_blank">' . (($workinghoursMonth != 0) ? convertSecondToTime($workinghoursMonth, 'allhourmin') : '00:00') . '</a></strong>';

print '<span class="opacitymediumbycolor"> - ';
print $langs->trans("ExpectedWorkedHoursMonthTimeSheet", $start_date, $end_date);
print ' : <strong><a href="' . DOL_URL_ROOT . '/custom/dolisirh/view/workinghours_card.php?id=' . $object->fk_user_assign . '" target="_blank">';
print (($plannedWorkingHours != 0) ? convertSecondToTime($plannedWorkingHours, 'allhourmin') : '00:00') . '</a></strong>';
print '<span>' . ' - ' . $langs->trans("ExpectedWorkedDayMonth") . ' <strong>' . $nbworkinghoursMonth . '</strong></span>';
print '</span>';
print '</td></tr>';

// Hours passed
print '<tr class="liste_total"><td class="liste_total">';
print $langs->trans("Total");
$workinghoursMonth = 0;
$passedWorkingHours = 0;
for ($idw = 0; $idw < $dayInMonthCurrent; $idw++) {
$dayinloopfromfirstdaytoshow = dol_time_plus_duree($firstdaytoshow, $idw, 'd');
if ($isavailable[$dayinloopfromfirstdaytoshow]['morning'] && $isavailable[$dayinloopfromfirstdaytoshow]['afternoon']) {
$currentDay = date('l', $dayinloopfromfirstdaytoshow);
$currentDay = 'workinghours_' . strtolower($currentDay);
$workinghoursMonth += $workinghoursArray->{$currentDay} * 60;
$passedWorkingHours += $workinghoursArray->{$currentDay} * 60;

}
}
$totalspenttime = $workinghoursMonth/60/60;
print '<span class="opacitymediumbycolor"> - ' . $langs->trans("SpentWorkedHoursMonth", dol_print_date($firstdaytoshow, "dayreduceformat"), (($dayInMonth == $dayInMonthCurrent) ? dol_print_date($lastdaytoshow, "dayreduceformat") : dol_print_date($now, "dayreduceformat"))) . ' : <strong>' . (($workinghoursMonth != 0) ? convertSecondToTime($workinghoursMonth, 'allhourmin') : '00:00') . '</strong></span>';
print '<span class="opacitymediumbycolor"> - ';
print $langs->trans("SpentWorkedHoursMonth", $start_date, $end_date);
print ' : <strong>' . (($passedWorkingHours != 0) ? convertSecondToTime($passedWorkingHours, 'allhourmin') : '00:00') . '</strong></span>';
print '</td></tr>';

//Worked hours
print '<tr class="liste_total"><td class="liste_total">';
print $langs->trans("Total");
if (!empty($totalforvisibletasks)) {
foreach ($totalforvisibletasks as $tasksingle) {
$totalconsumedtime += $tasksingle;
for ($idw = 0; $idw < $dayInMonthCurrent; $idw++) {
$dayinloopfromfirstdaytoshow = dol_time_plus_duree($firstdaytoshow, $idw, 'd');
if ($isavailable[$dayinloopfromfirstdaytoshow]['morning'] && $isavailable[$dayinloopfromfirstdaytoshow]['afternoon']) {
$workedHoursOnDay = loadTimeSpentWithinRange($dayinloopfromfirstdaytoshow, dol_time_plus_duree($dayinloopfromfirstdaytoshow, 1, 'd'), 0, $object->fk_user_assign);
if (!empty($workedHoursOnDay)) {
$workedHoursArray[$dayinloopfromfirstdaytoshow] = $workedHoursOnDay;
$workedHours += $workedHoursOnDay['total'];
}
}
}
$diffworkinghoursMonth = $nbworkinghoursMonth - $nbconsumedworkinghoursMonth;
if ($diffworkinghoursMonth < 0) {
$morecss = colorStringToArray($conf->global->DOLISIRH_EXCEEDED_TIME_SPENT_COLOR);
} elseif ($diffworkinghoursMonth > 0) {
$morecss = colorStringToArray($conf->global->DOLISIRH_NOT_EXCEEDED_TIME_SPENT_COLOR);
} elseif ($diffworkinghoursMonth == 0) {
$morecss = colorStringToArray($conf->global->DOLISIRH_PERFECT_TIME_SPENT_COLOR);
}
print '<span class="opacitymediumbycolor"> - '.$langs->trans("ConsumedWorkedHoursMonth", dol_print_date($firstdaytoshow, "dayreduceformat"), (($dayInMonth == $dayInMonthCurrent) ? dol_print_date($lastdaytoshow, "dayreduceformat") : dol_print_date($now, "dayreduceformat"))).' : <strong>'.convertSecondToTime($totalconsumedtime, 'allhourmin').'</strong>';
print '<span>' . ' - ' . $langs->trans("ConsumedWorkedDayMonth") . ' <strong style="color:'.'rgb('.$morecss[0].','.$morecss[1].','.$morecss[2].')'.'">' . (!empty($nbconsumedworkinghoursMonth) ? $nbconsumedworkinghoursMonth : 0) . '</strong></span>';
print '</span>';
print '</td></tr>';
print '<tr class="liste_total"><td class="liste_total">';
print $langs->trans("Total");
$difftotaltime = $totalspenttime * 60 * 60 - $totalconsumedtime;
$workedDays = is_array($workedHoursArray) ? count($workedHoursArray) : 0;

$difftotaltime = $passedWorkingHours - $workedHours;

if ($difftotaltime < 0) {
$morecss = colorStringToArray($conf->global->DOLISIRH_EXCEEDED_TIME_SPENT_COLOR);
$morecssnotice = 'error';
Expand All @@ -798,7 +806,23 @@
$morecssnotice = 'success';
$noticetitle = $langs->trans('TimeSpentPerfect');
}
print '<span class="opacitymediumbycolor"> - '.$langs->trans("DiffSpentAndConsumedWorkedHoursMonth", dol_print_date($firstdaytoshow, "dayreduceformat"), (($dayInMonth == $dayInMonthCurrent) ? dol_print_date($lastdaytoshow, "dayreduceformat") : dol_print_date($now, "dayreduceformat"))).' : <strong style="color:'.'rgb('.$morecss[0].','.$morecss[1].','.$morecss[2].')'.'">'.(($difftotaltime != 0) ? convertSecondToTime(abs($difftotaltime), 'allhourmin') : '00:00').'</strong></span>';

print '<span class="opacitymediumbycolor"> - ';
print $langs->trans("ConsumedWorkedHoursMonth", $start_date, $end_date);
print ' : <strong>'.convertSecondToTime($workedHours, 'allhourmin').'</strong>';
print '<span>' . ' - ' . $langs->trans("ConsumedWorkedDayMonth") . ' <strong style="color:'.'rgb('.$morecss[0].','.$morecss[1].','.$morecss[2].')'.'">';
print $workedDays . '</strong></span>';
print '</span>';
print '</td></tr>';

//Difference between worked hours & planned working hours
print '<tr class="liste_total"><td class="liste_total">';
print $langs->trans("Total");
print '<span class="opacitymediumbycolor"> - ';
print $langs->trans("DiffSpentAndConsumedWorkedHoursMonth", $start_date, $end_date);
print ' : <strong style="color:'.'rgb('.$morecss[0].','.$morecss[1].','.$morecss[2].')'.'">';
print (($difftotaltime != 0) ? convertSecondToTime(abs($difftotaltime), 'allhourmin') : '00:00').'</strong>';
print '</span>';
print '</td></tr>';

// Other attributes. Fields from hook formObjectOptions and Extrafields.
Expand All @@ -812,7 +836,7 @@

print '<div class="clearboth"></div>'; ?>

<?php if ($workinghoursMonth == 0) : ?>
<?php if ($plannedWorkingHours == 0) : ?>
<div class="wpeo-notice notice-error">
<div class="notice-content">
<div class="notice-title"><?php echo $langs->trans('ErrorConfigWorkingHours') ?></div>
Expand Down
2 changes: 1 addition & 1 deletion view/timespent_day.php
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@
if ($id > 0) {
// We store HOURS in seconds
if ($matches[2] == 'hour') {
$timespent_duration[$id] += $time * 60 * 60;
$timespent_duration[$id] += $time * 3600;
}

// We store MINUTES in seconds
Expand Down
4 changes: 2 additions & 2 deletions view/timespent_month.php
Original file line number Diff line number Diff line change
Expand Up @@ -801,7 +801,7 @@
$workinghoursMonth += $workinghoursArray->{$currentDay} * 60;
}
}
$totalspenttime = $workinghoursMonth/60/60;
$totalspenttime = $workinghoursMonth/3600;
print '<span class="opacitymediumbycolor"> - '.$langs->trans("SpentWorkedHoursMonth", dol_print_date($firstdaytoshow, "dayreduceformat"), (($dayInMonth == $dayInMonthCurrent) ? dol_print_date($lastdaytoshow, "dayreduceformat") : dol_print_date($now, "dayreduceformat"))).' : <strong>'.(($workinghoursMonth != 0) ? convertSecondToTime($workinghoursMonth, 'allhourmin') : '00:00').'</strong></span>';
print '</td>';
if (!empty($arrayfields['timeconsumed']['checked'])) {
Expand Down Expand Up @@ -891,7 +891,7 @@
print '<tr class="liste_total planned-worked-difference">';
print '<td class="liste_total" colspan="'.($colspan + $addcolspan).'">';
print $langs->trans("Total");
$difftotaltime = $totalspenttime * 60 * 60 - $totalconsumedtime;
$difftotaltime = $totalspenttime * 3600 - $totalconsumedtime;
if ($difftotaltime < 0) {
$morecss = colorStringToArray($conf->global->DOLISIRH_EXCEEDED_TIME_SPENT_COLOR);
} elseif ($difftotaltime > 0) {
Expand Down
4 changes: 2 additions & 2 deletions view/timespent_week.php
Original file line number Diff line number Diff line change
Expand Up @@ -907,7 +907,7 @@
$workinghoursWeek += $workinghoursArray->{$currentDay} * 60;
}
}
$totalspenttime = $workinghoursWeek/60/60;
$totalspenttime = $workinghoursWeek/3600;
print '<span class="opacitymediumbycolor"> - '.$langs->trans("SpentWorkedHoursMonth", dol_print_date($firstdaytoshow, "dayreduceformat"), (($nbday == 7) ? dol_print_date($lastdaytoshow, "dayreduceformat") : dol_print_date($now, "dayreduceformat"))).' : <strong>'.(($workinghoursWeek != 0) ? convertSecondToTime($workinghoursWeek, 'allhourmin') : '00:00').'</strong></span>';
print '</td>';
if (!empty($arrayfields['timeconsumed']['checked'])) {
Expand Down Expand Up @@ -999,7 +999,7 @@
print '<tr class="liste_total">';
print '<td class="liste_total" colspan="'.($colspan + $addcolspan).'">';
print $langs->trans("Total");
$difftotaltime = $totalspenttime * 60 * 60 - $totalconsumedtime;
$difftotaltime = $totalspenttime * 3600 - $totalconsumedtime;
if ($difftotaltime < 0) {
$morecss = colorStringToArray($conf->global->DOLISIRH_EXCEEDED_TIME_SPENT_COLOR);
} elseif ($difftotaltime > 0) {
Expand Down

0 comments on commit fdbad4a

Please sign in to comment.