finish thanato stat , wip one file per thanato requested by the caller

This commit is contained in:
Tiavina 2025-01-28 13:02:14 +03:00
parent c21c0b41dd
commit a8a4839400
4 changed files with 126 additions and 35 deletions

View File

@ -2236,6 +2236,7 @@ class Bdd {
} }
foreach($dateOfMonths as $currentDate){ foreach($dateOfMonths as $currentDate){
$currentDateFormatted = $currentDate->format('Y-m-d'); $currentDateFormatted = $currentDate->format('Y-m-d');
$isPublicHoliday = DateHelpers::isPublicHoliday($currentDateFormatted);
$devisList = $this->getThanatosDevisListByDate($thanatoIds,$currentDate); $devisList = $this->getThanatosDevisListByDate($thanatoIds,$currentDate);
$thereIsNoDevisForCurrentDate = empty($devisList); $thereIsNoDevisForCurrentDate = empty($devisList);
if($thereIsNoDevisForCurrentDate){ if($thereIsNoDevisForCurrentDate){
@ -2250,7 +2251,9 @@ class Bdd {
"endTime" => null, "endTime" => null,
"thanatoName"=>$thanatosName[$thanatoId], "thanatoName"=>$thanatosName[$thanatoId],
"date" => $currentDateFormatted, "date" => $currentDateFormatted,
"totalHours" => 0 "totalHours" => 0,
"totalWorkedHours" => 8,
"isPublicHoliday" => $isPublicHoliday
]; ];
} }
else{ else{
@ -2262,7 +2265,9 @@ class Bdd {
"endTime" => $leaveTime["endTime"], "endTime" => $leaveTime["endTime"],
"thanatoName"=>$thanatosName[$thanatoId], "thanatoName"=>$thanatosName[$thanatoId],
"date" => $currentDateFormatted, "date" => $currentDateFormatted,
"totalHours" => $leaveTime["totalHours"] "totalHours" => $leaveTime["totalHours"],
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
"isPublicHoliday" => $isPublicHoliday
]; ];
} }
} }
@ -2272,7 +2277,7 @@ class Bdd {
foreach($devisList as $devis){ foreach($devisList as $devis){
$devisThanatoId = $devis["id_thanato"]; $devisThanatoId = $devis["id_thanato"];
$devis = $this->setDevisStartAndEndTime($devis); $devis = $this->setDevisStartAndEndTime($devis);
$devis = $this->setDevisIsWeekendOrNotText($devis); $devis = $this->setDevisIsPublicHolidayOrNotText($devis);
$devis = $this->setDevisProduitsList($devis); $devis = $this->setDevisProduitsList($devis);
//set devis articles list into devis data //set devis articles list into devis data
if (!isset($devisListPerThanatoPerDate[$devisThanatoId])) { if (!isset($devisListPerThanatoPerDate[$devisThanatoId])) {
@ -2289,6 +2294,9 @@ class Bdd {
} }
$devisListPerThanatoPerDate[$devisThanatoId][$currentDateFormatted]["devis"][] = $devis; $devisListPerThanatoPerDate[$devisThanatoId][$currentDateFormatted]["devis"][] = $devis;
$devisListPerThanatoPerDate[$devisThanatoId][$currentDateFormatted]["devisId"][] = $devis['id']; $devisListPerThanatoPerDate[$devisThanatoId][$currentDateFormatted]["devisId"][] = $devis['id'];
}
foreach($thanatoIds as $thanatoId){
$devisListPerThanatoPerDate[$thanatoId][$currentDateFormatted]["leaves"] = [];
$thanatoLeavesThisDay = $this->getThanatoLeaveByCalendarAndDate($thanatoCalendarIds[$thanatoId],$currentDate); $thanatoLeavesThisDay = $this->getThanatoLeaveByCalendarAndDate($thanatoCalendarIds[$thanatoId],$currentDate);
foreach($thanatoLeavesThisDay as $currentLeave){ foreach($thanatoLeavesThisDay as $currentLeave){
$leaveTime = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($currentLeave['calendardata']); $leaveTime = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($currentLeave['calendardata']);
@ -2298,7 +2306,9 @@ class Bdd {
"endTime" => $leaveTime["endTime"], "endTime" => $leaveTime["endTime"],
"thanatoName"=>$thanatosName[$thanatoId], "thanatoName"=>$thanatosName[$thanatoId],
"date" => $currentDateFormatted, "date" => $currentDateFormatted,
"totalHours" => $leaveTime["totalHours"] "totalHours" => $leaveTime["totalHours"],
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
"isPublicHoliday" => $isPublicHoliday
]; ];
} }
} }
@ -2334,7 +2344,7 @@ class Bdd {
$devisDate = $devis["date"]; $devisDate = $devis["date"];
$devisThanatoId = $devis["id_thanato"]; $devisThanatoId = $devis["id_thanato"];
$devis = $this->setDevisStartAndEndTime($devis); $devis = $this->setDevisStartAndEndTime($devis);
$devis = $this->setDevisIsWeekendOrNotText($devis); $devis = $this->setDevisIsPublicHolidayOrNotText($devis);
$devis = $this->setDevisProduitsList($devis); $devis = $this->setDevisProduitsList($devis);
//set devis articles list into devis data //set devis articles list into devis data
if (!isset($devisListGroupedByThanatoAndThenByDate[$devisThanatoId])) { if (!isset($devisListGroupedByThanatoAndThenByDate[$devisThanatoId])) {
@ -2365,10 +2375,9 @@ class Bdd {
return $devis; return $devis;
} }
private function setDevisIsWeekendOrNotText($devis){ private function setDevisIsPublicHolidayOrNotText($devis){
$isWeekend = DateHelpers::isWeekend($devis['date']); $isPublicHoliday = DateHelpers::isPublicHoliday($devis['date']);
$value = $isWeekend ? "Ferie" : "J"; $devis["dayType"] = DateHelpers::getPublicHolidayText($isPublicHoliday);
$devis["dayType"] = $value;
return $devis; return $devis;
} }
@ -2377,6 +2386,8 @@ class Bdd {
$devisTimeValue = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($calendarData); $devisTimeValue = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($calendarData);
$devis["startTime"] = $devisTimeValue["startTime"]; $devis["startTime"] = $devisTimeValue["startTime"];
$devis["endTime"] = $devisTimeValue["endTime"]; $devis["endTime"] = $devisTimeValue["endTime"];
$devis["totalHours"] = $devisTimeValue["totalHours"];
$devis["totalWorkedHours"] = $devisTimeValue["totalWorkedHours"];
return $devis; return $devis;
} }

View File

@ -21,6 +21,22 @@ class DateHelpers
} }
} }
public static function getPublicHolidayText($isPublicHoliday){
return $isPublicHoliday ? "Ferie" : "J";
}
public static function isPublicHoliday(string $dateString): bool
{
try {
$date = new DateTime($dateString);
$dayOfWeek = $date->format('N');
return $dayOfWeek == 7;
} catch (Exception $e) {
// Handle invalid date strings
return false;
}
}
public static function GetMonthPlainString($month){ public static function GetMonthPlainString($month){
$formatter = new IntlDateFormatter( $formatter = new IntlDateFormatter(
'fr_FR', 'fr_FR',
@ -89,4 +105,31 @@ class DateHelpers
return $hours; return $hours;
} }
public static function GetWorkingHoursBetweenDatetimeEndAndDatetimeStart(Datetime|null $datetimeEnd,Datetime|null $datetimeStart){
if($datetimeEnd == null || $datetimeStart == null){
return 0;
}
$workingStartAM = new DateTime($datetimeStart->format('Y-m-d') . ' 08:30',$datetimeStart->getTimezone());
$workingEndAM = new DateTime($datetimeStart->format('Y-m-d') . ' 12:30',$datetimeStart->getTimezone());
$workingStartPM = new DateTime($datetimeStart->format('Y-m-d') . ' 13:30',$datetimeStart->getTimezone());
$workingEndPM = new DateTime($datetimeStart->format('Y-m-d') . ' 17:30',$datetimeStart->getTimezone());
$totalHours = 0;
if ($datetimeStart->format('N') < 7) {
$dayStartAM = max($datetimeStart, $workingStartAM);
$dayEndAM = min($datetimeEnd, $workingEndAM);
if ($dayStartAM < $dayEndAM) {
$totalHours += ($dayEndAM->getTimestamp() - $dayStartAM->getTimestamp()) / 3600;
}
$dayStartPM = max($datetimeStart, $workingStartPM);
$dayEndPM = min($datetimeEnd, $workingEndPM);
if ($dayStartPM < $dayEndPM) {
$totalHours += ($dayEndPM->getTimestamp() - $dayStartPM->getTimestamp()) / 3600;
}
}
else{
$totalHours = ($datetimeEnd->getTimestamp() - $datetimeStart->getTimestamp()) / 3600;
}
return $totalHours;
}
} }

