* * @author Anna Larch * @author Richard Steinmetz * * 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 . * */ namespace OCA\Gestion\Service\Order; require_once __DIR__ . '/../../../vendor/autoload.php'; use DateTime; use OCA\Gestion\Constants\BddConstant; use OCA\Gestion\Constants\OrderTypeConstant; use OCA\Gestion\Db\Bdd; use OCA\Gestion\Db\OrderBdd; use OCA\Gestion\Helpers\DateHelpers; use OCA\Gestion\Helpers\FileExportHelpers; use OCA\Gestion\Service\Order\PdfHandler\OrderPdfHandler; use OCP\Files\IRootFolder; class OrderPdfService { /** @var Bdd */ private $gestionBdd; /** @var IRootFolder */ private $rootFolder; private $orderBdd; private $orderService; public function __construct( Bdd $gestionBdd, IRootFolder $rootFolder, OrderBdd $orderBdd, OrderService $orderService) { $this->orderBdd = $orderBdd; $this->gestionBdd = $gestionBdd; $this->rootFolder = $rootFolder; $this->orderService = $orderService; } private function doesLogoExist(){ $storage = $this->rootFolder->getUserFolder(BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD); try { if(isset($storage)){ $storage->get('/.gestion/logo.png'); return true; }else{ return false; } } catch(\OCP\Files\NotFoundException $e) { return false; } } private function formatOrderDataForPdfExport($orderPdfData,$config){ $orderPdfData["configuration"] = $config; $configurationAdresses = FileExportHelpers::GetAddressAndCityFromAddress($config->adresse); $orderPdfData["configuration_adresse"] = $configurationAdresses["address"]; $orderPdfData["configuration_adresse_city"] = $configurationAdresses["city"]; $orderDate = $orderPdfData['order_date']; $orderDate = DateTime::createFromFormat('Y-m-d',$orderDate); $orderDate = $orderDate->format('d-m-Y'); $orderPdfData['order_date'] = $orderDate; $devisDate = $orderPdfData['devis_date']; $devisDate = DateTime::createFromFormat('Y-m-d',$devisDate); $devisDate = $devisDate->format('d-m-Y'); $orderPdfData['devis_date'] = $devisDate; return $orderPdfData; } private function getCommandeFolders($orderPdfData,$racinePath){ if($orderPdfData["fk_order_type_key"] == OrderTypeConstant::ORDER_TYPE_DEVIS){ $clientRacineFolder = $racinePath.'CLIENTS/'.mb_strtoupper($orderPdfData["client_entreprise"],'UTF-8').'/'; $defuntsFolder = $clientRacineFolder.'DEFUNTS/'.mb_strtoupper($orderPdfData['defunt_nom'],'UTF-8').'/'.'FOURNISSEUR'.'/'; $orderDate = $orderPdfData['order_date']; $orderDatetime = new DateTime($orderDate); $orderYear = $orderDatetime->format('Y'); $orderMonth = DateHelpers::GetDateWithFormatDayAndMonthPlainString($orderPdfData['order_date']); $orderByYearFolder = $clientRacineFolder."$orderYear".'/'.$orderMonth.'/'.'FOURNISSEUR'.'/'; return [ $defuntsFolder, $orderByYearFolder ]; } else{ $providerRacineFolder = $racinePath.'FOURNISSEURS/'.mb_strtoupper($orderPdfData["provider_name"],'UTF-8').'/'; $orderDate = $orderPdfData['order_date']; $orderDatetime = new DateTime($orderDate); $orderYear = $orderDatetime->format('Y'); $orderMonth = DateHelpers::GetDateWithFormatDayAndMonthPlainString($orderPdfData['order_date']); $orderByYearFolder = $providerRacineFolder."$orderYear".'/'.$orderMonth.'/'; return [ $orderByYearFolder ]; } } private function GetOrderFilename($orderPdfData){ $orderFullNumber = $orderPdfData['order_full_number']; $orderFullNumber = str_replace('/','-',$orderFullNumber); $filename = "BDC_".$orderFullNumber."_"; if($orderPdfData["fk_order_type_key"] == OrderTypeConstant::ORDER_TYPE_DEVIS){ $defuntNom = str_replace(' ',' ',$orderPdfData['defunt_nom']); $filename .= mb_strtoupper($defuntNom,'UTF-8'); } else{ $filename .= mb_strtoupper($orderPdfData['provider_name'],'UTF-8'); } return $filename; } public function generateOrderPdfByOrderId($orderId,$idNextCloud){ $storage = $this->rootFolder->getUserFolder($idNextCloud); $configs = json_decode($this->gestionBdd->getConfiguration(BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD)); $currentConfig = $configs[0]; $logoExist = $this->doesLogoExist(); $orderPdfData = $this->orderService->getOrderPdfData($orderId); if($orderPdfData == null){ return ""; } $orderPdfData = $this->formatOrderDataForPdfExport($orderPdfData,$currentConfig); $racineFolder = html_entity_decode(string: $currentConfig->path).'/'; $orderFolders = $this->getCommandeFolders($orderPdfData,$racineFolder); $pdf = new OrderPdfHandler(); $pdf->OrderPdfFactory($orderPdfData,$logoExist); $pdf->SetOrderContent(); $pdfContent = $pdf->Output('','S'); $pdfFilename = $this->GetOrderFilename($orderPdfData); $filenames = []; foreach($orderFolders 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; } }