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);}}?>