View File

@ -40,6 +40,7 @@ class VCalendarHelpers
$startTimeValue = ""; $startTimeValue = "";
$endTimeValue = ""; $endTimeValue = "";
$totalHours = 0; $totalHours = 0;
$totalWorkedHours = 0;
if($vCalendarString != ""){ if($vCalendarString != ""){
$dateStart = self::GetDateStartOrDateEndFromVCalendarString("DTSTART", $vCalendarString); $dateStart = self::GetDateStartOrDateEndFromVCalendarString("DTSTART", $vCalendarString);
if($dateStart != null){ if($dateStart != null){
@ -50,11 +51,13 @@ class VCalendarHelpers
$endTimeValue = $dateEnd->format("H") . "h"; $endTimeValue = $dateEnd->format("H") . "h";
} }
$totalHours = DateHelpers::getHoursBetweenTwoDatetime($dateEnd,$dateStart); $totalHours = DateHelpers::getHoursBetweenTwoDatetime($dateEnd,$dateStart);
$totalWorkedHours = DateHelpers::GetWorkingHoursBetweenDatetimeEndAndDatetimeStart($dateEnd,$dateStart);
} }
return [ return [
"startTime" => $startTimeValue, "startTime" => $startTimeValue,
"endTime" => $endTimeValue, "endTime" => $endTimeValue,
"totalHours" => $totalHours "totalHours" => $totalHours,
"totalWorkedHours" => $totalWorkedHours
]; ];
} }

