finish thanato stat , wip one file per thanato requested by the caller
This commit is contained in:
parent
c21c0b41dd
commit
a8a4839400
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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,22 +68,27 @@ 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.
|
||||||
''.';'.
|
''.';'.
|
||||||
@ -91,6 +97,10 @@ class ExportThanatoStatisticService {
|
|||||||
$startTimeValue.';'.
|
$startTimeValue.';'.
|
||||||
$endTimeValue.';'.
|
$endTimeValue.';'.
|
||||||
''.';'.
|
''.';'.
|
||||||
|
DateHelpers::getPublicHolidayText($leave['isPublicHoliday']).';'.
|
||||||
|
$leaveValue.';'.
|
||||||
|
''.';'.
|
||||||
|
''.';'.
|
||||||
''.';'.
|
''.';'.
|
||||||
''.';'.
|
''.';'.
|
||||||
''.';'.
|
''.';'.
|
||||||
@ -101,41 +111,56 @@ class ExportThanatoStatisticService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user