<?php
// note : j'ai modifié le lien de départ pour ne pas venir ici si on affiche un OF ou une CF
// ========================================================================================
/*
	états de la commande : 
	0= nouvelle=devis, 1=commande ferme, 2=livrée, 4=facturée, 8=payée, 16=terminée, 32=annulée
		pflc **	pflC **	pfLc **	pfLC **		
		0000  0	0001  1	0010  2	0011  3	
		0100  4	0101  5	0110  6	0111  7	Fac
		1000  8	1001  9	1010 10	1011 11		Pay = payée non facturée = impossible
		1100 12	1101 13	1110 14	1111 15	Fac	Pay
	0=new/devis, 1=invoice, 2=part.shipped, 3=shipped, 4=billed, 7=done, 9=cancel
	A FAIRE : faire la gestion du stock : 
	-	afficher si le stock est suffisant ou non dans les lignes et, 
		dans ce cas, envoyer un petit script qui interdit l'expédition globale 
		(la facturation devra rester possible si on peut facturer avent d'expédier ...)
	- 	inscrire les mouvements de stock correspondants et, 
		si la base de données est adaptée, modifier le stock dynamique courant de chaque article expédier.
		
	A VENIR : 
		- 	gérer les expéditions en plusieurs colis
		-	gérer les expéditions partielles
*/
// ========================================================================================
include "library/DB_fct.inc.php";
include "library/APP_fct.inc.php";
include "library/PARM_tabs.inc.php"; // tableaux de paramètres communs
include "library/_gesComDesign.inc.php";
// ========================================================================================
// FONCTIONS LOCALES
// ========================================================================================
// -------------------------------------------------------------------
function _menuRight(){
global $cdeEtat;
global $cdeNum;
	echo "GESCOM ($cdeEtat)<br>";
	echo "Traitements&nbsp;de&nbsp;la&nbsp;Commande.<br>";
	echo "<div class='help'>";
	echo "Traitements&nbsp;possibles&nbsp;ici&nbsp;:";
	echo "<ul>";
	echo "<li><a href=cdePrint.php?id=$cdeNum&duplicta=yes >Réimprimer la Cde</a></li>";
	//((($cdeEtat) %2)==1)?print "<a href=cdePrint.php?id=$cdeNum&duplicta=yes >Imprimer la commande</a><br>":print"Convertir le devis en commande";
	(($cdeEtat/2 % 2)==1)?print "<li><a href=gesComPrintBL.php?id=$cdeNum >Imprimer le BL</a></li>":print "<li>Livrer</li>";
	(($cdeEtat/4 % 2)==1)?print "<li><a href=gesComPrintFact.php?id=$cdeNum >Imprimer la Facture</a></li>":print "<li>Facturer</li>";
	($cdeEtat>=8)?print "<li><a href=gesComPrintReçu.php?id=$cdeNum >Imprimer le Reçu</a></li>":print "<li>Encaisser</li>";
	echo "</ul>";
	echo "une <b>commande&nbsp;client</b>";
	echo "</div>";
}
// -------------------------------------------------------------------
function _isInTab($tab, $testValue){
	// attention, petit pbm si l'indice = 0
	$indice=-1;
	if(is_array($tab))
	foreach($tab as $key => $val)
		if ($val==$testValue){
			$indice=$key;
			break;
		}
	return $indice;
}
// -------------------------------------------------------------------
function _getTransport($enregKey){ // déjà utilisée dans cdeValider.php
global $connexion;
	$requeteSelect="SELECT * FROM modeTransport WHERE code=$enregKey ;";
	return DB_chercherEnreg($requeteSelect, $connexion);
}
// -------------------------------------------------------------------
function _getPaiement($enregKey){ // déjà utilisée dans cdeValider.php
global $connexion;
	$requeteSelect="SELECT * FROM modePaiement WHERE code=$enregKey ;";
	return DB_chercherEnreg($requeteSelect, $connexion);
}
// -------------------------------------------------------------------
function _getMsg($error){ // déjà utilisée dans cdeValider.php
include "library/TEXT_tabs.inc.php"; // tableaux des messages (erreur, avertissements, etc...)
	if(isset($TEXT_errorMsg[$error])) return $TEXT_errorMsg[$error]; else return "Erreur $error non répertoriée";
}
// -------------------------------------------------------------------
// afficher le tableau de la commande client (fct déjà définie dans gesComDspCde.php)
function _dspCdeHeader($cdeNum, $recType){
global $connexion;
global $PRM_cdeEtatDesc;
$PRM_cdeTypeDesc=array('cc'=> "Client", 'cf'=> "Fournisseur", 'of'=>"Article"); // liste des description de l'origine

	switch ($recType){
	case 'cc':
		$tableName="cdeClient";	$tableDesc="Commande Client";		$subTableName="ligneCdeClientArt";	$id="cliNum";	
		$requete="SELECT cdeNum AS recNum, cdeDate AS recDate, cliNum AS refNum, cdeRemiseGlobale AS recRemise, cdeEtat AS recEtat, '$recType' AS recType, tierRaisonSociale AS refDesc
			FROM cdeClient, tier 
			WHERE cdeClient.$id=tier.tierNum AND cdeNum=$cdeNum ;";
		break;
	case 'cf':
		$tableName="cdeFour";	$tableDesc="Commande Fournisseur";	$subTableName="ligneCdeFourArt";	$id="fourNum";	
		$requete="SELECT cdeNum AS recNum, cdeDate AS recDate, fourNum AS refNum, 0 AS recRemise, cdeEtat AS recEtat, '$recType' AS recType, tierRaisonSociale AS refDesc
			FROM cdeFour, tier 
			WHERE cdeFour.$id=tier.tierNum AND cdeNum=$cdeNum ;";
		break;
	default :
		$tableName="ordFab";	$tableDesc="Ordre de fabrication";	$subTableName="ofNomenclature";		$id="ofNum";	
		$requete="SELECT ofNum AS rcdNum, ofDate AS rcdDate, artCode AS refNum, 0 AS recRemise, ofEtat AS recEtat, '$recType' AS recType, artDesc AS recDesc
			FROM ordFab, article
			WHERE ordFab.artCode=article.artCode AND ofNum=$cdeNum ;";
		break;
	}
		
	$t_record=DB_chercherEnreg($requete, $connexion);
	if (!$t_record=DB_chercherEnreg($requete, $connexion)){
		echo "Erreur de paramètre ($tierNum) ; <a href=\"javascript:history.back()\">Retour page précédente !</a>";
		_pageFooter(); // pied de page
		exit(0);
	}
	
	// b) afficher l'entête des colonnes en vérifiant si on peut faire du tri dessus
	//	tierPayCode Code conditions de paiement	tierDelai
	// 	les champs requis sont : 	recNum, recDate, refNum, recRemise, recEtat, recType, refDesc		
	echo "<div class=itemList>\n";
	echo "<header>$tableDesc n° ".$t_record['recNum']."</header>";
	echo "<ul>";
		echo "<li><label align=right>".$PRM_cdeTypeDesc[$t_record['recType']]."</label><span align=left >(".$t_record['refNum'].") ".$t_record['refDesc']."</span></li>";
		echo "<li><label align=right>Date</label><span align=left >".$t_record['recDate']."</span></li>";
		echo "<li><label align=right>Remise</label><span align=left >".$t_record['recRemise']." %</span></li>";
		echo "<li><label align=right>Etat</label><span align=left >".$PRM_cdeEtatDesc[$t_record['recEtat']]."</span></li>";
	echo "</ul>\n";
	echo "</div>\n";
	return $t_record;
}
// -------------------------------------------------------------------
// Rappel des statuts de commandes : 0=devis, 1=cde, 2=livré, 4=facturé, 8=payé
// -------------------------------------------------------------------
// Livraison de la commande client ou fournisseur.
//	On passe de l'état précédent à l'état 2="livré"
//	pour l'instant, on ne gère pas les livraisons partielles.

