<?php
//session_start();
// ========================================================================================
// Imprimer Le BL ou la facture en PDF
//
// Note : ce fichier doit être codé en caractères ANSI pour que les accents apparaissent correctement
//			Pour toute information complémentaire, consulter le source cdePrint.php
// ========================================================================================
// ========================================================================================
define('FPDF_FONTPATH','library_fpdf/font/');
//require('library_fpdf/fpdf.php');
require('library_fpdf/tfpdf.php'); // nouvelle version pour utiliser des polices UTF-8

include "library/APP_fct.inc.php";
include "library/DB_fct.inc.php";
// ========================================================================================
// FONCTIONS LOCALES
// ========================================================================================
// -------------------------------------------------------------------
function _chkCdeClient($enregKey){ // Récupérer la commande pour vérifier qu'elle existe.
global $connexion;
	return DB_chercherEnreg("SELECT * from cdeClient WHERE cdeNum=$enregKey", $connexion);
}
// -------------------------------------------------------------------
function _getCdeClient($enregKey){ // Récupérer la commande, le client associé et le mode de paiement. On verra pour le mode de transport + tard.
global $connexion;
	$requeteSelect="SELECT * from tier, cdeClient, modePaiement 
	WHERE cliNum=tierNum AND paiemtCode=modePaiement.code AND cdeNum=$enregKey
	";
	return DB_chercherEnreg($requeteSelect, $connexion);
}
// -------------------------------------------------------------------
// (NB les fonctions _dsp...() sont à mettre dans la classe PDF étendue ( class PDF extends FPDF {...} ). voir les tuto
// ENTETE de page (NB à mettre dans la classe PDF étendue)
function _dspHeader($pdf){ // Afficher l'entete ppal de la page 
global $duplicata;
global $cdeNum;
global $t_soc;
global $t_cdeClient;
global $lineHeight;
	// Envoyer la raison sociale locale
		$posX=30; $posY=10; $padding=1; $ligne=5; $cadreHeight=($lineHeight+2)*$ligne ; $cadreWidht=60; // Définition du cadre : x,y  <->, v-^
		$pdf->setXY($posX, $posY);
		$pdf->Cell($cadreWidht,$cadreHeight,"", 1, 1, '');
		$pdf->Text($posX+$padding,$posY+$ligne,$t_soc['name']);
		$pdf->Text($posX+$padding,$posY+$ligne*2,$t_soc['rue']);
		$pdf->Text($posX+$padding,$posY+$ligne*3,$t_soc['ville']);
/*
		$pdf->MultiCell($cadrePos['l'], $cadrePos['h'], $t_soc['name']."\n".$socAdress, '1', '' , 0);
*/
	// Envoyer la raison sociale Client		
		$posX=100; $posY=45; $padding=1; $ligne=6; $cadreHeight=($lineHeight+2)*$ligne ; $cadreWidht=100; // Définition du cadre : x,y  <->, v-^		
		$pdf->setXY($posX, $posY);
		$pdf->Cell($cadreWidht,$cadreHeight,"", 1, 1, '');
		$pdf->setXY($posX+$padding, $posY+$padding);
		// MultiCell(float cellWidth, float cellHeight, string text)
		$pdf->MultiCell($cadreWidht-$padding*2, $lineHeight+2,"Client n° : ".
			$t_cdeClient['tierNum']."\n".
			$t_cdeClient['tierRaisonSociale']."\n".
			$t_cdeClient['tierAdresse']."\n".
			""
		);
		
	// Envoyer le N° et la date de commande
		$payMode= $t_cdeClient['paiemtCode']; // 
		$payModeLib= $t_cdeClient['libelle']; // 

		$cdeDate = $t_cdeClient['cdeDate'];		//$date = dateAnglaisVersFrancais($date);
		$pdf->Text(100,15,"Facture N° ");	$pdf->Text(150,15,"$cdeNum du $cdeDate"); if ($duplicata) $pdf->Text(100,20,"Duplicata ");// Commande
		$pdf->Text(100,20,"Commande N° ");	$pdf->Text(150,20,"$cdeNum du $cdeDate"); 
		if ($duplicata) $pdf->Text(100,25,"Duplicata ");// Commande
		$pdf->Text(11,85,"Paiement par ");	$pdf->Text(50,85,"($payMode) $payModeLib");	// ref moyen de paiement
	// Tracer un trait de séparation
		//$pdf->SetY(($lineHeight+0)*15);
		$pdf->SetY(90);
		$pdf->Cell(0,0, '', 1, 'C');
}
// -------------------------------------------------------------------
// PIED DE PAGE (NB à mettre dans la classe PDF étendue)
function _dspFooter($pdf) {
global $t_soc;
    $pdf->SetY(266);
	$pdf->Cell(0,0, '', 1, 'C');
   // Positionnement à 1,5 cm du bas
    $pdf->SetY(266);
    // Police Arial italique 8
    $pdf->SetFont('Arial','I',8);
    // Numéro de page
    $pdf->Cell(0,10,$t_soc['name'].' SIRET '.$t_soc['SIRET'].' Capital : '.$t_soc['capital'].' Page '.$pdf->PageNo().'/{nb}',0,0,'C');
}
// -------------------------------------------------------------------
// Tableau coloré (idem autres ...)
function _dspFancyTable($header, $data, $pdf) {
global $fontSize;
global $tva;

	// header contient les intitulés des colonnes,
	// $data contient les données sous forme de ligne de cellules (tableau à 2 dimensions)
	
    $pdf->Ln();
	// Définition du tableau
		$nbCols=count($header); // normalement 6 colonnes pour une commande ???
		$w = array(24, 64, 20, 28, 20, 34); // table des largeurs de colonnes

	// entêtes de colonnes
		// Couleurs, épaisseur du trait et police grasse
		$pdf->SetFillColor(128,128,255);
		$pdf->SetTextColor(255);
		$pdf->SetDrawColor(128,128,128);
		$pdf->SetLineWidth(.3);
		//$pdf->SetFont('','B');

		// En-tête
		for($i=0;$i<$nbCols;$i++)
			$pdf->Cell($w[$i],7,$header[$i],1,0,'L',true);
			
    $pdf->Ln();
	
	//lignes du tableau
		// Restauration des couleurs et de la police
		$pdf->SetFillColor(224,235,255);
		$pdf->SetTextColor(0);
		$pdf->SetFont('');

		// Données
		$totalHT=0;
		$fill = false; // remplir ou non la couleur
		foreach($data as $row) {
			$pdf->Cell($w[0],6,$row[0],'LR',0,'L',$fill);	// reférence
			$pdf->SetFont('','', 8);
			$pdf->Cell($w[1],6,$row[1],'LR',0,'L',$fill);	// Description
			$pdf->SetFont('','', $fontSize);
			$pdf->Cell($w[2],6,number_format($row[2],2,',',' '),'LR',0,'R',$fill); 	// qté
			$pdf->Cell($w[3],6,number_format($row[3],2,',',' ')." €",'LR',0,'R',$fill);	// PU HT €
			$pdf->Cell($w[4],6,number_format($row[4],0,',',' ')." %",'LR',0,'R',$fill);	// % Remise
			$pdf->Cell($w[5],6,number_format($row[5],2,',',' ')." €",'LR',0,'R',$fill);	// Total €
			$pdf->Ln();
			$fill = !$fill;
			$totalHT+=$row[5];
		}
		
		// compléter la fin du tableau ?
		$resteLigne=0;
	// Totaux
		$pdf->Cell(array_sum($w),1,'','T');
			$pdf->Ln();
		// Total HT
		$pdf->Cell($w[0]+$w[1],6,"Total HT",'LR',0,'L',$fill);	// Total €
		$pdf->Cell(array_sum($w)-($w[0]+$w[1]),6,number_format($totalHT,2,',',' ')." €",'LR',0,'R',$fill);	// Total €
			$pdf->Ln();
		// Montant TVA
		$pdf->Cell($w[0]+$w[1],6,"TVA ".number_format($tva,2,',',' ')."%",'LR',0,'L',$fill);	// Total €
		$pdf->Cell(array_sum($w)-($w[0]+$w[1]),6,number_format(($totalHT*$tva/100),2,',',' ')." €",'LR',0,'R',$fill);	// Total €
			$pdf->Ln();
		// Total TTC
		$pdf->Cell($w[0]+$w[1],6,"Total TTC",'LR',0,'L',$fill);	// Total €
		$pdf->Cell(array_sum($w)-($w[0]+$w[1]),6,number_format(($totalHT*(1+$tva/100)),2,',',' ')." €",'LR',0,'R',$fill);	// Total €
			$pdf->Ln();
	// Trait de fin du tableau
		$pdf->Cell(array_sum($w),0,'','T');
}
// ========================================================================================
// MAIN()
// ========================================================================================
$userId="";
$pageName="cdePrint.php";
$headTitle="impression commande";
$contentTitle="Impression Commande";
// Définition du caractère euro :
define('EURO', chr(128));