View File

@ -27,6 +27,7 @@ declare(strict_types=1);
namespace OCA\Gestion\Service; namespace OCA\Gestion\Service;
use OCA\Gestion\Db\Bdd; use OCA\Gestion\Db\Bdd;
use OCA\Gestion\Helpers\DateHelpers;
use OCA\Gestion\Helpers\FileExportHelpers; use OCA\Gestion\Helpers\FileExportHelpers;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -67,75 +68,99 @@ class ExportThanatoStatisticService {
'HEURE DE FIN'.';'. 'HEURE DE FIN'.';'.
'SOINS'.';'. 'SOINS'.';'.
'JOUR/FERIE'.';'. 'JOUR/FERIE'.';'.
'CONGE/PAS CONGE'.';'.
'NOM ET PRENOM'.';'. 'NOM ET PRENOM'.';'.
'LIEU'.';'. 'LIEU'.';'.
'POMPES FUNEBRES'.';'. 'POMPES FUNEBRES'.';'.
'ADRESSE'.';'. 'ADRESSE'.';'.
'DISTANCE TOTALE KM'.';'. 'DISTANCE TOTALE KM'.';'.
'HEURES TOTAL DE SOIN'.';'.
'HEURES TOTAL DE CONGE'.';'.
'HEURES TOTAL DE TRAVAIL'.';'.
"\n"; "\n";
return $fileHeader; return $fileHeader;
} }
private function populateNoDevisDataInADay(string $fileContent,$leave){ private function populateNoDevisDataInADay(string $fileContent,$leave){
// var_dump($devisData);die;
$startTimeValue = ""; $startTimeValue = "";
$endTimeValue = ""; $endTimeValue = "";
$leaveValue = "Pas conge";
if($leave["onLeave"]){ if($leave["onLeave"]){
$startTimeValue = $leave["startTime"]; $startTimeValue = $leave["startTime"];
$endTimeValue = $leave["endTime"]; $endTimeValue = $leave["endTime"];
$leaveValue = "Conge";
} }
$fileContent = $fileContent. $fileContent = $fileContent.
''.';'. ''.';'.
FileExportHelpers::FormatTextForExport($leave['thanatoName']).';'. FileExportHelpers::FormatTextForExport($leave['thanatoName']).';'.
$leave['date'].';'. $leave['date'].';'.
$startTimeValue.';'. $startTimeValue.';'.
$endTimeValue.';'. $endTimeValue.';'.
''.';'. ''.';'.
''.';'. DateHelpers::getPublicHolidayText($leave['isPublicHoliday']).';'.
''.';'. $leaveValue.';'.
''.';'. ''.';'.
''.';'. ''.';'.
''.';'. ''.';'.
''.';'."\n"; ''.';'.
''.';'.
''.';'.
''.';'.
''.';'."\n";
return $fileContent; return $fileContent;
} }
public function populateExportDataIntoFileContent(array $exportData,string $fileContent): string{ public function populateExportDataIntoFileContent(array $exportData,string $fileContent): string{
// var_dump($exportData);
// die;
foreach($exportData as $thanatoId => $devisPerThanato){ foreach($exportData as $thanatoId => $devisPerThanato){
foreach($devisPerThanato as $devisDate => $devisData){ foreach($devisPerThanato as $devisDate => $devisData){
$distanceTotal = 0;
$totalDevisHours = 0;
$totalWorkedHours = 8;
$totalLeaveHours = 0;
$hasDevisInTheCurrentDate = $devisData['hasDevis']; $hasDevisInTheCurrentDate = $devisData['hasDevis'];
if($hasDevisInTheCurrentDate === false){ if($hasDevisInTheCurrentDate === false){
$totalLeaveHours = 0;
$totalWorkedHours = 0;
$leaves = $devisData["leaves"]; $leaves = $devisData["leaves"];
foreach($leaves as $leave){ foreach($leaves as $leave){
$fileContent = $this->populateNoDevisDataInADay($fileContent,$leave); $fileContent = $this->populateNoDevisDataInADay($fileContent,$leave);
if($leave["onLeave"]){ if($leave["onLeave"]){
$totalLeaveHours += $leave["totalHours"]; $totalLeaveHoursInsideWorkingHours = $leave["totalWorkedHours"];
$totalLeaveHours += $totalLeaveHoursInsideWorkingHours;
} }
} }
$totalWorkedHours = 8 - $totalLeaveHours; $totalWorkedHours -= $totalLeaveHours;
} }
else{ else{
$distanceTotal = $this->gestionBdd->getDistanceTotalByDevisIdList($devisData["devisId"]); $distanceTotal = $this->gestionBdd->getDistanceTotalByDevisIdList($devisData["devisId"]);
$totalWorkedHours = 0;
$devisList = $devisData["devis"]; $devisList = $devisData["devis"];
$leaves = $devisData["leaves"];
if(!empty($devisList)){ if(!empty($devisList)){
foreach($devisList as $devis){ foreach($devisList as $devis){
$fileContent = $this->populateDevisDataIntoThanatoExportFileContent($fileContent,$devis); $fileContent = $this->populateDevisDataIntoThanatoExportFileContent($fileContent,$devis);
$totalWorkedHours += $devis["totalHours"]; $totalDevisHours += $devis["totalHours"];
} }
$fileContent = $this->populateLastRecapForTheLine($fileContent,$distanceTotal);
} }
foreach($leaves as $leave){
$fileContent = $this->populateNoDevisDataInADay($fileContent,$leave);
if($leave["onLeave"]){
$totalLeaveHoursInsideWorkingHours = $leave["totalWorkedHours"];
$totalLeaveHours += $totalLeaveHoursInsideWorkingHours;
}
}
$totalWorkedHours -= $totalLeaveHours;
} }
$fileContent = $this->populateLastRecapForTheLine(
$fileContent,
$distanceTotal,
$totalDevisHours,
$totalWorkedHours,
$totalLeaveHours
);
} }
} }
return $fileContent; return $fileContent;
} }
private function populateLastRecapForTheLine(string $fileContent,$distance){ private function populateLastRecapForTheLine(string $fileContent,$distance,$totalDevisHours,$totalWorkedHours,$totalLeaveHours){
$fileContent = $fileContent. $fileContent = $fileContent.
''.';'. ''.';'.
''.';'. ''.';'.
@ -148,7 +173,11 @@ class ExportThanatoStatisticService {
''.';'. ''.';'.
''.';'. ''.';'.
''.';'. ''.';'.
utf8_decode(html_entity_decode("$distance"))."\n"; ''.';'.
"$distance".';'.
"$totalDevisHours".';'.
"$totalLeaveHours".';'.
"$totalWorkedHours".';'."\n";
return $fileContent; return $fileContent;
} }
@ -172,10 +201,15 @@ class ExportThanatoStatisticService {
FileExportHelpers::FormatTextForExport($devis["endTime"]).';'. FileExportHelpers::FormatTextForExport($devis["endTime"]).';'.
FileExportHelpers::FormatTextForExport($produitAsString).';'. FileExportHelpers::FormatTextForExport($produitAsString).';'.
FileExportHelpers::FormatTextForExport($devis["dayType"]).';'. FileExportHelpers::FormatTextForExport($devis["dayType"]).';'.
FileExportHelpers::FormatTextForExport('Pas conge').';'.
FileExportHelpers::FormatTextForExport($devis["nom_defunt"]).';'. FileExportHelpers::FormatTextForExport($devis["nom_defunt"]).';'.
FileExportHelpers::FormatTextForExport($devis["nom_lieu"] ?? "").';'. FileExportHelpers::FormatTextForExport($devis["nom_lieu"] ?? "").';'.
FileExportHelpers::FormatTextForExport($devis["nom_client"] ?? "").';'. FileExportHelpers::FormatTextForExport($devis["nom_client"] ?? "").';'.
FileExportHelpers::FormatTextForExport($devis["client_adresse"] ?? "")."\n"; FileExportHelpers::FormatTextForExport($devis["client_adresse"] ?? "").
''.';'.
''.';'.
''.';'.
''.';'."\n";
return $fileContent; return $fileContent;