finish export file per thanato sent by the request , wip frontend part
This commit is contained in:
parent
a8a4839400
commit
b575057341
@ -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) { }
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user