// connexion et ouverture de la base de données
	$connexion=DB_connecter(); 
// conversion de la codification des caractère de la base de données :
	$result=DB_executerRequete("SET CHARACTER SET latin1 ", $connexion);
	echo mysql_error();
	//mysql_set_charset("ISO-8859-15", $connexion);
	
// définition de la société locale
	$t_soc=APP_getSoc();
	$tva=APP_getTVA();

// Récup des paramètres
$errorCode=false;
//(isset($_REQUEST['id'])&&!empty($_REQUEST['id']))?$panierId=$_REQUEST['id']:$panierId=0; // 
$panierId=0;
(isset($_REQUEST['id'])&&!empty($_REQUEST['id']))?$cdeNum=$_REQUEST['id']:$errorCode=300; // 300 commande non définie
(isset($_REQUEST['duplicata'])&&!empty($_REQUEST['duplicata']))?$duplicata=true:$duplicata=false; // code duplicata

// --------------------------------
// GESTION DES ERREURS
	// Vérifier que la commande existe, la récupérer
		$t_record=_chkCdeClient($cdeNum);
		// EN CAS D'ERREUR : Envoi de la page de redirection de base (goToUrl())
		if (!$t_record) $errorCode=310; // Commande inconnue		
	// Affichage des erreurs.
	// 		EN CAS D'ERREUR : Envoi de la page de redirection de base (goToUrl())
		if ($errorCode) {
			$message="erreur ($errorCode). <br>vous allez être redirigé vers l'index ou <a href=\"javascript:history.back()\">Demander le retour page précédente.</a>";
			//$backUrlCompltete="index.php";
			//_goToUrl($message, $backUrlCompltete, '', ''); // pour l'instant, on perd l'utilisateur, voir comment corriger ça ... variables de session ?
			echo $message;
			exit(0);
		}		
