Page 1 sur 1

recursivité

Posté : 10 févr. 2010, 20:37
par sharkan
Bonjour,

Je suis nouveau sur ce site et j'espere que je post au bon endroit.

J'ai un fichier csv qui ressemble à ça:
Image

Je dois générer des factures à partir de ce fichier. sur chaque page, il ne doit pas avoir plus que 6 au total. Je m'explique, si je prend la premiere ligne,

sur la page 1 de la facture du magasin 1 j'aurais:

ca commence a la case 3: 2 truffle Ca, 2 truffles Irish, et la je ne peux pas prendre le 3 au complet de la case suivante vue que ca va faire 7 sur cette page alors je dois juste prendre 2 truffle Mi, et commence une autre page avec 1 truffle Mi, 2 truflles Ha, 2 truffles Ch et 1 70%.

Je sais pas si je suis claire. J'ai un code qui marche partiellement que je joins.
	$invoice  = new generatedInvoice("xxxx","xxxx","invoice no","invoice","Arial","15","B","A4","P","mm","xxx","images/logo-1.jpg",'cvs/add.CSV');

	//$invoice->createDocument( 001, $arrayProd );
	$header   = array('Quantity','Article','Description','Totals');
	$path     = 'cvs/Orders - truffles_1.csv';
	$num_prod = array();
	$prod_name= array();
	$tab_ind  = array();
	$t_per_p  = 0;
	$i        = 0;

	if (($handle = fopen($path, "r")) !== FALSE)
	{
		while (($data = fgetcsv($handle, 0, ",")) !== FALSE && $i<=116)
		{
			/*var_dump($data);
			echo ' i = '.$i.'<br />';*/

			if($i == 0)
			{
				//$i++;
				next;
			}
			elseif($i == 1)
			{
				$num_prod[2] = $data[2];
				$num_prod[3] = $data[3];
				$num_prod[4] = $data[4];
				$num_prod[5] = $data[5];
				$num_prod[6] = $data[6];
				$num_prod[7] = $data[7];
				$num_prod[8] = $data[8];
				$num_prod[9] = $data[9];

			}
			elseif($i == 2)
			{
				$prod_name[2] = $data[2];
				$prod_name[3] = $data[3];
				$prod_name[4] = $data[4];
				$prod_name[5] = $data[5];
				$prod_name[6] = $data[6];
				$prod_name[7] = $data[7];
				$prod_name[8] = $data[8];
				$prod_name[9] = $data[9];
			}
			else
			{
				$t_prod = $data[1] * 6;//total product number of box * 6
				$dt     = array();
				$desc   = '';
				$q      = 0;
				$t      = '';
				$j      = 3;

				$t_per_p= $data[2];
				$t      = $data[2] * 40;
				if(!preg_match('#[-]#',$data[2]))
					$dt[]   = array($data[2],$num_prod[2],' Box of 40 '.$prod_name[2],$t);

				$add  = $invoice->getStoreAddByNumber($data[0]);
				$invoice->setAdd( $add );
				$invoice->createHeader();

				while( $j < 11) // the product on the excel sheet are on cell 2 to 9
				{

					$rest = 0;
					$t    = 0;

					if( $t_per_p <= 6 )// 6 cuz 6 per page.
					{

						$t_per_p += $data[$j];
						$t        = $data[$j] * 40;

						if(!preg_match('#[-]#',$data[$j]) && !empty($data[$j]))
							$dt[] = array($data[$j],$num_prod[$j],' Box of 40 '.$prod_name[$j],$t);
					
					}
					else
					{

						$j--;
						$rest    = $t_per_p - 6;
						$diff    = $data[$j] - $rest;
						//	$t_per_p = $rest;
						$num  = count($dt);


						if($diff == 0 )
							$dt[$num-1] = array();
						else
						{
							$t    = $diff * 40;
							$dt[$num-1][0] = $diff;
							$dt[$num-1][3] = $t;
						}

						$invoice->drawTable($header,$dt);
						$invoice->setFooter(200);
						$invoice->addPage();

						$dt      = array();
						$t_per_p = $rest;
						$t       = $rest * 40;
						//$add  = $invoice->getStoreAddByNumber($data[0]);
					//	$invoice->setAdd( $add );
						$invoice->createHeader();

						if($t_per_p <= 6 && $t_per_p > 0)
							$dt[] = array($rest,$num_prod[$j],' Box of 40 '.$prod_name[$j],$t);

					}

					$j++;

					if( $j == 11)
					{
						$num = count($dt);
						$bool= 0;
						$tmp = array();

						if($dt[$num-1][3]== 0)
						{

							$dt[$num-1]= array();

						}

						$invoice->drawTable($header,$dt);
						$invoice->setFooter(200);
						$invoice->addPage();

					
					}
				}//end while

			}

			$i++;
		}//end while

		fclose($handle);
	}
	else
		die(" impossible to read the file ");


	$invoice->showPDF("invoice.pdf","F");

Dès qu'il y a de gros chiffres dans les colonnes, ca marche plus. Je sais que la recursitivité est approprié ici mais j'ai du mal. JE viens donc chercher de l'aide. C'est pas le code qui m'interresse mais plus l'algo du tri et si possible comment le représenter dans une fonction recursive.

Merci d'avance