diff --git a/gestion/appinfo/routes.php b/gestion/appinfo/routes.php index c44febf..2ce2868 100644 --- a/gestion/appinfo/routes.php +++ b/gestion/appinfo/routes.php @@ -164,6 +164,7 @@ return [ ['name' => 'order#orderDetails', 'url' => '/order/{orderId}/details', 'verb' => 'GET'], ['name' => 'order#getOrderProductsById', 'url' => '/order/{orderId}/products', 'verb' => 'PROPFIND'], ['name' => 'order#getOrderTotalAmount', 'url' => '/order/{orderId}/totalAmount', 'verb' => 'PROPFIND'], + ['name' => 'order#exportOrderToPdf', 'url' => '/order/{orderId}/exportToPdf', 'verb' => 'POST'], //clients discount ['name' => 'page#getClientGroupDiscounts', 'url' => '/getClientGroupDiscounts', 'verb' => 'PROPFIND'], diff --git a/gestion/lib/Controller/OrderController.php b/gestion/lib/Controller/OrderController.php index a840edf..b521520 100644 --- a/gestion/lib/Controller/OrderController.php +++ b/gestion/lib/Controller/OrderController.php @@ -4,6 +4,7 @@ namespace OCA\Gestion\Controller; use Exception; use OCA\Gestion\Service\ConfigurationService; use OCA\Gestion\Service\NavigationService; +use OCA\Gestion\Service\Order\OrderPdfService; use OCA\Gestion\Service\Order\OrderService; use Psr\Log\LoggerInterface; defined("TAB1") or define("TAB1", "\t"); @@ -45,6 +46,7 @@ class OrderController extends Controller { /** @var \OCA\Gestion\Service\NavigationService */ private $navigationService; private $configurationService; + private $orderPdfService; private $logger; @@ -64,7 +66,8 @@ class OrderController extends Controller { OrderService $orderService, NavigationService $navigationService, ConfigurationService $configurationService, - LoggerInterface $logger + LoggerInterface $logger, + OrderPdfService $orderPdfService ){ parent::__construct($AppName, $request); @@ -78,6 +81,7 @@ class OrderController extends Controller { $this->navigationService = $navigationService; $this->configurationService = $configurationService; $this->logger = $logger; + $this->orderPdfService = $orderPdfService; if ($userSession->isLoggedIn()) { $this->user = $userSession->getUser(); @@ -231,4 +235,17 @@ class OrderController extends Controller { $orderTotalAmount = $this->orderService->getOrderTotalAmount($orderId,$configuration["tva_default"] ?? 0); return json_encode($orderTotalAmount); } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @param string $orderId + */ + public function exportOrderToPdf($orderId) { + try{ + $factureFilenames = $this->orderPdfService->generateOrderPdfByOrderId($orderId,$this->idNextcloud); + return json_encode($factureFilenames); + } + catch(\OCP\Files\NotFoundException $e) { } + } } diff --git a/gestion/lib/Db/OrderBdd.php b/gestion/lib/Db/OrderBdd.php index 7736215..b7d968d 100644 --- a/gestion/lib/Db/OrderBdd.php +++ b/gestion/lib/Db/OrderBdd.php @@ -338,6 +338,7 @@ class OrderBdd { client.legal_one as client_legal_one, defunt.id as defunt_id, defunt.nom as defunt_nom, + defunt.sexe as defunt_sexe, lieu.id as lieu_id, lieu.adresse as lieu_adresse, lieu.nom as lieu_nom, diff --git a/gestion/lib/Service/InvoicePdfHandler.php b/gestion/lib/Service/InvoicePdfHandler.php index b5a220e..793090b 100644 --- a/gestion/lib/Service/InvoicePdfHandler.php +++ b/gestion/lib/Service/InvoicePdfHandler.php @@ -36,7 +36,7 @@ use OCA\Gestion\Helpers\PriceHelpers; class InvoicePdfHandler extends FPDF { private $multipleFactureData = []; - private $factureData = []; + private $orderData = []; private $logo = null; private $logoPath = "/var/www/html/data/admin/files/.gestion/"; function Header() @@ -59,11 +59,11 @@ class InvoicePdfHandler extends FPDF { $this->SetY(-15); $this->SetFont('Arial', 'B', 8); - $this->Cell(0, 10, utf8_decode(html_entity_decode($this->factureData['configuration']->legal_one)), 0, 0, 'C'); + $this->Cell(0, 10, utf8_decode(html_entity_decode($this->orderData['configuration']->legal_one)), 0, 0, 'C'); } public function InvoicePdfFactory(array $factureData,$logo = null){ - $this->factureData = $factureData; + $this->orderData = $factureData; $this->logo = $logo; } @@ -84,32 +84,32 @@ class InvoicePdfHandler extends FPDF { } public function GetInvoiceFilename(){ - $factureNum = $this->factureData['num']; + $factureNum = $this->orderData['num']; $factureNum = str_replace('/','-',$factureNum); - $defuntNom = str_replace(' ',' ',$this->factureData['defunt_nom']); - return $this->factureData['configuration']->facture_prefixe.'_'.$factureNum.'_'.mb_strtoupper($defuntNom,'UTF-8'); + $defuntNom = str_replace(' ',' ',$this->orderData['defunt_nom']); + return $this->orderData['configuration']->facture_prefixe.'_'.$factureNum.'_'.mb_strtoupper($defuntNom,'UTF-8'); } private function DrawInvoiceCompanyAndClientInfo(){ $this->SetY(40); $this->SetFont('Arial', '', 12); - $this->Cell(0, 7, FileExportHelpers::FormatTextForExport($this->factureData['configuration']->entreprise), 0, 0); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport($this->orderData['configuration']->entreprise), 0, 0); $this->Cell(0, 7, FileExportHelpers::FormatTextForExport( - $this->factureData['client_prenom']. ' '.$this->factureData['client_nom']), + $this->orderData['client_prenom']. ' '.$this->orderData['client_nom']), 0, 1,'R'); - $this->Cell(0, 7, FileExportHelpers::FormatTextForExport($this->factureData['configuration_adresse']), 0, 0); - $this->Cell(0, 7, trim(FileExportHelpers::FormatTextForExport($this->factureData['client_real_adress'])), 0, 1,'R'); - $this->Cell(0, 7, FileExportHelpers::FormatTextForExport($this->factureData['configuration_adresse_city']), 0, 0);border: - $this->Cell(0, 7, trim(FileExportHelpers::FormatTextForExport($this->factureData['client_adress_city'])), 0, 1,'R'); - $this->Cell(0, 7, FileExportHelpers::FormatTextForExport('Tél : ') . FileExportHelpers::FormatTextForExport($this->factureData['configuration']->telephone),0,0); - $this->Cell(0, 7, FileExportHelpers::FormatTextForExport('Numéro') . ' Siret: ' . $this->factureData['siret'], 0, 1,'R'); - $this->Cell(0, 7, 'Mail : ' . $this->factureData['configuration']->mail, 0, 1); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport($this->orderData['configuration_adresse']), 0, 0); + $this->Cell(0, 7, trim(FileExportHelpers::FormatTextForExport($this->orderData['client_real_adress'])), 0, 1,'R'); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport($this->orderData['configuration_adresse_city']), 0, 0);border: + $this->Cell(0, 7, trim(FileExportHelpers::FormatTextForExport($this->orderData['client_adress_city'])), 0, 1,'R'); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport('Tél : ') . FileExportHelpers::FormatTextForExport($this->orderData['configuration']->telephone),0,0); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport('Numéro') . ' Siret: ' . $this->orderData['siret'], 0, 1,'R'); + $this->Cell(0, 7, 'Mail : ' . $this->orderData['configuration']->mail, 0, 1); $this->Ln(3); } private function DrawInvoiceInfoTable(){ - $factureDatePaiement = $this->factureData['date_paiement']; + $factureDatePaiement = $this->orderData['date_paiement']; $factureDatePaiement = DateTime::createFromFormat('Y-m-d',$factureDatePaiement); $factureDatePaiement = $factureDatePaiement->format('d-m-Y'); $factureDateEcheance = $factureDatePaiement; @@ -121,13 +121,13 @@ class InvoicePdfHandler extends FPDF { $this->SetFont('Arial', '', 10); $this->Cell(30, 7, $factureDatePaiement, 1, 0, 'C'); - $this->Cell(80, 7, utf8_decode(html_entity_decode($this->factureData['lieu_nom'])), 1, 0, 'C'); - $this->Cell(40, 7, $this->factureData['num'], 1, 0, 'C'); + $this->Cell(80, 7, utf8_decode(html_entity_decode($this->orderData['lieu_nom'])), 1, 0, 'C'); + $this->Cell(40, 7, $this->orderData['num'], 1, 0, 'C'); $this->Cell(40, 7, $factureDateEcheance, 1, 1, 'C'); $this->Ln(4); - $devisComment = ($this->factureData['devis_comment'] == "Commentaire" || $this->factureData['devis_comment'] == "" ? "" : $this->factureData['devis_comment']); + $devisComment = ($this->orderData['devis_comment'] == "Commentaire" || $this->orderData['devis_comment'] == "" ? "" : $this->orderData['devis_comment']); if($devisComment != ""){ $this->SetFont('Arial', 'B', 9); $this->Cell(0,5,"Bon de commande: ". $devisComment,0,1,'C'); @@ -147,7 +147,7 @@ class InvoicePdfHandler extends FPDF { } private function DrawArticlesTableHeader(){ - $tvaValue = $this->factureData["configuration"]->tva_default; + $tvaValue = $this->orderData["configuration"]->tva_default; $this->SetFont('Arial','',10); $this->SetXY( 10,106 ); $this->Cell( 20, 8, "Date", 0, 0, 'C'); @@ -168,14 +168,14 @@ class InvoicePdfHandler extends FPDF { public function DrawArticlesTableValueAndReturnTotalPrice(){ $this->SetFont('Arial','',10); - $devisDate = $this->factureData['devis_date']; + $devisDate = $this->orderData['devis_date']; $devisDate = DateTime::createFromFormat('Y-m-d',$devisDate); $devisDate = $devisDate->format('d-m-Y'); - $tvaValue = $this->factureData["configuration"]->tva_default; + $tvaValue = $this->orderData["configuration"]->tva_default; $totalHt = 0; $totalTtc = 0; $totalTva = 0; - $products = $this->factureData["products"]; + $products = $this->orderData["products"]; $yValue = 116; foreach($products as $product){ $valueHt = $product['produit_price']; @@ -186,7 +186,7 @@ class InvoicePdfHandler extends FPDF { $dateValue = ""; if($product === end($products)){ $dateValue = $devisDate; - $productDescription .= " de " . FileExportHelpers::GetSexeLabel($this->factureData['defunt_sexe']) . ' '. $this->factureData["defunt_nom"]; + $productDescription .= " de " . FileExportHelpers::GetSexeLabel($this->orderData['defunt_sexe']) . ' '. $this->orderData["defunt_nom"]; } $tvaAmount = $valueTtc - $valueHt; $this->SetXY( 10,$yValue ); @@ -218,7 +218,7 @@ class InvoicePdfHandler extends FPDF { $this->SetY(210); $this->SetFont('Arial', '', 9); - $this->MultiCell(0,5,utf8_decode(html_entity_decode("Paiement à votre convenance par chèque à l'ordre de ". $this->factureData['configuration']->entreprise))); + $this->MultiCell(0,5,utf8_decode(html_entity_decode("Paiement à votre convenance par chèque à l'ordre de ". $this->orderData['configuration']->entreprise))); $this->MultiCell(0,5,utf8_decode(html_entity_decode("en indiquant le numéro de facture, ou par virement :"))); $this->Ln(1); @@ -246,7 +246,7 @@ class InvoicePdfHandler extends FPDF { public function SetMultipleFactureContent(){ foreach($this->multipleFactureData as $factureData){ - $this->factureData = $factureData; + $this->orderData = $factureData; $this->SetFactureContent(); } } diff --git a/gestion/lib/Service/Order/OrderPdfService.php b/gestion/lib/Service/Order/OrderPdfService.php new file mode 100644 index 0000000..7544950 --- /dev/null +++ b/gestion/lib/Service/Order/OrderPdfService.php @@ -0,0 +1,139 @@ + + * + * @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; + +use DateTime; +use OCA\Gestion\Constants\BddConstant; +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; + return $orderPdfData; + } + + private function getCommandeFolders($orderPdfData,$racinePath){ + $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 + ]; + } + + private function GetOrderFilename($orderPdfData){ + $orderFullNumber = $orderPdfData['order_full_number']; + $orderFullNumber = str_replace('/','-',$orderFullNumber); + $defuntNom = str_replace(' ',' ',$orderPdfData['defunt_nom']); + return "BDC".'_'.$orderFullNumber.'_'.mb_strtoupper($defuntNom,'UTF-8'); + } + + 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; + } +} diff --git a/gestion/lib/Service/Order/OrderService.php b/gestion/lib/Service/Order/OrderService.php index 713fc23..3d56121 100644 --- a/gestion/lib/Service/Order/OrderService.php +++ b/gestion/lib/Service/Order/OrderService.php @@ -27,6 +27,7 @@ declare(strict_types=1); namespace OCA\Gestion\Service\Order; use OCA\Gestion\Db\OrderBdd; +use OCA\Gestion\Helpers\FileExportHelpers; use Psr\Log\LoggerInterface; class OrderService { @@ -95,4 +96,17 @@ class OrderService { public function getOrderTotalAmount($orderId,$tva){ return $this->orderBdd->getOrderTotalAmount($orderId,$tva); } + + public function getOrderPdfData($orderId){ + $orderDetails = $this->orderBdd->getOrderByIdWithDetails($orderId); + if($orderDetails == null){ + return null; + } + $orderProducts = $this->orderBdd->getOrderProductsByOrderId($orderId); + $orderDetails["products"] = $orderProducts; + $clientAdresses = FileExportHelpers::GetAddressAndCityFromAddress($orderDetails["client_adresse"]); + $orderDetails["client_real_adress"] = $clientAdresses["address"]; + $orderDetails["client_adress_city"] = $clientAdresses["city"]; + return $orderDetails; + } } diff --git a/gestion/lib/Service/Order/PdfHandler/OrderPdfHandler.php b/gestion/lib/Service/Order/PdfHandler/OrderPdfHandler.php new file mode 100644 index 0000000..ab1f1cb --- /dev/null +++ b/gestion/lib/Service/Order/PdfHandler/OrderPdfHandler.php @@ -0,0 +1,289 @@ + + * + * @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\PdfHandler; + +use DateTime; +use \FPDF; +use OCA\Gestion\Helpers\FileExportHelpers; +use OCA\Gestion\Helpers\PriceHelpers; + +class OrderPdfHandler extends FPDF { + private $orderData = []; + private $logoExist = false; + private $logoPath = "/var/www/html/data/admin/files/.gestion/"; + + private const DEFAULT_SUBCONTRACTOR_NAME = "SOUS TRAITANT"; + function Header() + { + if($this->logoExist){ + $this->Image($this->logoPath."logo.png", 10, 10, 50, 25); + } + else{ + $this->Cell(55,30,''); + } + } + function Footer() + { + $this->SetY(-40); + $this->SetFont('Arial', '', 7); + $this->MultiCell(0,5,utf8_decode(html_entity_decode('Tout retard de paiement entraînera de plein droit une pénalité de retard de 3 fois le taux légal ( Loi 2008-776 du 4 août 2008) et une indemnité forfaitaire de 40 EUR pour frais de recouvrement sera appliquée.'))); + $this->Ln(1); + $this->MultiCell(0,5,utf8_decode(html_entity_decode('Si les frais de recouvrement sont supérieurs à ce montant forfaitaire, une indemnisation complémentaire sera due sur présentation de justificatifs ( articles L.441-3 et L.441-6 du code de commerce ). +'))); + + $this->SetY(-15); + $this->SetFont('Arial', 'B', 8); + $this->Cell(0, 10, utf8_decode(html_entity_decode($this->orderData['configuration']->legal_one)), 0, 0, 'C'); + } + + public function OrderPdfFactory(array $factureData,$logoExist = false){ + $this->orderData = $factureData; + $this->logoExist = $logoExist; + } + + private function DrawOrderCompanyAndClientInfo(){ + $this->SetY(40); + $this->SetFont('Arial', '', 12); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport($this->orderData['configuration']->entreprise), 0, 0); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport( + self::DEFAULT_SUBCONTRACTOR_NAME), +0, 1,'R'); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport($this->orderData['configuration_adresse']), 0, 0); + $this->Cell(0, 7, trim(FileExportHelpers::FormatTextForExport($this->orderData['client_real_adress'])), 0, 1,'R'); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport($this->orderData['configuration_adresse_city']), 0, 0);border: + $this->Cell(0, 7, trim(FileExportHelpers::FormatTextForExport($this->orderData['client_adress_city'])), 0, 1,'R'); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport('Tél : ') . FileExportHelpers::FormatTextForExport($this->orderData['configuration']->telephone),0,0); + $this->Cell(0, 7, FileExportHelpers::FormatTextForExport('Numéro') . ' Siret: ' . $this->orderData['client_legal_one'], 0, 1,'R'); + $this->Cell(0, 7, 'Mail : ' . $this->orderData['configuration']->mail, 0, 0); + $this->Cell(0, 7, 'Mail : ' . FileExportHelpers::FormatTextForExport($this->orderData['client_mail']), 0, 1,'R'); + $this->Ln(3); + } + + private function DrawOrderInfoTable(){ + + $this->SetFont('Arial', 'B', 11); + $this->Cell(45, 7, 'DATE DU COMMANDE', 1, 0, 'C'); + $this->Cell(65, 7, 'LIEU', 1, 0, 'C'); + $this->Cell(40, 7, 'COMMANDE', 1, 0, 'C'); + $this->Cell(40, 7, 'DATE DE SOINS', 1, 1, 'C'); + + $this->SetFont('Arial', '', 10); + $this->Cell(45, 7, $this->orderData["order_date"], 1, 0, 'C'); + $this->Cell(65, 7, utf8_decode(html_entity_decode($this->orderData['lieu_nom'])), 1, 0, 'C'); + $this->Cell(40, 7, $this->orderData['order_full_number'], 1, 0, 'C'); + $this->Cell(40, 7, $this->orderData["order_date"], 1, 1, 'C'); + + $this->Ln(4); + } + + private function DrawArticlesTable(){ + $this->SetLineWidth(0.1); + $this->Rect(10, 105, 190, 100, "D"); + // cadre titre des colonnes + $this->Line(10, 115, 200,115); + // les traits verticaux colonnes + $this->Line(35, 105, 35, 205); + $this->Line(135, 105, 135, 205); + $this->Line(155, 105, 155, 205); + $this->Line(175, 105, 175, 205); + } + + private function DrawArticlesTableHeader(){ + $tvaValue = $this->orderData["configuration"]->tva_default; + $this->SetFont('Arial','',10); + $this->SetXY( 10,106 ); + $this->Cell( 20, 8, "Date", 0, 0, 'C'); + + $this->SetXY( 35,106 ); + $this->Cell( 100, 8, "Description", 0, 0, 'C'); + + $this->SetXY( 135,106 ); + $this->Cell( 20, 8, "Prix Uni. HT", 0, 0, 'C'); + + $this->SetXY( 155,106 ); + $this->Cell( 20, 8, 'TVA ' . $tvaValue . '%', 0, 0, 'C'); + + $this->SetXY( 175,106 ); + $this->Cell( 25, 8, "Prix Uni. TTC", 0, 0, 'C'); + + } + + public function DrawArticlesTableValueAndReturnTotalPrice(){ + $this->SetFont('Arial','',10); + $tvaValue = $this->orderData["configuration"]->tva_default; + $totalHt = 0; + $totalTtc = 0; + $totalTva = 0; + $products = $this->orderData["products"]; + $yValue = 116; + foreach($products as $product){ + $valueHt = $product['produit_ht_price']; + $valueTtc = PriceHelpers::calculPriceWithVatValue($valueHt,$tvaValue); + $totalHt+=$valueHt; + $totalTtc+=$valueTtc; + $productDescription = $product["produit_description"]; + $dateValue = ""; + if($product === end($products)){ + $dateValue = $this->orderData["order_date"]; + $productDescription .= " de " . FileExportHelpers::GetSexeLabel($this->orderData['defunt_sexe']) . ' '. $this->orderData["defunt_nom"]; + } + $tvaAmount = $valueTtc - $valueHt; + $this->SetXY( 10,$yValue ); + $this->Cell(20, 6, $dateValue, 0,0); + + $this->SetXY( 35,$yValue ); + $this->MultiAlignCell(100, 6, utf8_decode(html_entity_decode($productDescription)),0,'0',); + + $this->SetXY( 135,$yValue ); + $this->Cell(20, 6, number_format($valueHt,2,'.','').chr(128), 0, 0, 'C'); + + $this->SetXY( 155,$yValue ); + $this->Cell(20, 6, number_format($tvaAmount,2,'.','').chr(128), 0, 0, 'C'); + + $this->SetXY( 175,$yValue ); + $this->Cell(25, 6, number_format($valueTtc,2,'.','').chr(128), 0, 1, 'C'); + $yValue += 12; + $totalTva += $tvaAmount; + } + + return [ + "TOTAL HT" => $totalHt, + "TVA ".$tvaValue. "%" => $totalTva, + "TOTAL TTC" => $totalTtc + ]; + } + + private function DrawBankAndTotalPriceInfo($totalPriceArray){ + $this->SetY(210); + $this->SetFont('Arial', '', 9); + + $this->MultiCell(0,5,utf8_decode(html_entity_decode("Paiement à votre convenance par chèque à l'ordre de ". $this->orderData['configuration']->entreprise))); + $this->MultiCell(0,5,utf8_decode(html_entity_decode("en indiquant le numéro de facture, ou par virement :"))); + + $this->Ln(1); + + //Table IBAN + $this->SetFont('Arial', '', 11); + $ibanWidth = 90; + $ibanCursorY = $this->GetY(); + $this->Cell($ibanWidth, 7, 'IBAN : FR76 3000 3030 7700 0200 2057 074', 1, 1, 'C'); + $ibanCursorX = $this->GetX(); + $this->Cell($ibanWidth, 7, 'Code SWIFT : SOGEFRPP', 1, 1, 'C'); + + //TABLE HT + $ibanLastPositionX = $ibanCursorX+$ibanWidth + 20; + $startOfArrayX = $ibanLastPositionX; + $startOfArrayY = $ibanCursorY; + foreach($totalPriceArray as $label => $price){ + $this->SetXY($startOfArrayX,$startOfArrayY); + $this->Cell(40, 7, $label, 1, 1, 'C'); + $this->SetXY($startOfArrayX + 40,$startOfArrayY); + $this->Cell(40, 7, number_format($price,2,'.','').chr(128), 1, 1, 'C'); + $startOfArrayY += 7; + } + } + + public function SetOrderContent(){ + $this->AddPage(); + $this->SetMargins(10,0,10); + $this->DrawOrderCompanyAndClientInfo(); + $this->DrawOrderInfoTable(); + $this->DrawArticlesTable(); + $this->DrawArticlesTableHeader(); + $totalPriceValue = $this->DrawArticlesTableValueAndReturnTotalPrice(); + $this->DrawBankAndTotalPriceInfo($totalPriceValue); + } + + function MultiAlignCell($w,$h,$text,$border=0,$ln=0,$align='L',$fill=false) + { + // Store reset values for (x,y) positions + $x = $this->GetX() + $w; + $y = $this->GetY(); + + // Make a call to FPDF's MultiCell + $this->MultiCell($w,$h,$text,$border,$align,$fill); + + // Reset the line position to the right, like in Cell + if( $ln==0 ) + { + $this->SetXY($x,$y); + } + } + + function NbLines($w, $txt) + { + // Compute the number of lines a MultiCell of width w will take + if(!isset($this->CurrentFont)) + $this->Error('No font has been set'); + $cw = $this->CurrentFont['cw']; + if($w==0) + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + $s = str_replace("\r",'',(string)$txt); + $nb = strlen($s); + if($nb>0 && $s[$nb-1]=="\n") + $nb--; + $sep = -1; + $i = 0; + $j = 0; + $l = 0; + $nl = 1; + while($i<$nb) + { + $c = $s[$i]; + if($c=="\n") + { + $i++; + $sep = -1; + $j = $i; + $l = 0; + $nl++; + continue; + } + if($c==' ') + $sep = $i; + $l += $cw[$c]; + if($l>$wmax) + { + if($sep==-1) + { + if($i==$j) + $i++; + } + else + $i = $sep+1; + $sep = -1; + $j = $i; + $l = 0; + $nl++; + } + else + $i++; + } + return $nl; + } +}