// 	lines=all est en prévision que lines contienne la liste des articles et qtés pour les livraisons partielles
// 	attention, l'entête ne permet pas de savoir si la livraison ou la facturation d'une ligne est déjà faite.
function _ship($id, $cdeType, $lines="all"){ // livrer : seules les Commandes client sont concernées
global $connexion;
	$error=0;
	$cdeSQL="SELECT * FROM cdeClient WHERE cdeNum='$id' and cdeEtat in (0,1,4,5,8,9,12,13) ";	// Commandes non expédiées,
	if( $record=DB_chercherEnreg($cdeSQL, $connexion)){ // si trouvé => ok, on le traite
		if(!is_array($lines) && $lines=='all'){ // all= valider l'expédition de toutes les lignes de la commande 
			// rechercher toutes les lignes de la commande et les valider,
			$ligSQL="SELECT * FROM ligneCdeClientArt WHERE cdeNum='$id' and ligneEtat in (0,1,4,5,8,9,12,13)";
			$requete_id=DB_ouvrirRequete($ligSQL, $connexion);
			while ($ligne=DB_lireLigne($requete_id)){
				$ligUpd="UPDATE ligneCdeClientArt SET ligneEtat=ligneEtat+2 WHERE cdeNum='$id' AND artCode='".$ligne['artCode']."' ";
				DB_executerRequete($ligUpd, $connexion);
			}
			// rechercher l'entête de la commande et la valider,
			$cdeUpd="UPDATE cdeClient SET cdeEtat=cdeEtat+2 WHERE cdeNum='$id' ";
			DB_executerRequete($cdeUpd, $connexion);
		}// FI traitement de toutes les lignes
	} else {
		$error=2001;
		/*
		echo "<div class=help><h1>Shipping ? ($id, $cdeType : $lines)</h1>";
		echo "Cde $id non trouvée ou déjà livrée : $cdeSQL";
		echo " or error : ".mysql_error();
		echo "</div class=help>";
		*/
	} // FI vérif de l'existence de la commande
	return $error;
}
// -------------------------------------------------------------------
// Facturation de la commande client ou fournisseur.
//	On passe de l'état précédent à l'état 4="facturé"
// 	pour l'instant, on ne gère pas la facturation partielle.

