Copie de modele de facture

Résolu
fabian1085 Messages postés 12 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 25 août 2010 - 17 févr. 2009 à 11:28
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 18 févr. 2009 à 20:11
Bonjour,

J ai une fonction ci-dessous qui doit à partir des données passés en parametre lire un fichier modele, modifier les données necessaire et enregistrer ensuite dans un fichier de sortie. Ma fonction marche trés bien, mais le soucis est que je fais un boucle dans laquelle j appele cette fonction, et qd je vais voir le contenu du fichier de sortie une fois ma boucle effectuée, je ne vois que le modele de facture avec les champs modifier du premier passage de ma boucle dans mon fichier et pas les autres. Quelqu'un pourrait il m aider ?

code :
function creerFacture($fact,$client,$intervention)
{
   $nomFichierModele="./modeleFact.rtf";
   $modele=fopen($nomFichierModele,"r");
   if($modele==NULL)
   {
      return -1;
   }
   $sortie="./".date("d-m-Y").".rtf";
   $destination=fopen($sortie,"a+");
   if($destination==NULL)
   {
      return -2;
   }
   //$sortie="./".date("d-m-Y").".rtf";
   $contenu=fread($modele,filesize($nomFichierModele));
   $dateFact=date("d/m/Y");
   $out=str_replace("dateFact",$dateFact,$contenu);
   /**** SUITE DES str_replace ...****/
   fputs($destination,$out);
   fclose($modele);
   fclose($destination);
}

donc cette fonction est appele dans une boucle for, et quand je regarde le resultat, je ne vois que le resultat du premier element de ma boucle et pas la suite.

Merci pour vos reponse 

Fabian 

3 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
18 févr. 2009 à 20:11
Décidément, tu as l'air d'avoir fait du C avant avant de découvrir php ^^ Une petite astuce : en php on peux utiliser foreach() pour parcourir un tableau, c'est bien plus pratique :)
Bref, en effet tu peux plutôt créer le tableau contenant les changements dans ta boucle et le passer en paramètre a ta méthode de création du rtf.
Au passage, si comme je le devine tu n'as pas besoin de différencier une erreur lors de la récupération du template d'une erreur lors de l'écriture du nouveau fichier, autant que ta méthode renvoie true ou false, il y a de vrais booleens en php.

Pour ce qui est de mettre plusieurs factures dans un seul fichier (une facture par page je suppose) c'est tout a fait possible. Je ne connais pas personellement les spécifications du formet rft mais elles sont librement disponibles à l'adresse suivante :
http://www.snake.net/software/RTF/
Bien entendu tu peux étudier le format rtf en créant des document avec un éditeur wysiwyg puis regardant ce qui a été généré (quoique ça risque d'être dur a lire).
3
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
17 févr. 2009 à 22:20
Salut,

Je me permet de réécrire ta fonction en un peu plus simple :

define('TEMPLATE', './modeleFact.rtf');

function        creerFacture($fact, $client, $intervention)
{  if (($tpl file_get_contents(TEMPLATE)) false)
    return -1;
  $dest = './facture_' . $client . date('_d-m-Y') . '.rtf';  $change array('dateFact'> date('d-m-Y'),
                  'intervention'    => $intervention,
                  'suite' => 'suite',
                  'toto' => 'titi');  if (($tpl file_put_contents($dest, strtr($tpl, $change))) false)
    return -2;
  return 0;
}

Tu remarquera au passage que j'ai modifié le nom du fichier de sortie, en particulier en y ajoutant le nom du client afin d'éviter que tu n'écrive tout le temps dans la même.
Pour les changements, plutôt que de faire toute une kyrielle de str_replace() on préférera utiliser un seul strtr() avec un tableau. Une bonne chose serais de former le tableau avant l'appel la fonction afin d'éviter de passer trop de paramètres.
Ho, et si le non du template n'est pas destiné a changer autant le mettre en define afin d'écarter définitivement toute modification (une étourderie est vite arrivée, nous sommes tous des humains).

Sinon, est-il possible de voir ta boucle qui appelle ta fonction stp ?
0
fabian1085 Messages postés 12 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 25 août 2010 3
18 févr. 2009 à 19:46
Le code de ma boucle est assez long, je vais te mettre le principal

for($i=0;$i<=sizeof($monArray);$i++){

//monArray[$i] represante une serie de donnees qui doit etre facturee
/*Batterie de test pour voir si les information sont bonnes*/
....
/*Mise en forme des informations dans des tableau $intervention,$client,$fact*/
....
/*Appel de ma fonction*/
$this->creerFacture($fact, $client, $intervention);
}

Voila. Sinon pour le nom de fichier de sortie, c est justement l'objet de ma question, n'y a-t-il pas moyen de mettre toutes les factures dans le meme fichier afin de ne lancer qu un fichier comprenant tout les factures à l'impression et non pas un fichier par facture ?

Et merci pour ton aide
0
Rejoignez-nous