finish export file per thanato sent by the request , wip frontend part

This commit is contained in:
Tiavina 2025-01-28 13:45:10 +03:00
parent a8a4839400
commit b575057341
3 changed files with 150 additions and 157 deletions

View File

@ -2344,25 +2344,9 @@ class PageController extends Controller {
}
$month = $month ?? date('m');
$year = $year ?? date('Y');
$exportData = $this->myDb->getExportThanatoStatisticData($thanatoIdsToExport,$month,$year);
try{
$current_config = json_decode($this->myDb->getConfiguration($this->idNextcloud));
$clean_folder = html_entity_decode($current_config[0]->path).'/';
$_clean_folder = $clean_folder.'STATISTIQUES/THANATOS/';
try {
$this->storage->newFolder($_clean_folder);
}
catch(\OCP\Files\NotPermittedException $e) {
}
$fileHeader = $this->exportThanatoStatisticService->getExportThanatoFileHeader();
$fileContent = $this->exportThanatoStatisticService->populateExportDataIntoFileContent($exportData,$fileHeader);
$filename = $this->exportThanatoStatisticService->getFilename($thanatoIdsToExport);
$fileNamePath = $_clean_folder."STAT-THANATOS-" . $filename . '.csv';
$this->storage->newFile($fileNamePath);
$file = $this->storage->get($fileNamePath);
$file->putContent($fileContent);
return $fileNamePath;
$filenames = $this->exportThanatoStatisticService->exportThanatosListStatistic($thanatoIdsToExport,$month,$year,$this->idNextcloud);
return $filenames;
}
catch(\OCP\Files\NotFoundException $e) { }

View File