// 	lines=all est en prévision que lines contienne la liste des articles et qtés pour les facturations partielles

function _invoice ($id, $cdeType, $lines='all'){ // seules les Commandes client sont concernées
global $connexion;
	$errNum=0;
	$cdeSQL="SELECT * FROM cdeclient WHERE cdeNum='$id' and cdeEtat<4 ";// in (0,1,2,3) ";	// vérifier l'entête de l'ordre, <4 car on ne peut pas payer de cde non facturéé
	if( $record=DB_chercherEnreg($cdeSQL, $connexion)){ // si trouvé => ok, on le traite
		if(!is_array($lines) && $lines=='all'){ // all= valider l'expédition de toutes les lignes de la commande 
			$transCode=$record['transCode'];
			
			// rechercher toutes les lignes de la commande et les valider,
			$ligSQL="SELECT * FROM lignecdeclientart WHERE cdeNum='$id' and ligneEtat<4 ";// in (0,1,2,3) ";
			$requete_id=DB_ouvrirRequete($ligSQL, $connexion);
			while ($ligne=DB_lireLigne($requete_id)){
				$ligUpd="UPDATE lignecdeclientart SET ligneEtat=ligneEtat+4 WHERE cdeNum='$id' AND artCode='".$ligne['artCode']."' ";
				DB_executerRequete($ligUpd, $connexion);
			}
			// rechercher l'entête de la commande et la valider,
			$cdeUpd="UPDATE cdeClient SET cdeEtat=cdeEtat+4 WHERE cdeNum='$id' ";
			DB_executerRequete($cdeUpd, $connexion);
			
			// Ecritures factures
			// ... à faire ...
			
			// Ecritures comptables
			// récup du montant global de la facture
			$ligSQL="SELECT sum(qte*artPrixHT*(1-ligneRemiseArticle)) as montant FROM lignecdeclientart, article WHERE lignecdeclientart.artCode=article.artCode AND cdeNum='$id' ";
			$t_ligSum=DB_chercherEnreg($ligSQL, $connexion);
			$montantHT=$t_ligSum['montant'];
			
			$date=COM_aujourdhui()." ".COM_maintenant();
			$tva=APP_getTVA();
			
			// calcul du montant total de la facture (hors port)
			$montantTVA=$montantHT*$tva/100;
			$montantTTC=$montantHT+$montantTVA;
			
			// calcul du montant du port 
			$t_modeTransport=_getTransport($transCode);		// Récupérer le mode de transport
			$portLib=$t_modeTransport['libelle'];
			$portHT=$t_modeTransport['prixHT'];
			
			$portTVA=$portHT*$tva/100;
			$portTTC=$portHT+$portTVA;

			// calcul des frais de paiement 
			/* pas maintenant
			// Récupérer le mode de paiement
				$t_modePaiement=_getPaiement($paiemtCode);
				$paiemtModeLib=$t_modePaiement['libelle'];
			*/

			$TVA=$montantTVA+$portTVA;
			
			$totalTTC=$montantHT+$portHT+$TVA;
			
			// INSERT INTO `cptajournal` (`cjourNum`,`cjourDate`,`cptNum`,`cjourSens`,`artCode`,`cjourValeur`,`cJourRefNum`,`cJourMotif`)
			// VALUES (NULL , '2014-12-09', '701', 'c', 'aaa', '12.253', 'FAC000000000001', 'facture cde 1');
			$sqlCpta="INSERT INTO `cptajournal` (`cjourNum`,`cjourDate`,`cptNum`,`cjourSens`,`artCode`,`cjourValeur`,`cJourRefNum`,`cJourMotif`) VALUES ";
			$sqlCpta.="(NULL , '$date', '701',  'c', '', '$montantHT', 	'FAC$id', 'Facture de la Cde $id HT'),";// Crédit HT 701 (Ventes PF) ; voir selon le type de produit ?
			$sqlCpta.="(NULL , '$date', '7085', 'c', '', '$portHT', 	'FAC$id', 'Frais de port de la Cde $id TTC : $portLib'),"; // Débit TTC 7085 (port et frais accessoires facturés)
			$sqlCpta.="(NULL , '$date', '445',  'c', '', '$TVA', 		'FAC$id', 'TVA de la Cde $id'),"; 	// Débit TVA 445 (tva) A voir
			$sqlCpta.="(NULL , '$date', '411',  'd', '', '$totalTTC', 	'FAC$id', 'Facture de la Cde $id TTC');"; // Débit TTC 411 (client)
			DB_executerRequete($sqlCpta, $connexion);
			
		}// FI traitement de toutes les lignes
	} else {
		$errNum=2002;
		/*
		echo "<div class=help><h1>Shipping ? ($id, $cdeType : $lines)</h1>";
		echo "line $id not found : $cdeSQL";
		echo "<br>or error : ".mysql_error();
		echo "</div class=help>";
		*/
	} // FI vérif de l'existence de la commande
	return $errNum;
}
// -------------------------------------------------------------------
// Facturation de la commande client ou fournisseur.
//	On passe de l'état précédent à l'état 8="payé".
// 	le paiement partiel, acompte, arrhes n'est pas géré. Voir comment faire plus tard, en ajoutant un montant payé, /ex.
// 	lines=all est en prévision que lines contienne la liste des articles et qtés pour les livraisons partielles
function _billing ($id, $cdeType, $lines='all'){ // Encaissement/paiement seules les Commandes client sont concernées
global $connexion;
	$errNum=0;
	$cdeSQL="SELECT * FROM cdeclient WHERE cdeNum='$id' and cdeEtat between 4 and 7 ";	// vérifier l'entête de l'ordre non payé, mais si la cde n'est pas facturée, on ne peut pas la payer (0-3)
	if( $record=DB_chercherEnreg($cdeSQL, $connexion)){ // si trouvé => ok, on le traite
		if(!is_array($lines) && $lines=='all'){ // all= valider l'expédition de toutes les lignes de la commande 
			$transCode=$record['transCode'];

			// rechercher toutes les lignes de la commande et les valider,
			$ligSQL="SELECT * FROM lignecdeclientart WHERE cdeNum='$id' and ligneEtat between 4 and 7";
			$requete_id=DB_ouvrirRequete($ligSQL, $connexion);
			while ($ligne=DB_lireLigne($requete_id)){
				$ligUpd="UPDATE lignecdeclientart SET ligneEtat=ligneEtat+8 WHERE cdeNum='$id' AND artCode='".$ligne['artCode']."' ";
				DB_executerRequete($ligUpd, $connexion);
			}
			// rechercher l'entête de la commande et la valider,
			$cdeUpd="UPDATE cdeClient SET cdeEtat=cdeEtat+8 WHERE cdeNum='$id' ";
			DB_executerRequete($cdeUpd, $connexion);
			
			// Modifications factures
			// ... à faire ...
			
			// Ecritures comptables
			// récup du montant global de la facture
			$ligSQL="SELECT sum(qte*artPrixHT*(1-ligneRemiseArticle)) as montant FROM lignecdeclientart, article WHERE lignecdeclientart.artCode=article.artCode AND cdeNum='$id' ";
			$t_ligSum=DB_chercherEnreg($ligSQL, $connexion);
			$montantHT=$t_ligSum['montant'];
			
			$date=COM_aujourdhui()." ".COM_maintenant();
			$tva=APP_getTVA();
			
			// calcul du montant total de la facture (hors port)
			$montantTVA=$montantHT*$tva/100;
			$montantTTC=$montantHT+$montantTVA;
			
			// calcul du montant du port 
			$t_modeTransport=_getTransport($transCode);		// Récupérer le mode de transport
			$portLib=$t_modeTransport['libelle'];
			$portHT=$t_modeTransport['prixHT'];
			
			$portTVA=$portHT*$tva/100;
			$portTTC=$portHT+$portTVA;

			// calcul des frais de paiement 
			/* pas maintenant
			// Récupérer le mode de paiement
				$t_modePaiement=_getPaiement($paiemtCode);
				$paiemtModeLib=$t_modePaiement['libelle'];
			*/

			$TVA=$montantTVA+$portTVA;
			
			$totalTTC=$montantHT+$portHT+$TVA;
			
			// INSERT INTO `cptajournal` (`cjourNum`,`cjourDate`,`cptNum`,`cjourSens`,`artCode`,`cjourValeur`,`cJourRefNum`,`cJourMotif`)
			// VALUES (NULL , '2014-12-09', '701', 'c', 'aaa', '12.253', 'FAC000000000001', 'facture cde 1');
			$sqlCpta="INSERT INTO `cptajournal` (`cjourNum`,`cjourDate`,`cptNum`,`cjourSens`,`artCode`,`cjourValeur`,`cJourRefNum`,`cJourMotif`) VALUES ";
			$sqlCpta.="(NULL , '$date', '411', 'c', '', '$totalTTC', 'FAC$id', 'Encaissement de la Facture/Cde $id'),"; // Crédit TTC 411 (client)
			$sqlCpta.="(NULL , '$date', '512', 'd', '', '$totalTTC', 'FAC$id', 'Encaissement de la Facture/Cde $id');"; // Débit TTC 512 (banque)
			DB_executerRequete($sqlCpta, $connexion);
			
		}// FI traitement de toutes les lignes
	} else {
		$errNum=2003;
		/*
		echo "<div class=help><h1>Shipping ? ($id, $cdeType : $lines)</h1>";
		echo "line $id not found : $cdeSQL";
		echo "<br>or error : ".mysql_error();
		echo "</div class=help>";
		*/
	} // FI vérif de l'existence de la commande
	return $errNum;
}
// ========================================================================================
// MAIN()
// ========================================================================================
$userId="";
$pageName="gesComDspCde.php";
$tableName="Tier";
$headTitle="Fiche Commande";
$contentTitle="Gestion de production";

