All pastes #236459 Raw Edit

segfault-

public php v1 · immutable
·published 2006-11-03 20:28 UTC
rendered paste body
 4);// Xavier Nicolay 2004// Version 1.01// NB:// les fonctions dont la 1ère lettre est majuscule se réfèrent//    à la classe FPDF// les fonctions dont la 1ère lettre est minuscule se réfèrent//    à la classe locale (i.e. invoice)//// RAF (Reste A Faire):// + multipage (gestion automatique sur plusieurs pages)// + Ajout de logo// //////////////////////////////////////// fonctions à utiliser (publiques) //////////////////////////////////////////  function sizeOfText( $texte, $larg )//  function addSociete( $nom, $adresse )//  function addDevis( $numdev )//  function addFacture( $numfact )//  function addDate( $date )//  function addClient( $ref )//  function addPageNumber( $page )//  function addClientAdresse( $adresse )//  function addReglement( $mode )//  function addEcheance( $date )//  function addNumTVA($tva)//  function addReference($ref)//  function addCols( $tab )//  function addLineFormat( $tab )//  function lineVert( $tab )//  function addLine( $ligne, $tab )//  function addRemarque($remarque)//  function addCadreTVAs()//  function addCadreEurosFrancs()//  function addTVAs( $params, $tab_tva, $invoice )//  function temporaire( $texte )class INVOICE extends FPDF{// variables privéesvar $colonnes;var $format;var $angle=0;// fonctions privéesfunction RoundedRect($x, $y, $w, $h, $r, $style = ''){	$k = $this->k;	$hp = $this->h;	if($style=='F')		$op='f';	elseif($style=='FD' or $style=='DF')		$op='B';	else		$op='S';	$MyArc = 4/3 * (sqrt(2) - 1);	$this->_out(sprintf('%.2f %.2f m',($x+$r)*$k,($hp-$y)*$k ));	$xc = $x+$w-$r ;	$yc = $y+$r;	$this->_out(sprintf('%.2f %.2f l', $xc*$k,($hp-$y)*$k ));	$this->_Arc($xc + $r*$MyArc, $yc - $r, $xc + $r, $yc - $r*$MyArc, $xc + $r, $yc);	$xc = $x+$w-$r ;	$yc = $y+$h-$r;	$this->_out(sprintf('%.2f %.2f l',($x+$w)*$k,($hp-$yc)*$k));	$this->_Arc($xc + $r, $yc + $r*$MyArc, $xc + $r*$MyArc, $yc + $r, $xc, $yc + $r);	$xc = $x+$r ;	$yc = $y+$h-$r;	$this->_out(sprintf('%.2f %.2f l',$xc*$k,($hp-($y+$h))*$k));	$this->_Arc($xc - $r*$MyArc, $yc + $r, $xc - $r, $yc + $r*$MyArc, $xc - $r, $yc);	$xc = $x+$r ;	$yc = $y+$r;	$this->_out(sprintf('%.2f %.2f l',($x)*$k,($hp-$yc)*$k ));	$this->_Arc($xc - $r, $yc - $r*$MyArc, $xc - $r*$MyArc, $yc - $r, $xc, $yc - $r);	$this->_out($op);}function _Arc($x1, $y1, $x2, $y2, $x3, $y3){	$h = $this->h;	$this->_out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c ', $x1*$this->k, ($h-$y1)*$this->k,						$x2*$this->k, ($h-$y2)*$this->k, $x3*$this->k, ($h-$y3)*$this->k));}function Rotate($angle,$x=-1,$y=-1){	if($x==-1)		$x=$this->x;	if($y==-1)		$y=$this->y;	if($this->angle!=0)		$this->_out('Q');	$this->angle=$angle;	if($angle!=0)	{		$angle*=M_PI/180;		$c=cos($angle);		$s=sin($angle);		$cx=$x*$this->k;		$cy=($this->h-$y)*$this->k;		$this->_out(sprintf('q %.5f %.5f %.5f %.5f %.2f %.2f cm 1 0 0 1 %.2f %.2f cm',$c,$s,-$s,$c,$cx,$cy,-$cx,-$cy));	}}function _endpage(){	if($this->angle!=0)	{		$this->angle=0;		$this->_out('Q');	}	parent::_endpage();}// fonctions publiquesfunction sizeOfText( $texte, $largeur ){	$index    = 0;	$nb_lines = 0;	$loop     = TRUE;	while ( $loop )	{		$pos = strpos($texte, "\n");		if (!$pos)		{			$loop  = FALSE;			$ligne = $texte;		}		else		{			$ligne  = substr( $texte, $index, $pos);			$texte = substr( $texte, $pos+1 );		}		$length = floor( $this->GetStringWidth( $ligne ) );		$res = 1 + floor( $length / $largeur) ;		$nb_lines += $res;	}	return $nb_lines;}// Cette fonction affiche en haut, a gauche,// le nom de la societe dans la police Arial-12-Bold// les coordonnees de la societe dans la police Timesfunction addSociete($tels, $fax, $horaires1, $horaires2, $logo){	// réglage du logo 	//$this->Image("finale.jpg",0,0,210); 	$this->Image($logo,4,3,80); 	$x1 = MARGIN;	$y1 = 39; // hauteur de tel 		// téléphone	$this->SetXY(MARGIN + 15 , $y1);	$this->SetFont('times','U',12);	$length = $this->GetStringWidth("Téléphone :");	$this->Cell($length, 4, "Téléphone :");	$this->SetXY(MARGIN + 15 + $length + 2, $y1);	$this->SetFont('times','',12);	$length = $this->GetStringWidth($tels);	$this->Cell($length, 4, $tels);	// Fax	$this->SetXY(MARGIN + 15, $y1+5);	$this->SetFont('times','U',12);	$length = $this->GetStringWidth("Télécopie :");	$this->Cell($length, 4, "Télécopie :");	$this->SetXY(MARGIN + 16.60 + $length + 2, $y1+5);	$this->SetFont('times','',12);	$length = $this->GetStringWidth($fax);	$this->Cell($length, 4, $fax);		// Horaires (réglage)	$this->SetXY(MARGIN + 16, $y1 + 12.5);	$this->SetFont('times','BU',10.48);	$length = $this->GetStringWidth($horaires1);	$lignes = $this->sizeOfText($horaires1, $length);	$this->Cell($length, 4, $horaires1);		$this->SetXY(MARGIN, $y1 + 17);	$this->SetFont('times','I',8.9);	$length = $this->GetStringWidth($horaires2);	$lignes = $this->sizeOfText($horaires2, $length);	$this->MultiCell(80, 2.7, $horaires2, 0, 'C');}function CadreAdresses(){	// On fait le cadre et les 3 lignes des adresses	$x  = MARGIN + 84; //on passe le logo + 5	$y  = 4; // haut 	$w  = 210 - 79 - MARGIN - 5 - 4 ; // 210 = taille de page - logo - marge gauche - espace apres logo - marge de droite	$h  = 23 ; // hauteur	$this->SetLineWidth(0.3);	$this->RoundedRect($x, $y, $w, $h, 3.5, 'D');	$this->Line($x+39, $y, $x+39, $y+23); // premiere ligne verticale : debut du cadre + 38mm	$this->Line($x+38+32, $y, $x+38+32, $y+23); // 2eme ligne verticale : }function addAdresse1($nom, $rue, $cp, $ville, $note){	// magasin 1	$length = $this->GetStringWidth("Magasin 1");	$this->SetXY(MARGIN + 84 + (38/2 - $length/2), 4+0.5); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 0.5)	$this->SetFont('times','BU',8.9);	$lignes = $this->sizeOfText("Magasin 1", $length);	$this->Cell($length, 3, "Magasin 1");		// MATELAS+	$length = $this->GetStringWidth($nom);	$this->SetXY(MARGIN + 84 + (38/2 - $length/2), 4+7); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 7)	$this->SetFont('times','',9.3);	$lignes = $this->sizeOfText($nom, $length);	$this->Cell($length, 3, $nom);	// RUE	$length = $this->GetStringWidth($rue);	$this->SetXY(MARGIN + 84 + (38/2 - $length/2), 4+11); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 11)	$this->SetFont('times','',9.3);	$lignes = $this->sizeOfText($rue, $length);	$this->Cell($length, 3, $rue);		// CP	$length = $this->GetStringWidth($cp."   ".$ville);	$this->SetXY(MARGIN + 84 + (38/2 - $length/2)-1, 4+15); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 15)	$this->SetFont('times','B',9.3);	$lignes = $this->sizeOfText($cp, $length);	$this->Cell($length, 3, $cp);		// VILLE	$length = $this->GetStringWidth($cp." ".$ville);	$lengthCP = $this->GetStringWidth($cp." ");	$this->SetXY(MARGIN + 84 + (38/2 - $length/2) + $lengthCP-1, 4 + 15); // position du titre  x= 38/2-length/2 + margin + 84 + taille de CP    y= 4+0.5 (bord du cadre + 15) 	$this->SetFont('times','B',9.3);	$lignes = $this->sizeOfText($ville, $length);	$this->Cell($length, 3, $ville);		// Entre parenthèses ()	$length = $this->GetStringWidth($note);	$this->SetXY(MARGIN + 84 + (38/2 - $length/2), 4 + 18.5); // position du titre  x= 38/2-length/2 + margin + 84 + taille de CP    y= 4+0.5 (bord du cadre + 15) 	$this->SetFont('times','I',9.3);	$lignes = $this->sizeOfText($note, $length);	$this->Cell($length, 3, $note);	}function addAdresse2($nom, $rue, $cp, $ville, $note){	// magasin 2	$length = $this->GetStringWidth("Magasin 2");	$this->SetXY(MARGIN + 84 + (38+32/2 - $length/2), 4+0.5); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 0.5)	$this->SetFont('times','BU',8.9);	$lignes = $this->sizeOfText("Magasin 2", $length);	$this->Cell($length, 3, "Magasin 2");		// MATELAS+	$length = $this->GetStringWidth($nom);	$this->SetXY(MARGIN + 84 + (38+32/2 - $length/2), 4+7); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 7)	$this->SetFont('times','',9.3);	$lignes = $this->sizeOfText($nom, $length);	$this->Cell($length, 3, $nom);	// RUE	$length = $this->GetStringWidth($rue);	$this->SetXY(MARGIN + 84 + (38+32/2 - $length/2), 4+11); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 11)	$this->SetFont('times','',9.3);	$lignes = $this->sizeOfText($rue, $length);	$this->Cell($length, 3, $rue);		// CP	$length = $this->GetStringWidth($cp."   ".$ville);	$this->SetXY(MARGIN + 84 + (38+32/2 - $length/2)-1, 4+15); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 15)	$this->SetFont('times','B',9.3);	$lignes = $this->sizeOfText($cp, $length);	$this->Cell($length, 3, $cp);		// VILLE	$length = $this->GetStringWidth($cp." ".$ville);	$lengthCP = $this->GetStringWidth($cp." ");	$this->SetXY(MARGIN + 84 + (38+32/2 - $length/2) + $lengthCP-1, 4 + 15); // position du titre  x= 38/2-length/2 + margin + 84 + taille de CP    y= 4+0.5 (bord du cadre + 15) 	$this->SetFont('times','B',9.3);	$lignes = $this->sizeOfText($ville, $length);	$this->Cell($length, 3, $ville);		// Entre parenthèses ()	$length = $this->GetStringWidth($note);	$this->SetXY(MARGIN + 84 + (38+32/2 - $length/2), 4 + 18.5); // position du titre  x= 38/2-length/2 + margin + 84 + taille de CP    y= 4+0.5 (bord du cadre + 15) 	$this->SetFont('times','I',9.3);	$lignes = $this->sizeOfText($note, $length);	$this->Cell($length, 3, $note);	}function addAdresse3($nom, $rue, $cp, $ville, $note){	// magasin 3	$length = $this->GetStringWidth("Magasin 3");	$this->SetXY(MARGIN + 84 + (38+32+47/2 - $length/2), 4+0.5); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 0.5)	$this->SetFont('times','BU',8.9);	$lignes = $this->sizeOfText("Magasin 3", $length);	$this->Cell($length, 3, "Magasin 3");		// MATELAS+	$length = $this->GetStringWidth($nom);	$this->SetXY(MARGIN + 84 + (38+32+47/2 - $length/2), 4+7); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 7)	$this->SetFont('times','',9.3);	$lignes = $this->sizeOfText($nom, $length);	$this->Cell($length, 3, $nom);	// RUE	$length = $this->GetStringWidth($rue);	$this->SetXY(MARGIN + 84 + (38+32+47/2 - $length/2), 4+11); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 11)	$this->SetFont('times','',9.3);	$lignes = $this->sizeOfText($rue, $length);	$this->Cell($length, 3, $rue);		// CP	$length = $this->GetStringWidth($cp."   ".$ville);	$this->SetXY(MARGIN + 84 + (38+32+47/2 - $length/2)-1, 4+15); // position du titre  x= 38/2-length/2 + margin + 84     y= 4+0.5 (bord du cadre + 15)	$this->SetFont('times','B',9.3);	$lignes = $this->sizeOfText($cp, $length);	$this->Cell($length, 3, $cp);		// VILLE	$length = $this->GetStringWidth($cp." ".$ville);	$lengthCP = $this->GetStringWidth($cp." ");	$this->SetXY(MARGIN + 84 + (38+32+47/2 - $length/2) + $lengthCP-1, 4 + 15); // position du titre  x= 38/2-length/2 + margin + 84 + taille de CP    y= 4+0.5 (bord du cadre + 15) 	$this->SetFont('times','B',9.3);	$lignes = $this->sizeOfText($ville, $length);	$this->Cell($length, 3, $ville);		// Entre parenthèses ()	$length = $this->GetStringWidth($note);	$this->SetXY(MARGIN + 84 + (38+32+47/2 - $length/2), 4 + 18.5); // position du titre  x= 38/2-length/2 + margin + 84 + taille de CP    y= 4+0.5 (bord du cadre + 15) 	$this->SetFont('times','I',9.3);	$lignes = $this->sizeOfText($note, $length);	$this->Cell($length, 3, $note);	}// affiche le cadre client // todo : 1: fonction de verif données formulaire//	  2: fonction sql pour ajouter les données ET dans ventes ET dans FichierClientsfunction CadreClients(){        // On fait le cadre et les 3 lignes des adresses        $x  = MARGIN + 102; //on passe le logo + 5        $y  = 30; // haut        $w  = 210 - 48 - MARGIN - 54 - 4 ; // 210 = taille de page - logo - marge gauche - espace apres logo - marge de droite        $h  = 38; // hauteur	$this->RoundedRect($x, $y, $w, $h, 7, 'D');        //$this->Line($x+39, $y, $x+39, $y+23); // premiere ligne verticale : debut du cadre + 38mm        //$this->Line($x+38+32, $y, $x+38+32, $y+23); // 2eme ligne verticale :}// Genere automatiquement un numero de devisfunction addDevis( $numdev ){	$string = sprintf("DEV%04d",$numdev);	$this->fact_dev( "Devis", $string );}// Genere automatiquement un numero de facturefunction addFacture( $numfact ){	$string = sprintf("FA%04d",$numfact);	$this->fact_dev( "Facture", $string );}// Affiche un cadre avec la date de la facture / devis// (en haut, a droite)function addDate( $date ){	$r1  = $this->w - 61;	$r2  = $r1 + 30;	$y1  = 17;	$y2  = $y1 ;	$mid = $y1 + ($y2 / 2);	$this->RoundedRect($r1, $y1, ($r2 - $r1), $y2, 3.5, 'D');	$this->Line( $r1, $mid, $r2, $mid);	$this->SetXY( $r1 + ($r2-$r1)/2 - 5, $y1+3 );	$this->SetFont( "Helvetica", "B", 10);	$this->Cell(10,5, "DATE", 0, 0, "C");	$this->SetXY( $r1 + ($r2-$r1)/2 - 5, $y1+9 );	$this->SetFont( "Helvetica", "", 10);	$this->Cell(10,5,$date, 0,0, "C");}// Affiche un cadre avec les references du client// (en haut, a droite)function addClient( $ref ){	$r1  = $this->w - 31;	$r2  = $r1 + 19;	$y1  = 17;	$y2  = $y1;	$mid = $y1 + ($y2 / 2);	$this->RoundedRect($r1, $y1, ($r2 - $r1), $y2, 3.5, 'D');	$this->Line( $r1, $mid, $r2, $mid);	$this->SetXY( $r1 + ($r2-$r1)/2 - 5, $y1+3 );	$this->SetFont( "Helvetica", "B", 10);	$this->Cell(10,5, "CLIENT", 0, 0, "C");	$this->SetXY( $r1 + ($r2-$r1)/2 - 5, $y1 + 9 );	$this->SetFont( "Helvetica", "", 10);	$this->Cell(10,5,$ref, 0,0, "C");}// Affiche un cadre avec un numero de page// (en haut, a droite)function addPageNumber( $page ){	$r1  = $this->w - 80;	$r2  = $r1 + 19;	$y1  = 17;	$y2  = $y1;	$mid = $y1 + ($y2 / 2);	$this->RoundedRect($r1, $y1, ($r2 - $r1), $y2, 3.5, 'D');	$this->Line( $r1, $mid, $r2, $mid);	$this->SetXY( $r1 + ($r2-$r1)/2 - 5, $y1+3 );	$this->SetFont( "Helvetica", "B", 10);	$this->Cell(10,5, "PAGE", 0, 0, "C");	$this->SetXY( $r1 + ($r2-$r1)/2 - 5, $y1 + 9 );	$this->SetFont( "Helvetica", "", 10);	$this->Cell(10,5,$page, 0,0, "C");}// Affiche l'adresse du client// (en haut, a droite)function addClientAdresse( $adresse ){	$r1     = $this->w - 80;	$r2     = $r1 + 68;	$y1     = 40;	$this->SetXY( $r1, $y1);	$this->MultiCell( 60, 4, $adresse);}// Affiche un cadre avec le règlement (chèque, etc...)// (en haut, a gauche)function addReglement( $mode ){	$r1  = 10;	$r2  = $r1 + 60;	$y1  = 80;	$y2  = $y1+10;	$mid = $y1 + (($y2-$y1) / 2);	$this->RoundedRect($r1, $y1, ($r2 - $r1), ($y2-$y1), 2.5, 'D');	$this->Line( $r1, $mid, $r2, $mid);	$this->SetXY( $r1 + ($r2-$r1)/2 -5 , $y1+1 );	$this->SetFont( "Helvetica", "B", 10);	$this->Cell(10,4, "MODE DE REGLEMENT", 0, 0, "C");	$this->SetXY( $r1 + ($r2-$r1)/2 -5 , $y1 + 5 );	$this->SetFont( "Helvetica", "", 10);	$this->Cell(10,5,$mode, 0,0, "C");}// Affiche un cadre avec la date d'echeance// (en haut, au centre)function addEcheance( $date ){	$r1  = 80;	$r2  = $r1 + 40;	$y1  = 80;	$y2  = $y1+10;	$mid = $y1 + (($y2-$y1) / 2);	$this->RoundedRect($r1, $y1, ($r2 - $r1), ($y2-$y1), 2.5, 'D');	$this->Line( $r1, $mid, $r2, $mid);	$this->SetXY( $r1 + ($r2 - $r1)/2 - 5 , $y1+1 );	$this->SetFont( "Helvetica", "B", 10);	$this->Cell(10,4, "DATE D'ECHEANCE", 0, 0, "C");	$this->SetXY( $r1 + ($r2-$r1)/2 - 5 , $y1 + 5 );	$this->SetFont( "Helvetica", "", 10);	$this->Cell(10,5,$date, 0,0, "C");}// Affiche un cadre avec le numero de la TVA// (en haut, au droite)function addNumTVA($tva){	$this->SetFont( "Helvetica", "B", 10);	$r1  = $this->w - 80;	$r2  = $r1 + 70;	$y1  = 80;	$y2  = $y1+10;	$mid = $y1 + (($y2-$y1) / 2);	$this->RoundedRect($r1, $y1, ($r2 - $r1), ($y2-$y1), 2.5, 'D');	$this->Line( $r1, $mid, $r2, $mid);	$this->SetXY( $r1 + 16 , $y1+1 );	$this->Cell(40, 4, "TVA Intracommunautaire", '', '', "C");	$this->SetFont( "Helvetica", "", 10);	$this->SetXY( $r1 + 16 , $y1+5 );	$this->Cell(40, 5, $tva, '', '', "C");}// Affiche une ligne avec des reference// (en haut, a gauche)function addReference($ref){	$this->SetFont( "Helvetica", "", 10);	$length = $this->GetStringWidth( "Références : " . $ref );	$r1  = 10;	$r2  = $r1 + $length;	$y1  = 92;	$y2  = $y1+5;	$this->SetXY( $r1 , $y1 );	$this->Cell($length,4, "Références : " . $ref);}// trace le cadre des colonnes du devis/facturefunction addCols( $tab ){	global $colonnes;		$r1  = 10;	$r2  = $this->w - ($r1 * 2) ;	$y1  = 100;	$y2  = $this->h - 50 - $y1;	$this->SetXY( $r1, $y1 );	//$this->RoundedRect($x, $y, $w, $h, 3.5, 'D');	$this->RoundedRect( $r1, $y1, $r2, $y2, 3.5, "D");	$this->Line( $r1, $y1+6, $r1+$r2, $y1+6);	$colX = $r1;	$colonnes = $tab;	//while ( list( $lib, $pos ) = each ($tab) )	//for($i = 0; $i < count($tab); $i++)        for($i = 0; $i < count($tab); $i++; )        {                list( $lib, $pos ) = $tab[$i];                $this->SetXY( $colX, $y1+2 );                $this->Cell( $pos, 1, $lib, 0, 0, "C");                $colX += $pos;                $this->Line( $colX, $y1, $colX, $y1+$y2);        }}// mémorise le format (gauche, centre, droite) d'une colonnefunction addLineFormat( $tab ){	global $format, $colonnes;		while ( list( $lib, $pos ) = each ($colonnes) )	{		if ( isset( $tab["$lib"] ) )			$format[ $lib ] = $tab["$lib"];	}}function lineVert( $tab ){	global $colonnes;	reset( $colonnes );	$maxSize=0;	while ( list( $lib, $pos ) = each ($colonnes) )	{		$texte = $tab[ $lib ];		$longCell  = $pos -2;		$size = $this->sizeOfText( $texte, $longCell );		if ($size > $maxSize)			$maxSize = $size;	}	return $maxSize;}// Affiche chaque "ligne" d'un devis / facture/*    $ligne = array( "REFERENCE"    => $prod["ref"],                      "DESIGNATION"  => $libelle,                      "QUANTITE"     => sprintf( "%.2f", $prod["qte"]) ,                      "P.U. HT"      => sprintf( "%.2f", $prod["px_unit"]),                      "MONTANT H.T." => sprintf ( "%.2f", $prod["qte"] * $prod["px_unit"]) ,                      "TVA"          => $prod["tva"] );*/function addLine( $ligne, $tab ){	global $colonnes, $format;	$ordonnee     = 10;	$maxSize      = $ligne;	reset( $colonnes );	while ( list( $lib, $pos ) = each ($colonnes) )	{		$longCell  = $pos -2;		$texte     = $tab[ $lib ];		$length    = $this->GetStringWidth( $texte );		$tailleTexte = $this->sizeOfText( $texte, $length );		$formText  = $format[ $lib ];		$this->SetXY( $ordonnee, $ligne-1);		$this->MultiCell( $longCell, 4 , $texte, 0, $formText);		if ( $maxSize < ($this->GetY()  ) )			$maxSize = $this->GetY() ;		$ordonnee += $pos;	}	return ( $maxSize - $ligne );}// Ajoute une remarque (en bas, a gauche)function addRemarque($remarque){	$this->SetFont( "Helvetica", "", 10);	$length = $this->GetStringWidth( "Remarque : " . $remarque );	$r1  = 10;	$r2  = $r1 + $length;	$y1  = $this->h - 45.5;	$y2  = $y1+5;	$this->SetXY( $r1 , $y1 );	$this->Cell($length,4, "Remarque : " . $remarque);}// trace le cadre des TVAsfunction addCadreTVAs(){	$this->SetFont( "Arial", "B", 8);	$r1  = 10;	$r2  = $r1 + 120;	$y1  = $this->h - 40;	$y2  = $y1+20;	$this->RoundedRect($r1, $y1, ($r2 - $r1), ($y2-$y1), 2.5, 'D');	$this->Line( $r1, $y1+4, $r2, $y1+4);	$this->Line( $r1+5,  $y1+4, $r1+5, $y2); // avant BASES HT	$this->Line( $r1+27, $y1, $r1+27, $y2);  // avant REMISE	$this->Line( $r1+43, $y1, $r1+43, $y2);  // avant MT TVA	$this->Line( $r1+63, $y1, $r1+63, $y2);  // avant % TVA	$this->Line( $r1+75, $y1, $r1+75, $y2);  // avant PORT	$this->Line( $r1+91, $y1, $r1+91, $y2);  // avant TOTAUX	$this->SetXY( $r1+9, $y1);	$this->Cell(10,4, "BASES HT");	$this->SetX( $r1+29 );	$this->Cell(10,4, "REMISE");	$this->SetX( $r1+48 );	$this->Cell(10,4, "MT TVA");	$this->SetX( $r1+63 );	$this->Cell(10,4, "% TVA");	$this->SetX( $r1+78 );	$this->Cell(10,4, "PORT");	$this->SetX( $r1+100 );	$this->Cell(10,4, "TOTAUX");	$this->SetFont( "Arial", "B", 6);	$this->SetXY( $r1+93, $y2 - 8 );	$this->Cell(6,0, "H.T.   :");	$this->SetXY( $r1+93, $y2 - 3 );	$this->Cell(6,0, "T.V.A. :");}// trace le cadre des totauxfunction addCadreEurosFrancs(){	$r1  = $this->w - 70;	$r2  = $r1 + 60;	$y1  = $this->h - 40;	$y2  = $y1+20;	$this->RoundedRect($r1, $y1, ($r2 - $r1), ($y2-$y1), 2.5, 'D');	$this->Line( $r1+20,  $y1, $r1+20, $y2); // avant EUROS	$this->Line( $r1+20, $y1+4, $r2, $y1+4); // Sous Euros & Francs	$this->Line( $r1+38,  $y1, $r1+38, $y2); // Entre Euros & Francs	$this->SetFont( "Arial", "B", 8);	$this->SetXY( $r1+22, $y1 );	$this->Cell(15,4, "EUROS", 0, 0, "C");	$this->SetFont( "Arial", "", 8);	$this->SetXY( $r1+42, $y1 );	$this->Cell(15,4, "FRANCS", 0, 0, "C");	$this->SetFont( "Arial", "B", 6);	$this->SetXY( $r1, $y1+5 );	$this->Cell(20,4, "TOTAL TTC", 0, 0, "C");	$this->SetXY( $r1, $y1+10 );	$this->Cell(20,4, "ACOMPTE", 0, 0, "C");	$this->SetXY( $r1, $y1+15 );	$this->Cell(20,4, "NET A PAYER", 0, 0, "C");}function addTVAs( $params, $tab_tva, $invoice ){	$this->SetFont('Arial','',8);		reset ($invoice);	$px = array();	while ( list( $k, $prod) = each( $invoice ) )	{		$tva = $prod["tva"];		@ $px[$tva] += $prod["qte"] * $prod["px_unit"];	}	$prix     = array();	$totalHT  = 0;	$totalTTC = 0;	$totalTVA = 0;	$y = 261;	reset ($px);	natsort( $px );	while ( list($code_tva, $articleHT) = each( $px ) )	{		$tva = $tab_tva[$code_tva];		$this->SetXY(17, $y);		$this->Cell( 19,4, sprintf("%0.2f", $articleHT),'', '','R' );		if ( $params["RemiseGlobale"]==1 )		{			if ( $params["remise_tva"] == $code_tva )			{				$this->SetXY( 37.5, $y );				if ($params["remise"] > 0 )				{					if ( is_int( $params["remise"] ) )						$l_remise = $param["remise"];					else						$l_remise = sprintf ("%.02f", $params["remise"]);					$this->Cell( 14.5,4, $l_remise, '', '', 'R' );					$articleHT -= $params["remise"];				}				else if ( $params["remise_percent"] > 0 )				{					$rp = $params["remise_percent"];					if ( $rp > 1 )						$rp /= 100;					$rabais = $articleHT * $rp;					$articleHT -= $rabais;					if ( is_int($rabais) )						$l_remise = $rabais;					else						$l_remise = sprintf ("%.02f", $rabais);					$this->Cell( 14.5,4, $l_remise, '', '', 'R' );				}				else					$this->Cell( 14.5,4, "ErrorRem", '', '', 'R' );			}		}		$totalHT += $articleHT;		$totalTTC += $articleHT * ( 1 + $tva/100 );		$tmp_tva = $articleHT * $tva/100;		$a_tva[ $code_tva ] = $tmp_tva;		$totalTVA += $tmp_tva;		$this->SetXY(11, $y);		$this->Cell( 5,4, $code_tva);		$this->SetXY(53, $y);		$this->Cell( 19,4, sprintf("%0.2f",$tmp_tva),'', '' ,'R');		$this->SetXY(74, $y);		$this->Cell( 10,4, sprintf("%0.2f",$tva) ,'', '', 'R');		$y+=4;	}	if ( $params["FraisPort"] == 1 )	{		if ( $params["portTTC"] > 0 )		{			$pTTC = sprintf("%0.2f", $params["portTTC"]);			$pHT  = sprintf("%0.2f", $pTTC / 1.196);			$pTVA = sprintf("%0.2f", $pHT * 0.196);			$this->SetFont('Arial','',6);			$this->SetXY(85, 261 );			$this->Cell( 6 ,4, "HT : ", '', '', '');			$this->SetXY(92, 261 );			$this->Cell( 9 ,4, $pHT, '', '', 'R');			$this->SetXY(85, 265 );			$this->Cell( 6 ,4, "TVA : ", '', '', '');			$this->SetXY(92, 265 );			$this->Cell( 9 ,4, $pTVA, '', '', 'R');			$this->SetXY(85, 269 );			$this->Cell( 6 ,4, "TTC : ", '', '', '');			$this->SetXY(92, 269 );			$this->Cell( 9 ,4, $pTTC, '', '', 'R');			$this->SetFont('Arial','',8);			$totalHT += $pHT;			$totalTVA += $pTVA;			$totalTTC += $pTTC;		}		else if ( $params["portHT"] > 0 )		{			$pHT  = sprintf("%0.2f", $params["portHT"]);			$pTVA = sprintf("%0.2f", $params["portTVA"] * $pHT / 100 );			$pTTC = sprintf("%0.2f", $pHT + $pTVA);			$this->SetFont('Arial','',6);			$this->SetXY(85, 261 );			$this->Cell( 6 ,4, "HT : ", '', '', '');			$this->SetXY(92, 261 );			$this->Cell( 9 ,4, $pHT, '', '', 'R');			$this->SetXY(85, 265 );			$this->Cell( 6 ,4, "TVA : ", '', '', '');			$this->SetXY(92, 265 );			$this->Cell( 9 ,4, $pTVA, '', '', 'R');			$this->SetXY(85, 269 );			$this->Cell( 6 ,4, "TTC : ", '', '', '');			$this->SetXY(92, 269 );			$this->Cell( 9 ,4, $pTTC, '', '', 'R');			$this->SetFont('Arial','',8);			$totalHT += $pHT;			$totalTVA += $pTVA;			$totalTTC += $pTTC;		}	}	$this->SetXY(114,266.4);	$this->Cell(15,4, sprintf("%0.2f", $totalHT), '', '', 'R' );	$this->SetXY(114,271.4);	$this->Cell(15,4, sprintf("%0.2f", $totalTVA), '', '', 'R' );	$params["totalHT"] = $totalHT;	$params["TVA"] = $totalTVA;	$accompteTTC=0;	if ( $params["AccompteExige"] == 1 )	{		if ( $params["accompte"] > 0 )		{			$accompteTTC=sprintf ("%.2f", $params["accompte"]);			if ( strlen ($params["Remarque"]) == 0 )				$this->addRemarque( "Accompte de $accompteTTC Euros exigé à la commande.");			else				$this->addRemarque( $params["Remarque"] );		}		else if ( $params["accompte_percent"] > 0 )		{			$percent = $params["accompte_percent"];			if ( $percent > 1 )				$percent /= 100;			$accompteTTC=sprintf("%.2f", $totalTTC * $percent);			$percent100 = $percent * 100;			if ( strlen ($params["Remarque"]) == 0 )				$this->addRemarque( "Accompte de $percent100 % (soit $accompteTTC Euros) exigé à la commande." );			else				$this->addRemarque( $params["Remarque"] );		}		else			$this->addRemarque( "Drôle d'acompte !!! " . $params["Remarque"]);	}	else	{		if ( strlen ($params["Remarque"]) > 0 )			$this->addRemarque( $params["Remarque"] );	}	$re  = $this->w - 50;	$rf  = $this->w - 29;	$y1  = $this->h - 40;	$this->SetFont( "Arial", "", 8);	$this->SetXY( $re, $y1+5 );	$this->Cell( 17,4, sprintf("%0.2f", $totalTTC), '', '', 'R');	$this->SetXY( $re, $y1+10 );	$this->Cell( 17,4, sprintf("%0.2f", $accompteTTC), '', '', 'R');	$this->SetXY( $re, $y1+14.8 );	$this->Cell( 17,4, sprintf("%0.2f", $totalTTC - $accompteTTC), '', '', 'R');	$this->SetXY( $rf, $y1+5 );	$this->Cell( 17,4, sprintf( "%0.2f", $totalTTC * EURO_VAL), '', '', 'R');	$this->SetXY( $rf, $y1+10 );	$this->Cell( 17,4, sprintf("%0.2f", $accompteTTC * EURO_VAL), '', '', 'R');	$this->SetXY( $rf, $y1+14.8 );	$this->Cell( 17,4, sprintf("%0.2f", ($totalTTC - $accompteTTC) * EURO_VAL), '', '', 'R');}// Permet de rajouter un commentaire (Devis temporaire, REGLE, DUPLICATA, ...)// en sous-impression// ATTENTION: APPELER CETTE FONCTION EN PREMIERfunction temporaire( $texte ){	$this->SetFont('Arial','B',50);	$this->SetTextColor(203,203,203);	$this->Rotate(45,55,190);	$this->Text(55,190,$texte);	$this->Rotate(0);	$this->SetTextColor(0,0,0);}}?>