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){
$currentDateFormatted = $currentDate->format('Y-m-d');
$isPublicHoliday = DateHelpers::isPublicHoliday($currentDateFormatted);
$devisList = $this->getThanatosDevisListByDate($thanatoIds,$currentDate);
$thereIsNoDevisForCurrentDate = empty($devisList);
if($thereIsNoDevisForCurrentDate){
@ -2250,7 +2251,9 @@ class Bdd {
"endTime" => null,
"thanatoName"=>$thanatosName[$thanatoId],
"date" => $currentDateFormatted,
"totalHours" => 0
"totalHours" => 0,
"totalWorkedHours" => 8,
"isPublicHoliday" => $isPublicHoliday
];
}
else{
@ -2262,7 +2265,9 @@ class Bdd {
"endTime" => $leaveTime["endTime"],
"thanatoName"=>$thanatosName[$thanatoId],
"date" => $currentDateFormatted,
"totalHours" => $leaveTime["totalHours"]
"totalHours" => $leaveTime["totalHours"],
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
"isPublicHoliday" => $isPublicHoliday
];
}
}
@ -2272,7 +2277,7 @@ class Bdd {
foreach($devisList as $devis){
$devisThanatoId = $devis["id_thanato"];
$devis = $this->setDevisStartAndEndTime($devis);
$devis = $this->setDevisIsWeekendOrNotText($devis);
$devis = $this->setDevisIsPublicHolidayOrNotText($devis);
$devis = $this->setDevisProduitsList($devis);
//set devis articles list into devis data
if (!isset($devisListPerThanatoPerDate[$devisThanatoId])) {
@ -2289,6 +2294,9 @@ class Bdd {
}
$devisListPerThanatoPerDate[$devisThanatoId][$currentDateFormatted]["devis"][] = $devis;
$devisListPerThanatoPerDate[$devisThanatoId][$currentDateFormatted]["devisId"][] = $devis['id'];
}
foreach($thanatoIds as $thanatoId){
$devisListPerThanatoPerDate[$thanatoId][$currentDateFormatted]["leaves"] = [];
$thanatoLeavesThisDay = $this->getThanatoLeaveByCalendarAndDate($thanatoCalendarIds[$thanatoId],$currentDate);
foreach($thanatoLeavesThisDay as $currentLeave){
$leaveTime = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($currentLeave['calendardata']);
@ -2298,7 +2306,9 @@ class Bdd {
"endTime" => $leaveTime["endTime"],
"thanatoName"=>$thanatosName[$thanatoId],
"date" => $currentDateFormatted,
"totalHours" => $leaveTime["totalHours"]
"totalHours" => $leaveTime["totalHours"],
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
"isPublicHoliday" => $isPublicHoliday
];
}
}
@ -2334,7 +2344,7 @@ class Bdd {
$devisDate = $devis["date"];
$devisThanatoId = $devis["id_thanato"];
$devis = $this->setDevisStartAndEndTime($devis);
$devis = $this->setDevisIsWeekendOrNotText($devis);
$devis = $this->setDevisIsPublicHolidayOrNotText($devis);
$devis = $this->setDevisProduitsList($devis);
//set devis articles list into devis data
if (!isset($devisListGroupedByThanatoAndThenByDate[$devisThanatoId])) {
@ -2365,10 +2375,9 @@ class Bdd {
return $devis;
}
private function setDevisIsWeekendOrNotText($devis){
$isWeekend = DateHelpers::isWeekend($devis['date']);
$value = $isWeekend ? "Ferie" : "J";
$devis["dayType"] = $value;
private function setDevisIsPublicHolidayOrNotText($devis){
$isPublicHoliday = DateHelpers::isPublicHoliday($devis['date']);
$devis["dayType"] = DateHelpers::getPublicHolidayText($isPublicHoliday);
return $devis;
}
@ -2377,6 +2386,8 @@ class Bdd {
$devisTimeValue = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($calendarData);
$devis["startTime"] = $devisTimeValue["startTime"];
$devis["endTime"] = $devisTimeValue["endTime"];
$devis["totalHours"] = $devisTimeValue["totalHours"];
$devis["totalWorkedHours"] = $devisTimeValue["totalWorkedHours"];
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){
$formatter = new IntlDateFormatter(
'fr_FR',
@ -89,4 +105,31 @@ class DateHelpers
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 = "";
$endTimeValue = "";
$totalHours = 0;
$totalWorkedHours = 0;
if($vCalendarString != ""){
$dateStart = self::GetDateStartOrDateEndFromVCalendarString("DTSTART", $vCalendarString);
if($dateStart != null){
@ -50,11 +51,13 @@ class VCalendarHelpers
$endTimeValue = $dateEnd->format("H") . "h";
}
$totalHours = DateHelpers::getHoursBetweenTwoDatetime($dateEnd,$dateStart);
$totalWorkedHours = DateHelpers::GetWorkingHoursBetweenDatetimeEndAndDatetimeStart($dateEnd,$dateStart);
}
return [
"startTime" => $startTimeValue,
"endTime" => $endTimeValue,
"totalHours" => $totalHours
"totalHours" => $totalHours,
"totalWorkedHours" => $totalWorkedHours
];
}

View File

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