$dspPage="gesComDspCde.php";
$updPage="gesComDspCde.php";
$delPage="gesComDspCde.php";
$addPage="gesComDspCde.php";

// connexion à la base de données
$connexion=DB_connecter(); 

// Récup des paramètres
// Récup de l'enregistrement, vérif s'il n'y a pas d'erreur de code.
(isset($_REQUEST['id']))?$cdeNum=$_REQUEST['id']:$cdeNum=""; // 
(isset($_REQUEST['type']))?$cdeType=$_REQUEST['type']:$cdeType=""; //

if (isset($_REQUEST['doShipping']) && $cdeNum!="" && $cdeType="cc") $error=_ship($cdeNum, $cdeType, 'all');
if (isset($_REQUEST['doInvoice']) && $cdeNum!="" && $cdeType="cc") $error=_invoice($cdeNum, $cdeType, 'all');
if (isset($_REQUEST['doBilling']) && $cdeNum!="" && $cdeType="cc") $error=_billing($cdeNum, $cdeType, 'all');


// tableaux pour ne pas montrer le vrai nom des champs dans les paramètres transmis
//	$requete="SELECT cdeNum AS recNum, cdeDate AS recDate, $tierNum AS refNum, cdeRemiseGlobale AS recRemise, 
//	cdeEtat AS recEtat, '$cdeType' AS recType, tierRaisonSociale AS recDesc";
//		SELECT article.artCode,artDesc,artPrixHT,ligneRemiseArticle,qte,qte*artPrixHT AS montantHT, ligneEtat 
$t_sortFieldNames=array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"); // nom des champs dans les paramètres html
$t_sortFieldDbTabNames=array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");  // mettre ici le nom de la table de la requête (avec le point !!!)
$t_sortFieldDbNames=array("refNum", "refDesc", "tierAdresse", "recRemise", "recType", "recNum", "recDate", 
	"cdeRemiseGlobale", "artCode", "artDesc", "artPrixHT", "ligneRemiseArticle", "qte", "montantHT", "ligneEtat", "besEtat"); // nom des champs dans la BDD