// il n'y a pas d'erreur de paramètres, on peut continuer
// --------------------------------
// Création du pdf
	// Récupérer l'entête de la commande client et les données associées
		$t_cdeClient=_getCdeClient($cdeNum);

	// initialisation du document
	

	//$pdf = new FPDF('P','mm','A4'); // nouveau document PDF (orientation=Portrait, mesures en mm, format=A4)
	$pdf = new tFPDF('P','mm','A4');
	$pdf->AddPage();				// nouvelle page par visite (<orientation, format>)
	$pdf->AliasNbPages();			// Définition de l'alias pour le nbr de pages ({nb} par défaut)
	$fontSize=12;					// taille de police
	$lineHeight=($fontSize/12*3);	//
	$pdf->SetFont('Arial','B',$fontSize); // définition de police : type=Arial, B=Gras (I=italique, U=souligné, vide=normale), taille de police
	// ci dessous : tentative avortée de passer en codage UTF8. Ne fonctionne pas !!!
	// Ajoute une police Unicode (utilise UTF-8)
	//$pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true);
	//$pdf->SetFont('DejaVu','',$fontSize); // définition de la police

// afficher l'entête de la page	------------------------------------------------------
	_dspHeader($pdf);
		
// Envoyer le corps de la page	------------------------------------------------------
	// Pour chaque article acheté, Construire puis envoyer le tableau des articles avec le montant HT
		$requeteSelect="SELECT lignecdeclientart.artCode, artDesc, qte, article.artPrixHT, ligneRemiseArticle, (qte*artPrixHT*(1-ligneRemiseArticle)) as ligneMontant, ligneEtat
		FROM lignecdeclientart, article WHERE lignecdeclientart.artCode=article.artCode AND cdeNum=$cdeNum
		";
		$requete_id=DB_ouvrirRequete($requeteSelect, $connexion);
		$t_record=DB_lireLigne($requete_id);
		if ($t_record){ // si un enregistrement est trouvé :
			// création des entêtes de colonnes : code article, description (tronquée), quantité, prix unitaire, remise, prix total
			$header=array("Référence", "Description", "Qté", "PU € HT", "Rem. %", "Total € HT");
			// créer la liste des données à traiter
			while ($t_record){
				$data[]=$t_record;
				$t_record=DB_lireLigne($requete_id);
			}
			// -- Fin de liste
			// envoi du tableau
			_dspFancyTable($header, $data, $pdf); 
		} // fin si ($t_record)
		// fin de la liste des articles
		
// Envoyer Le pied de page : un trait, la raison sociale, le Capital, les codes siret et TVA, etc. ...
	_dspFooter($pdf);

// Afficher le résultat à l'écran
//$pdf->Output('cde1234.pdf', 'F');
//$pdf->Output($t_soc['name']." - cdeNum $cdeNum du $cdeDate.pdf");
 $pdf->Output();
/*
Références et liens : 
	http://www.fpdf.org/
	http://localhost/erp_GFA_local/library_fpdf/tutorial/tuto7.htm
	http://openclassrooms.com/forum/sujet/utilisation-de-la-bibliotheque-fpdf-94660
	http://www.developpez.net/forums/d1385837/php/bibliotheques-frameworks/pdf/fpdf/tfpdf-fpdf-utf-8-a/
	http://www.tcpdf.org/
	http://sourceforge.net/projects/tcpdf/files/
	
*/
?>