@ -2148,14 +2148,8 @@ class Bdd {
return $data;
}
private function getThanatosDevisListByDate(array $thanatoIds,$date){
if(empty($thanatoIds)){
return [];
}
private function getThanatoDevisListByDate($thanatoId,$date){
$dateFormatted = $date->format('Y-m-d');
$sqlConditionsPlaceholder = implode(',', array_fill(0, count($thanatoIds), '?'));
$sql = "SELECT
devis.id,
devis.date,
@ -2182,25 +2176,22 @@ class Bdd {
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
LEFT JOIN ".$this->tableprefix."facture as facture on devis.id = facture.id_devis
WHERE devis.date = ? AND
devis.id_thanato IN ($sqlConditionsPlaceholder) AND
devis.id_thanato = ? AND
(devis.mentions = ? OR devis.mentions = ?)
ORDER BY devis.date ASC;";
$devisList = $this->execSQLNoJsonReturn(
$sql,
array_merge([$dateFormatted],$thanatoIds,[DevisMentionConstant::FACTURED,DevisMentionConstant::FACTURED_FORMATTED]));
[$dateFormatted,$thanatoId,DevisMentionConstant::FACTURED,DevisMentionConstant::FACTURED_FORMATTED]);
return $devisList;
}
private function getThanatoNameByThanatoIds(array $thanatoIds){
$thanatoIdsPlaceholder = implode(',', array_fill(0, count($thanatoIds), '?'));
$sql = "SELECT id, nom, prenom FROM ".$this->tableprefix."thanato WHERE id IN ($thanatoIdsPlaceholder);";
$thanatos = $this->execSQLNoJsonReturn($sql,$thanatoIds);
$result = [];
foreach($thanatos as $thanato){
$thanatoId = $thanato['id'];
$result["$thanatoId"] = $thanato['nom'];
public function getThanatoById($thanatoId){
$sql = "SELECT id, nom, prenom FROM ".$this->tableprefix."thanato WHERE id = ? LIMIT 1;";
$thanato = $this->execSQLNoJsonReturn($sql,[$thanatoId]);
if(!empty($thanato)){
return $thanato[0];
}
return $result;
return null;
}
private function getCalendarByThanatoIdNextcloud($idNextCloud){
@ -2225,86 +2216,41 @@ class Bdd {
$leaves = $this->execSQLNoJsonReturn($sql,[$calendarId,$isLeaveConditionAsString,$dateCondition]);
return $leaves;
}
public function getThanatoDevisPerDateInAMonthYear(array $thanatoIds,$month,$year){
public function getThanatoDevisPerDateInAMonthYear($thanatoId,$month,$year){
$dateOfMonths = DateHelpers::getDatesOfMonth($year,$month);
$devisListPerThanatoPerDate = [];
$thanatosName = $this->getThanatoNameByThanatoIds($thanatoIds);
$thanatoCalendarIds = [];
foreach($thanatosName as $thanatoId => $thanatoName){
$calendar = $this->getCalendarByThanatoIdNextcloud($thanatoName);
$thanatoCalendarIds[$thanatoId] = $calendar['id'];
}
$thanato = $this->getThanatoById($thanatoId);
$thanatoName = $thanato["nom"];
$thanatoCalendar = $this->getCalendarByThanatoIdNextcloud($thanato["nom"]);
$thanatoCalendarId = $thanatoCalendar["id"];
foreach($dateOfMonths as $currentDate){
$currentDateFormatted = $currentDate->format('Y-m-d');
$isPublicHoliday = DateHelpers::isPublicHoliday($currentDateFormatted);
$devisList = $this->getThanatosDevisListByDate($thanatoIds,$currentDate);
$devisList = $this->getThanatoDevisListByDate($thanatoId,$currentDate);
$thereIsNoDevisForCurrentDate = empty($devisList);
if($thereIsNoDevisForCurrentDate){
foreach($thanatoIds as $thanatoId){
$thanatoName = $thanatosName[$thanatoId];
$devisListPerThanatoPerDate[$thanatoId][$currentDateFormatted]["hasDevis"] = false;
$thanatoLeavesThisDay = $this->getThanatoLeaveByCalendarAndDate($thanatoCalendarIds[$thanatoId],$currentDate);
if(empty($thanatoLeavesThisDay)){
$devisListPerThanatoPerDate[$thanatoId][$currentDateFormatted]["leaves"][] = [
"onLeave" => false,
"startTime" => null,
"endTime" => null,
"thanatoName"=>$thanatosName[$thanatoId],
"date" => $currentDateFormatted,
"totalHours" => 0,
"totalWorkedHours" => 8,
"isPublicHoliday" => $isPublicHoliday
];
}
else{
foreach($thanatoLeavesThisDay as $currentLeave){
$leaveTime = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($currentLeave['calendardata']);
$devisListPerThanatoPerDate[$thanatoId][$currentDateFormatted]["leaves"][] = [
"onLeave" => true,
"startTime" => $leaveTime["startTime"],
"endTime" => $leaveTime["endTime"],
"thanatoName"=>$thanatosName[$thanatoId],
"date" => $currentDateFormatted,
"totalHours" => $leaveTime["totalHours"],
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
"isPublicHoliday" => $isPublicHoliday
];
}
}
$devisListPerThanatoPerDate[$currentDateFormatted]["hasDevis"] = false;
$thanatoLeavesThisDay = $this->getThanatoLeaveByCalendarAndDate($thanatoCalendarId,$currentDate);
if(empty($thanatoLeavesThisDay)){
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"][] = [
"onLeave" => false,
"startTime" => null,
"endTime" => null,
"thanatoName"=>$thanatoName,
"date" => $currentDateFormatted,
"totalHours" => 0,
"totalWorkedHours" => 8,
"isPublicHoliday" => $isPublicHoliday
];
}
}
else{
foreach($devisList as $devis){
$devisThanatoId = $devis["id_thanato"];
$devis = $this->setDevisStartAndEndTime($devis);
$devis = $this->setDevisIsPublicHolidayOrNotText($devis);
$devis = $this->setDevisProduitsList($devis);
//set devis articles list into devis data
if (!isset($devisListPerThanatoPerDate[$devisThanatoId])) {
$devisListPerThanatoPerDate[$devisThanatoId] = [];
}
if (!isset($devisListPerThanatoPerDate[$devisThanatoId][$currentDateFormatted])) {
$devisListPerThanatoPerDate[$devisThanatoId][$currentDateFormatted] = [
'total_distance' => 0,
"devis" => [],
"devisId" => [],
"hasDevis" => true,
"leaves" => []
];
}
$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);
else{
foreach($thanatoLeavesThisDay as $currentLeave){
$leaveTime = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($currentLeave['calendardata']);
$devisListPerThanatoPerDate[$thanatoId][$currentDateFormatted]["leaves"][] = [
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"][] = [
"onLeave" => true,
"startTime" => $leaveTime["startTime"],
"endTime" => $leaveTime["endTime"],
"thanatoName"=>$thanatosName[$thanatoId],
"thanatoName"=>$thanatoName,
"date" => $currentDateFormatted,
"totalHours" => $leaveTime["totalHours"],
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
@ -2313,12 +2259,45 @@ class Bdd {
}
}
}
else{
foreach($devisList as $devis){
$devis = $this->setDevisStartAndEndTime($devis);
$devis = $this->setDevisIsPublicHolidayOrNotText($devis);
$devis = $this->setDevisProduitsList($devis);
if (!isset($devisListPerThanatoPerDate[$currentDateFormatted])) {
$devisListPerThanatoPerDate[$currentDateFormatted] = [
'total_distance' => 0,
"devis" => [],
"devisId" => [],
"hasDevis" => true,
"leaves" => []
];
}
$devisListPerThanatoPerDate[$currentDateFormatted]["devis"][] = $devis;
$devisListPerThanatoPerDate[$currentDateFormatted]["devisId"][] = $devis['id'];
}
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"] = [];
$thanatoLeavesThisDay = $this->getThanatoLeaveByCalendarAndDate($thanatoCalendarId,$currentDate);
foreach($thanatoLeavesThisDay as $currentLeave){
$leaveTime = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($currentLeave['calendardata']);
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"][] = [
"onLeave" => true,
"startTime" => $leaveTime["startTime"],
"endTime" => $leaveTime["endTime"],
"thanatoName"=>$thanatoName,
"date" => $currentDateFormatted,
"totalHours" => $leaveTime["totalHours"],
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
"isPublicHoliday" => $isPublicHoliday
];
}
}
}
return $devisListPerThanatoPerDate;
}
public function getExportThanatoStatisticData(array $thanatoIds,$month,$year){
$devisList = $this->getThanatoDevisPerDateInAMonthYear($thanatoIds,$month,$year);
public function getExportThanatoStatisticData($thanatoId,$month,$year){
$devisList = $this->getThanatoDevisPerDateInAMonthYear($thanatoId,$month,$year);
return $devisList;
}

View File

@ -26,10 +26,12 @@ declare(strict_types=1);
namespace OCA\Gestion\Service;
use OCA\Gestion\Constants\BddConstant;
use OCA\Gestion\Db\Bdd;
use OCA\Gestion\Helpers\DateHelpers;
use OCA\Gestion\Helpers\FileExportHelpers;
use Psr\Log\LoggerInterface;
use OCP\Files\IRootFolder;
class ExportThanatoStatisticService {
/** @var Bdd */
@ -38,27 +40,57 @@ class ExportThanatoStatisticService {
/** @var LoggerInterface */
private $logger;
/** @var IRootFolder */
private $rootFolder;
public function __construct(
Bdd $gestionBdd,
LoggerInterface $logger) {
LoggerInterface $logger,
IRootFolder $rootFolder) {
$this->rootFolder = $rootFolder;
$this->logger = $logger;
$this->gestionBdd = $gestionBdd;
}
public function getFilename(array $thanatoIds){
$thanatoList = $this->gestionBdd->getThanatoByIds($thanatoIds);
$currentYear = date('Y');
$currentMonth = date('m');
$filename = "$currentYear-$currentMonth-";
foreach($thanatoList as $thanato){
$filename .= $thanato['thanato_nom'] . '-' . $thanato['thanato_prenom'] . '--';
}
$filename = rtrim($filename, '-');
private function getFilename($thanatoName,$thanatoLastName,$month,$year){
$filename = "$year-$month-";
$filename .= $thanatoName . '-' . $thanatoLastName;
$filename = str_replace(' ','-', $filename);
$filename = str_replace(' ','-', $filename);
return $filename;
}
private function exportThanatoStatistic($thanatoId,$month,$year,$idNextcloud){
$thanato = $this->gestionBdd->getThanatoById($thanatoId);
if($thanato == null){
return null;
}
$exportData = $this->gestionBdd->getExportThanatoStatisticData($thanatoId,$month,$year);
$defaultConfig = json_decode($this->gestionBdd->getConfiguration(BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD));
$racineFolder = html_entity_decode($defaultConfig[0]->path).'/';
$thanatoFolder = $racineFolder.'STATISTIQUES/THANATOS/';
$fileHeader = $this->getExportThanatoFileHeader();
$fileContent = $this->populateExportDataIntoFileContent($exportData,$fileHeader);
$filename = $this->getFilename($thanato["nom"],$thanato["prenom"],$month,$year);
$fileNamePath = $thanatoFolder."STAT-THANATO-" . $filename . '.csv';
$storage = $this->rootFolder->getUserFolder($idNextcloud);
$storage->newFile($fileNamePath);
$file = $storage->get($fileNamePath);
$file->putContent($fileContent);
return $fileNamePath;
}
public function exportThanatosListStatistic(array $thanatoIds,$month,$year,$idNextcloud){
$filenames = [];
foreach($thanatoIds as $thanatoId){
$filename = $this->exportThanatoStatistic($thanatoId,$month,$year,$idNextcloud);
if($filename != null){
$filenames[] = $filename;
}
}
return $filenames;
}
public function getExportThanatoFileHeader(): string{
$fileHeader =
'FACTURE'.';'.
@ -111,51 +143,49 @@ class ExportThanatoStatisticService {
}
public function populateExportDataIntoFileContent(array $exportData,string $fileContent): string{
foreach($exportData as $thanatoId => $devisPerThanato){
foreach($devisPerThanato as $devisDate => $devisData){
$distanceTotal = 0;
$totalDevisHours = 0;
$totalWorkedHours = 8;
$totalLeaveHours = 0;
$hasDevisInTheCurrentDate = $devisData['hasDevis'];
if($hasDevisInTheCurrentDate === false){
$leaves = $devisData["leaves"];
foreach($leaves as $leave){
$fileContent = $this->populateNoDevisDataInADay($fileContent,$leave);
if($leave["onLeave"]){
$totalLeaveHoursInsideWorkingHours = $leave["totalWorkedHours"];
$totalLeaveHours += $totalLeaveHoursInsideWorkingHours;
}
foreach($exportData as $devisDate => $devisData){
$distanceTotal = 0;
$totalDevisHours = 0;
$totalWorkedHours = 8;
$totalLeaveHours = 0;
$hasDevisInTheCurrentDate = $devisData['hasDevis'];
if($hasDevisInTheCurrentDate === false){
$leaves = $devisData["leaves"];
foreach($leaves as $leave){
$fileContent = $this->populateNoDevisDataInADay($fileContent,$leave);
if($leave["onLeave"]){
$totalLeaveHoursInsideWorkingHours = $leave["totalWorkedHours"];
$totalLeaveHours += $totalLeaveHoursInsideWorkingHours;
}
$totalWorkedHours -= $totalLeaveHours;
}
else{
$distanceTotal = $this->gestionBdd->getDistanceTotalByDevisIdList($devisData["devisId"]);
$devisList = $devisData["devis"];
$leaves = $devisData["leaves"];
if(!empty($devisList)){
foreach($devisList as $devis){
$fileContent = $this->populateDevisDataIntoThanatoExportFileContent($fileContent,$devis);
$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
);
$totalWorkedHours -= $totalLeaveHours;
}
else{
$distanceTotal = $this->gestionBdd->getDistanceTotalByDevisIdList($devisData["devisId"]);
$devisList = $devisData["devis"];
$leaves = $devisData["leaves"];
if(!empty($devisList)){
foreach($devisList as $devis){
$fileContent = $this->populateDevisDataIntoThanatoExportFileContent($fileContent,$devis);
$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;
}