$t_sortFieldDesc=array("Ref. origine", "Origine", "Adresse", "Taux de remise", "Type", "N°", "Date", 
	"Remise globale", "Article", "Description", "Prix HT", "Remise", "Qté", "Montant", "Etat", "Etat"); // description des champs à afficher
$t_sortFieldDsp=array(true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true); // tri autorisé ou non
$t_sortFieldDir=array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""); // ordre de tri (temporairement défini)

$defaultSortClause=" ORDER BY cdeDate desc";

//=======================================================================
// ouverture de la requête à afficher
//=======================================================================
	

//========================================================================
// AFFICHAGE
//========================================================================
_pageHeader($userId);	// entête de page et menu
//------------------------------------------------------------------------------------------------------------
// Afficher le tableau de présentation de l'item choisi (commande client, fournisseur ou OF
$t_record=_dspCdeHeader($cdeNum, 'cc');
// déterminer le statut de la commande (devis, cde, bl, facture) pour afficher les opérations possibles ici.
$cdeEtat=$t_record['recEtat'];
//------------------------------------------------------------------------------------------------------------
// Affichage de la barre de progression contenant le formulaire de validation
// etat des commandes : 0=devis, 1=cde ferme, 2=livrée, 4=facturée, 8=payée, 15=terminée

	echo "<nav id=progressionBar>";
	// Affichage des liens d'impression
		echo "<ul class=nobloc>";
		echo "<li class=stepDone><a href=cdePrint.php?id=$cdeNum&duplicta=yes >Imprimer la commande</a></li>";
		(($cdeEtat/2 % 2)==1)?print "<li class=stepDone><a href=gesComPrintBL.php?id=$cdeNum target='_blank'>Imprimer le BL</a></li>":print"";
		(($cdeEtat/4 % 2)==1)?print "<li class=stepDone><a href=gesComPrintFact.php?id=$cdeNum target='_blank'>Imprimer la Facture</a></li>":print"";
		($cdeEtat>=8)?print "<li class=stepDone><a href=gesComPrintRecu.php?id=$cdeNum target='_blank'>Imprimer le Reçu</a></li>":print"";
		echo "</ul>";
	// Affichage du formulaire de validation globale
	if ($cdeEtat<15){
		echo "<form name=traitement>";
		echo "<input type='hidden' value='$cdeNum' name='id' />";
		echo "<input type='hidden' value='$cdeType' name='type' />";
		echo "<table><tr>";
		(($cdeEtat/2 % 2)==0)?print "<td><input type='submit' value='Livrer' name='doShipping'></td>":"<td><a href=gesComPrintBL.php?id=$cdeNum >Imprimer le BL</a></td>";
		(($cdeEtat/4 % 2)==0)?print "<td><input type='submit' value='Facturer' name='doInvoice'></td>":"<td><a href=gesComPrintBL.php?id=$cdeNum >Imprimer la facture</a></td>";
		($cdeEtat<8)?print "<td><input type='submit' value='Encaisser' name='doBilling'></td>":"<td><a href=gesComPrintRecu.php?id=$cdeNum >Imprimer le reçu</a></td>";
		echo "</tr></table>";
		echo "</form>";
	}
	echo "</nav>\n";
	if (isset($error) && $error) echo _getMsg($error);
