153 lines
5.6 KiB
PHP
153 lines
5.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
/**
|
|
* Calendar App
|
|
*
|
|
* @copyright 2021 Anna Larch <anna.larch@gmx.net>
|
|
*
|
|
* @author Anna Larch <anna.larch@gmx.net>
|
|
* @author Richard Steinmetz <richard@steinmetz.cloud>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
* License as published by the Free Software Foundation; either
|
|
* version 3 of the License, or any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
namespace OCA\Gestion\Service;
|
|
|
|
use DateTime;
|
|
use OCA\Gestion\Db\Bdd;
|
|
use OCA\Gestion\Helpers\DateHelpers;
|
|
use OCP\Files\IRootFolder;
|
|
|
|
class InvoicePdfService {
|
|
/** @var Bdd */
|
|
private $gestionBdd;
|
|
|
|
/** @var IRootFolder */
|
|
private $rootFolder;
|
|
|
|
private const DEFAULT_NEXTCLOUD_ADMIN = "admin";
|
|
public function __construct(
|
|
Bdd $gestionBdd,
|
|
IRootFolder $rootFolder) {
|
|
$this->gestionBdd = $gestionBdd;
|
|
$this->rootFolder = $rootFolder;
|
|
}
|
|
|
|
private function getLogo(){
|
|
$storage = $this->rootFolder->getUserFolder(self::DEFAULT_NEXTCLOUD_ADMIN);
|
|
try{
|
|
try {
|
|
if(isset($storage)){
|
|
$file = $storage->get('/.gestion/logo.png');
|
|
}else{
|
|
return "nothing";
|
|
}
|
|
} catch(\OCP\Files\NotFoundException $e) {
|
|
$file = $storage->get('/.gestion/logo.jpeg');
|
|
}
|
|
}
|
|
catch(\OCP\Files\NotFoundException $e) {
|
|
return "nothing";
|
|
}
|
|
|
|
return base64_encode($file->getContent());
|
|
}
|
|
|
|
public function generateFacturePdfByFactureId($factureId,$idNextCloud){
|
|
$storage = $this->rootFolder->getUserFolder($idNextCloud);
|
|
$configs = json_decode($this->gestionBdd->getConfiguration(self::DEFAULT_NEXTCLOUD_ADMIN));
|
|
$currentConfig = $configs[0];
|
|
$logo = $this->getLogo();
|
|
$invoicePdfData = $this->gestionBdd->getInvoicePdfData($factureId,$currentConfig);
|
|
if($invoicePdfData == null){
|
|
return "";
|
|
}
|
|
$clean_folder = html_entity_decode(string: $currentConfig->path).'/';
|
|
$factureFolders = $this->getFacturesFolder($invoicePdfData,$clean_folder);
|
|
$pdf = new InvoicePdfHandler();
|
|
$pdf->AddFont('ComicSans','','Comic Sans MS.php');
|
|
$pdf->AddFont('ComicSans','B','comic-sans-bold.php');
|
|
$pdf->InvoicePdfFactory($invoicePdfData,$logo);
|
|
$pdf->SetFactureContent();
|
|
$pdfContent = $pdf->Output('','S');
|
|
$pdfFilename = $pdf->GetInvoiceFilename();
|
|
$filenames = [];
|
|
foreach($factureFolders as $folder){
|
|
try {
|
|
$storage->newFolder($folder);
|
|
}
|
|
catch(\OCP\Files\NotPermittedException $e) {
|
|
}
|
|
$ff_pdf = $folder.$pdfFilename.'.pdf';
|
|
$storage->newFile($ff_pdf);
|
|
$file_pdf = $storage->get($ff_pdf);
|
|
$file_pdf->putContent($pdfContent);
|
|
$filenames[] = $ff_pdf;
|
|
}
|
|
return $filenames;
|
|
}
|
|
|
|
private function getFacturesFolder(array $factureData,$racinePath){
|
|
$clientRacineFolder = $racinePath.'CLIENTS/'.mb_strtoupper($factureData["client_nom"],'UTF-8').'/';
|
|
$defuntsFolder = $clientRacineFolder.'DEFUNTS/'.mb_strtoupper($factureData['defunt_nom'],'UTF-8').'/'.'FACTURES'.'/';
|
|
$devisDate = $factureData['devis_date'];
|
|
$devisDatetime = new DateTime($devisDate);
|
|
$devisDateYear = $devisDatetime->format('Y');
|
|
$devisMonth = DateHelpers::GetDateWithFormatDayAndMonthPlainString($factureData['devis_date']);
|
|
$factureByYearFolder = $clientRacineFolder."$devisDateYear".'/'.$devisMonth.'/'.'FACTURES'.'/';
|
|
return [
|
|
$defuntsFolder,
|
|
$factureByYearFolder
|
|
];
|
|
}
|
|
|
|
public function generateFacturePdfByFactureIds(array $factureIds,$idNextCloud){
|
|
foreach( $factureIds as $factureId ){
|
|
$this->generateFacturePdfByFactureId($factureId,$idNextCloud);
|
|
}
|
|
}
|
|
|
|
public function generateMultipleInvoicePdfByClientAndMonthYear($filter,$month,$year,$idNextCloud,$filterType){
|
|
$storage = $this->rootFolder->getUserFolder($idNextCloud);
|
|
$configs = json_decode($this->gestionBdd->getConfiguration(self::DEFAULT_NEXTCLOUD_ADMIN));
|
|
$currentConfig = $configs[0];
|
|
$logo = $this->getLogo();
|
|
$invoiceData = $this->gestionBdd->getInvoicePdfDataByClientAndMonthYear($filter,$month,$year,$currentConfig,$filterType);
|
|
if(empty($invoiceData)){
|
|
return null;
|
|
}
|
|
$pdf = new InvoicePdfHandler();
|
|
$pdf->AddFont('ComicSans','','Comic Sans MS.php');
|
|
$pdf->AddFont('ComicSans','B','comic-sans-bold.php');
|
|
$pdf->MutlipleInvoicePdfFactory($invoiceData,$logo);
|
|
$pdf->SetMultipleFactureContent();
|
|
$racinePath = html_entity_decode(string: $currentConfig->path).'/';
|
|
$clientRacineFolder = $racinePath.'CLIENTS/'.mb_strtoupper($invoiceData[0]["client_entreprise"],'UTF-8').'/';
|
|
$filename = $currentConfig->facture_prefixe.'_'.$pdf->GetMultipleInvoiceFilename($month,$year);
|
|
$filenamePath = $clientRacineFolder.$filename.'.pdf';
|
|
$pdfContent = $pdf->Output('','S');
|
|
try {
|
|
$storage->newFolder($clientRacineFolder);
|
|
}
|
|
catch(\OCP\Files\NotPermittedException $e) {
|
|
}
|
|
$storage->newFile($filenamePath);
|
|
$file_pdf = $storage->get($filenamePath);
|
|
$file_pdf->putContent($pdfContent);
|
|
return $filenamePath;
|
|
}
|
|
}
|