//------------------------------------------------------------------------------------------------------------
// Affichage la liste des articles de la commande client ou fournisseur
//----------------------------------------------------------------------
	// gestion du tri et du filtre
	//	Tri - - - - - - - 
	// 	si le tri est nommé (desc ou asc) alors le tri demandé est changé, sinon il reste comme il est
		$sortDir="";
		$sortField="";

		// recup paramètres si existent
		(isset($_REQUEST['sortDir']))?$sortDir=$_REQUEST['sortDir']:$sortDir="desc"; // 
		(isset($_REQUEST['sortField']))?$sortField=$_REQUEST['sortField']:$sortField="cdeDate"; // 

		// si le tri est orienté, changer le tri : "">"asc">"desc">""
		if ($sortDir=="asc") 		$sortDirNew="desc";
		elseif ($sortDir=="desc") 	$sortDirNew="";
		else 						$sortDirNew="asc";

		// construction de l'ordre de tri ; !!!! Actuellement, un tri annule les autres
		$sortClause="";
		foreach($t_sortFieldNames as $key => $val){
			if ($sortField == $val) $t_sortFieldDir[$key]=$sortDirNew;
			if ($t_sortFieldDir[$key]!=""){
				if (empty($sortClause))
					$sortClause=" ORDER BY ";
				else 
					$sortClause.=", ";
				$sortClause.=$t_sortFieldDbNames[$key]." ".$t_sortFieldDir[$key];
			}
		}
	// Filtre - - - - - - - - - 
	//	mode=0 : toutes Cdes
	//	mode=1 : cdes échues
	//	mode=2 : Cdes a venir
		$mode=0;
		if (isset($_REQUEST['mode'])) $mode=$_REQUEST['mode'];
	//=======================================================================
	// ouverture de la requête à afficher
	// construire la requête
	$selectCde="";
	if ($cdeType=='cc'){
	$selectCde.="
		SELECT article.artCode,artDesc,artPrixHT,ligneRemiseArticle,qte,qte*artPrixHT AS montantHT, ligneEtat 
			FROM CdeClient, LigneCdeClientArt, article
			WHERE CdeClient.cdeNum=LigneCdeClientArt.cdeNum
			AND LigneCdeClientArt.artCode=article.artCode
			AND cdeClient.cdeNum='$cdeNum' 
	";
	}elseif ($cdeType=='cf'){
	$selectCde.="
		SELECT article.artCode,artDesc,artPrixHT,ligneRemiseArticle,qte,qte*artPrixHT AS montantHT, ligneEtat
			FROM CdeFour, LigneCdeFourArt, article
			WHERE CdeFour.cdeNum=LigneCdeFourArt.cdeNum
			AND LigneCdeFourArt.artCode=article.artCode
			AND cdeFour.cdeNum='$cdeNum' 
		";
	}
	(!empty($sortClause))?$selectCde.=$sortClause:$selectCde.=$defaultSortClause;
	// exécuter la requête
	$requete_id=DB_ouvrirRequete($selectCde, $connexion);
	//------------------------------------------------------------------------------------------------------------
	// Affichage de la liste 
	//------------------------------------------------------------------------------------------------------------
	echo "<div id=cdeClient style='margin:0; padding:0; ' >";
	echo "<table border=1 align=center><!--Debut de liste-->\n";
	echo "<caption>Contenu</caption>";
	unset($t_fieldList); // vider la liste des champs à afficher
	
	$t_record=DB_lireLigne($requete_id);
	if ($t_record){
		// afficher l'entête de la liste :
		// a) construire la liste des champs de la requête
		foreach($t_record as $key=>$val)
			if(!is_numeric ($key))
				$t_fieldList[]=$key;
			// b) afficher l'entête des colonnes en vérifiant si on peut faire du tri dessus
		echo "<tr>";
		foreach($t_fieldList as $key=>$val){
			echo "<th>";
			$i=_isInTab($t_sortFieldDbNames, $val);
			if($i>=0){
				$field=$t_sortFieldNames[$i];
				$desc=$t_sortFieldDesc[$i];
				$dir=$t_sortFieldDir[$i];
				if ($t_sortFieldDsp[$i]==true){
					$url=$pageName."?";
					($mode)?$url.="mode=$mode&":$url=$url;
					$url.="sortDir=$dir&sortField=$field";
					echo "<a href=\"".$url."\">";
					echo "<img src=\"segami/s_$dir.png\" border=0 /> $desc";
					echo "</a>";
				}else
					echo "$desc";
			}else
				echo "$val";
			echo "</th>";
		}
		echo "</tr>\n";
		$color=1;
		echo "<br>".mysql_error();
		while ($t_record){
			// définition de la classe de style en fonction du type et du n° de ligne :
			($color)?$color=0:$color=1;
			$classe="td".$color;
			
			// affichage de la ligne
			$artCode=$t_record['artCode'];
			echo "<tr class=$classe>";
			echo "	<td>".$t_record['artCode']."</td>";
			echo "	<td>".$t_record['artDesc']."</td>";
			(!empty($t_record['artPrixHT']))?print "	<td>".$t_record['artPrixHT']."</td>":print "	<td>&nbsp;";
			(!empty($t_record['ligneRemiseArticle']))?print "	<td>".$t_record['ligneRemiseArticle']."</td>":print "	<td>&nbsp;";
			($t_record['qte']>0)?print "	<td>".$t_record['qte']."</td>":print "	<td>&nbsp;";
			(!empty($t_record['ligneRemiseArticle']))?$t_record['montantHT']*=$t_record['ligneRemiseArticle']:null;
			($t_record['montantHT']>0)?print "	<td>".$t_record['montantHT']."</td>":print "	<td>&nbsp;";
			echo "	<td>".$PRM_cdeEtatDesc[$t_record['ligneEtat']]."</td>";
			echo "</tr>\n";
			$t_record=DB_lireLigne($requete_id);
		}
	echo "</table>";
	}else echo "Aucun article à afficher";
	echo "</div>";
//========================================================================
// fin de page
//========================================================================
_pageFooter(); // pied de page
?>