<?php
/* gesProdDspArt.php
	Dans cette page, on peut afficher l'état de la production d'un article.
	On a donc : 
		-	une liste de données article, 
		-	une liste des OF en cours et des OP, liste des OF terminés.
	On peut demander la transformation d'un OP en OF (si l'article est "fabricable").
	on peut demander la suppression d'un OF,
	A VOIR SI on peut demander la saisie d'une fabrication, sans utiliser l'interface dédiée à celle-ci ?
	on peut demander la modification d'un OF
	A VENIR : on peut demander la liste des mouvements de stock de l'article (stokDspArtMvt.php).
*/
	
include "library/TEXT_tabs.inc.php";
include "library/DB_fct.inc.php";
include "library/APP_fct.inc.php";
include "library/_gesProdDesign.inc.php";
// ========================================================================================
// FONCTIONS LOCALES
// ========================================================================================
// -------------------------------------------------------------------
function _menuRight(){
echo "<h2>Appros</h2>";
echo "<div>Maintenance des OA et OP :
<br>-&nbsp;Lancer&nbsp;des &nbsp;OA&nbsp;manuels</li>
<br>-&nbsp;Confirmer&nbsp;les &nbsp;OP&nbsp;</li>
<br>-&nbsp;Maintenir&nbsp;les&nbsp;OA</li>
</div>
";
}
// -------------------------------------------------------------------
// (déjà utilisée dans approOAAdd.php)
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;
}
// -------------------------------------------------------------------
// (déjà utilisée dans approOAAdd.php)
function _getArticle($artCode){
global $connexion;
	$requete_sql="SELECT * from article WHERE artCode='$artCode' ";
	if($enreg=DB_chercherEnreg($requete_sql, $connexion)) return $enreg ;
	return 0;
}
// -------------------------------------------------------------------
// Récup du fournisseur
function _getFournisseur($fourNum){
global $connexion;
	$requete_sql="SELECT * from tier WHERE tierNum=$fourNum ";
	if($enreg=DB_chercherEnreg($requete_sql, $connexion)) return $enreg ;
	return 0;
}
// -------------------------------------------------------------------
// récup de la commande
function _getLigneCde($cdeNum, $artCode){
global $connexion;
	$requete_sql="SELECT * from ligneCdeFourArt, cdeFour WHERE cdeFour.cdeNum=ligneCdeFourArt.cdeNum AND ligneCdeFourArt.cdeNum=$cdeNum AND artCode='$artCode'";
	//if($enreg=DB_chercherEnreg($requete_sql, $connexion)) return $enreg ;
	//return 0;
	$enreg=DB_chercherEnreg($requete_sql, $connexion);
	//echo mysql_error();
	return $enreg ;
}
// -------------------------------------------------------------------
// Afficher les données article (déjà utilisée dans approOAAdd.php) *** Modifier pour ressembler à une liste formatée par le CSS ***
function _dspArticle($artCode){
	$result=true;
	echo "<table align=center border=1 width=100%>";
	if($t_article=_getArticle($artCode)){
		switch ($t_article['artAddMode']){ case 0: $addMode='Achat'; break; case 1: $addMode='Fabrication'; break; case 2: $addMode='Sous-traitance'; break; }
		switch ($t_article['artPlanif']){ case "S": $planMode='Sur Stock = point de commande'; break; case "M": $planMode='Selon méthode MRP'; break;  }
		echo "<tr><th colspan=2>Article $artCode</td></tr>";
		echo "<tr><td>Référence :</td><td>".$t_article['artCode']."</td></tr>";
		echo "<tr><td>Description</td><td>".$t_article['artDesc']."</td></tr>";
		echo "<tr><td>Stock minimum</td><td>".$t_article['artStockMini']."</td></tr>";
		echo "<tr><td>Stock courant au ".$t_article['stockDate']."</td><td>".$t_article['stockInit']."</td></tr>";
		echo "<tr><td>Mode d'entrée en stock</td><td>".$t_article['artAddMode']." $addMode</td></tr>";
		echo "<tr><td>Mode de planification</td><td>".$t_article['artPlanif']." $planMode</td></tr>";
		echo "<tr><td>Lot mini</td><td>-</td></tr>";
		echo "<tr><td>Lot multiple</td><td>-</td></tr>";
		$result=$t_article['artTypeCode'];
	}else {
		echo "<tr><td>Erreur : Article $artCode inconnu</td></tr>";
		$result=false;
	}
	echo "</table>";
	return $result;
}
// -------------------------------------------------------------------
// Scripts de réaffichage du formulaire au changement de fournisseur ou de type de réception
function _dspScriptDates(){
echo "<script>
	// rafraîchir le formulaire au changement de fournisseur => rafraîchissement de la liste des commandes à recevoir
	function fourChange(){
		document.receptForm.submit();
	}
	function rctTypeChange(){		
		var ctlCdeNum=document.getElementById('cdeNum');
		var cdeNumLbl=document.getElementById('cdeNumLbl');
		// la récup d'un bouton radio n'est pas aussi simple que les autres car getElementById ne fonctionne pas directement ...
		for (i=0; i<document.receptForm.rctType.length; i++) {if(document.receptForm.rctType[i].checked){rctType = document.receptForm.rctType[i].value}}
		if (rctType=='F'){ // OA en date de commande
			ctlCdeNum.style='display:inline;'; // Afficher le select des commandes
			cdeNumLbl.style='display:inline;'; // Afficher le select des commandes
		}else if(rctType=='R'){ // OA en date de réception
			cdeNumLbl.style='display:none;'; // masquer le select des commandes
			ctlCdeNum.style='display:none;'; // masquer le select des commandes
		}
	}
	window.onload = rctTypeChange();
</script>";
	echo "<div id=testjs></div>";
} // end function _dspScriptDates(artCode)
// -------------------------------------------------------------------
// Choix de l'article (déjà utilisée dans approOAAdd.php)
function _dspSelectArticle($artCode="", $artTypeMode="a", $onchangeForm=""){ // $artTypeMode sert à définir quels articles doivent être affichés : a=tous, s=vendus, p=produits, b=achetés
global $connexion;
			$requete_sql="SELECT artCode, artDesc, artPrixHT, article.artTypeCode, artTypeDesc FROM article, artType type
				WHERE article.artTypeCode=type.artTypeCode
				AND  article.artTypeCode in ('C', 'N', 'M')";
	$requete_id=DB_ouvrirRequete($requete_sql, $connexion);	
	if (DB_getNbEnreg($requete_id)){
		echo "<select id=artCode name=artCode onchange='document.$onchangeForm.submit();'>";
			echo "<option value=0>Choisir un article</option>";
		while ($t_record=DB_lireLigne($requete_id)){
			(!$artCode || $artCode==$t_record['artCode'])?$select="selected='selected'":$select="";
			echo "<option value=".$t_record['artCode']." $select>".$t_record['artCode']." ".$t_record['artDesc']."</option>";
		}
		echo "</select name=artCode>";
	}else
		echo "<span class=erreur>Aucun article trouvé</span>";

} // end function _dspSelectArticle($mode="a"){
// -------------------------------------------------------------------
// Afficher les fournisseurs de l'article ( !!!! Différente de celle de approOAAdd.php)
// N'afficher que ceux dont on peut recevoir une quantité !!!
function _dspSelectFournisseur($artCode, $fourNum=false){
global $connexion;
	// construction du contrôle en deux temps : le premier pour les fournisseurs associés à l'article, le second pour les autres (à enlever plus tard ?)
	$requete_sql="SELECT DISTINCT tier.tierNum, tierRaisonSociale FROM tier, cdeFour, ligneCdeFourArt WHERE tier.tierNum=cdeFour.fourNum AND cdeFour.cdeNum=ligneCdeFourArt.cdeNum AND artCode='$artCode' AND ligneEtat in (0,1,4,5,8,9,12,13) ORDER BY tierRaisonSociale";
	$requete_id=DB_ouvrirRequete($requete_sql, $connexion);
	$nbEnreg=DB_getNbEnreg($requete_id);
	if ($nbEnreg){ // s'il y a des fournisseurs enregistrés
		echo "<select id=oaFourNum name=fourNum onchange='fourChange();'>\n";
		echo "<option value=0>--Choisir un fournisseur --</option>";
		while ($enreg=DB_lireLigne($requete_id)){
			if ($fourNum && $fourNum==$enreg['tierNum']){$select="selected=\"selected\"";$sfRS=" ".$enreg['tierRaisonSociale'];}
			else {$select="";$sfRS="";}
			echo "<option value=".$enreg['tierNum']." $select>".$enreg['tierRaisonSociale']."</option>";
		}
		echo "</select>\n";// name=fourNum>";
		(!empty($sfRS))?print $sfRS:print " Aucun fournisseur référencé : choix libre";
	}else	echo "<input type=text value=0> (!! aucun fournisseur trouvé)";
} // end function _dspFourList(artCode)
// -------------------------------------------------------------------
// Afficher les commandes de l'article 
function _dspSelectOA($artCode, $fourNum=0, $cdeNum=false){
global $connexion;
	// construction du contrôle en deux temps : le premier pour les fournisseurs associés à l'article, le second pour les autres (à enlever plus tard ?)
	$requete_sql="SELECT cdeDate, cdeFour.cdeNum, qte, cdeFour.fourNum as fourNum, tierRaisonSociale  FROM cdeFour, ligneCdeFourArt, tier WHERE cdeFour.cdeNum=ligneCdeFourArt.cdeNum AND cdeFour.fourNum=tier.tierNum AND artCode='$artCode' AND ligneEtat in (0,1,4,5,8,9,12,13)";
	($fourNum)?$requete_sql.=" AND cdeFour.fourNum=$fourNum":$requete_sql.="";
	$requete_sql.=" ORDER BY fourNum, cdeDate, cdeFour.cdeNum";
	($cdeNum)?$select="selected='selected'":$select="";
	
	$requete_id=DB_ouvrirRequete($requete_sql, $connexion);
	$nbEnreg=DB_getNbEnreg($requete_id);
	if ($nbEnreg){ // s'il y a des fournisseurs enregistrés
		echo "<select id=cdeNum name=cdeNum >\n";
				echo "<option value=0>--Choisir une commande --</option>";
		//$fourNum=0;
		while ($enreg=DB_lireLigne($requete_id)){
			echo $enreg['fourNum'];
			$t_four=_getFournisseur($enreg['fourNum']);
			if($t_four['tierNum']!=$fourNum){
				if($fourNum!=0) echo "</optGroup>";
				$fourNum=$t_four['tierNum'];
				echo "<optgroup label='".$t_four['tierNum']." ".$t_four['tierRaisonSociale']."'>";
			}
			($cdeNum && $cdeNum==$enreg['cdeNum'])?$select="selected='selected'":$select="";
			($cdeNum && $cdeNum==$enreg['cdeNum'])?$sfRS="".$enreg['cdeDate']." (".$enreg['cdeNum'].") ".$enreg['qte']." pce":$null="";
			echo "<option value=".$enreg['cdeNum']." $select>".$enreg['cdeDate']." (".$enreg['cdeNum'].") ".$enreg['qte']." pce</option>";
		}
		echo "</select>\n";// name=fourNum>";
		(isset($sfRS))?print $sfRS:print "";
	}else	echo "<input type=text value=0> (!! aucune commande trouvée)";
} // end function _dspFourList(artCode)
// -------------------------------------------------------------------
// Cette fonction affiche une commande et ses articles
function _dspCde($cdeNum){
global $connexion;
	$requete_sql="SELECT * FROM cdeFour  WHERE cdeNum=$cdeNum ";
	if($enreg=DB_chercherEnreg($requete_sql, $connexion)) {
		$t_four=_getFournisseur($enreg['fourNum']);
		echo "<table align=center border=1 width=100%>";
		echo "<tr><th colspan=2>Fournisseur ".$t_four['tierNum']." ".$t_four['tierRaisonSociale']."</td></tr>";
		echo "<tr><td>Adresse :</td><td>".$t_four['tierAdresse']."</td></tr>";
		echo "<tr><td>Description</td><td>".$t_four['paysCode']."</td></tr>";
		echo "<tr><td>Conditions de paiement</td><td>".$t_four['tierPayCode']."</td></tr>";
		echo "</table>";
		
		$requete_sql="SELECT * FROM lignecdefourart  WHERE cdeNum=$cdeNum ORDER BY artCode";
		$requete_id=DB_ouvrirRequete($requete_sql, $connexion);
		echo mysql_error();
		$nbEnreg=DB_getNbEnreg($requete_id);
		if ($nbEnreg){ // s'il y a des fournisseurs enregistrés
			echo "<table align=center border=1 width=100%>";
			echo "<caption>Liste des articles de la commande</caption>";
			echo "<tr><th>référence</th><th>Description</th><th>Quantité</th><th>Prix Unitaire</th><th>Prix Total HT</th></tr>";
			while ($t_ligne=DB_lireLigne($requete_id)){
				$t_article=_getArticle($t_ligne['artCode']);
				$montantLigne=$t_ligne['qte']*$t_article['artPrixHT'];
				echo "<tr>";
				echo "<td>".$t_ligne['artCode']."</td>";
				echo "<td>".$t_article['artDesc']."</td>";
				echo "<td>".$t_ligne['qte']."</td>";
				echo "<td>".$t_article['artPrixHT']."</td>";
				echo "<td>".$montantLigne."</td>";
				echo "</tr>";
			}
			echo "</table>";
		}
	}
/********* ICI  *************/
	
	return 0;
}
// -------------------------------------------------------------------------------------
// Afficher la barre de progression 
function _dspProgessionBar($etape, $cdeNum=0){
switch ($etape){
	case 1: $cell1="stepCurrent";$cell2="stepToDo"; 	$cell3="stepToDo"; 		$cell4="stepToDo";		break;
	case 2: $cell1="stepDone";	$cell2="stepCurrent"; 	$cell3="stepToDo"; 		$cell4="stepToDo";		break;
	case 3: $cell1="stepDone";	$cell2="stepDone"; 		$cell3="stepCurrent";	$cell4="stepToDo";		break;
	case 4: $cell1="stepDone";	$cell2="stepDone"; 		$cell3="stepDone";		$cell4="stepCurrent";	break;
}
// DEBUT Afficher la barre de progression
echo "<!-- BEGIN progression step List --><nav id=progressionBar><ul class=nobloc>";
echo "<li class=$cell1>Articles</a></li>"; // pas de retour, l'article est imposé, il suffit de donner sa quantité
echo "<li class=$cell2>Fournisseur</li>"; // choisir le fournisseur ; c'est l'étape en cours car l'article est imposé
echo "<li class=$cell3>Confirmation</li>"; // confirmer la commande (fin)
echo "<li class=$cell4><a href=approOAPrint.php?cdeNum=$cdeNum>Imprimer</a><span>Imprimer</span></li>"; // confirmer la commande (fin)
echo "</ul></nav><!-- END progression step List -->\n";
// FIN Afficher la barre de progression
}
// -------------------------------------------------------------------
// (déjà utilisée dans approOAAdd.php)
function _dspListeOA($artCode){
global $connexion;
	// construction du contrôle en deux temps : le premier pour les fournisseurs associés à l'article, le second pour les autres (à enlever plus tard ?)
	$requete_sql="SELECT cdeDate, cdeFour.cdeNum, qte, qteRecieved, cdeFour.fourNum as fourNum, tierRaisonSociale  FROM cdeFour, ligneCdeFourArt, tier WHERE cdeFour.cdeNum=ligneCdeFourArt.cdeNum AND cdeFour.fourNum=tier.tierNum AND artCode='$artCode' AND (qte-qteRecieved)>0 AND ligneEtat in (0,1,4,5,8,9,12,13) ORDER BY fourNum, cdeDate, cdeFour.cdeNum";
		
	$requete_id=DB_ouvrirRequete($requete_sql, $connexion);
	$nbEnreg=DB_getNbEnreg($requete_id);
	if ($nbEnreg){ // s'il y a des fournisseurs enregistrés
		echo "<table align=center width=100% class=dataList>\n";
				echo "<tr><th>rcv</th><th class=date>date</th><th class=num>n°Cde</th><th class=num>qte</th><th class=num>reste dû</th><th width=60%>fournisseur</th></tr>";
		$fourNum=0;
		while ($enreg=DB_lireLigne($requete_id)){
			if($enreg['fourNum']!=$fourNum){
				$t_four=_getFournisseur($enreg['fourNum']);
				$fourNum=$t_four['tierNum'];
			}
			$reste=$enreg['qte']-$enreg['qteRecieved'];
			echo "<tr>";
			echo "<td align=center><a href='approOARct.php?rct=yes&artCode=$artCode&cdeNum=".$enreg['cdeNum']."&qte=$reste'><img src='segami/cdeValider.png' height=13px></a></td>";
			echo "<td class=date>".$enreg['cdeDate']."</td>";
			echo "<td class=num>".$enreg['cdeNum']."</td>";
			echo "<td class=num>".$enreg['qte']."</td>";
			echo "<td class=num>$reste</td>";
			echo "<td>".$t_four['tierNum']." ".$t_four['tierRaisonSociale']."</td>";
			echo "</tr>";
		}
		echo "</table>\n";// name=fourNum>";
		(isset($sfRS))?print $sfRS:print "";
	}else	echo "Aucune commande en attente de réception";
}
// -------------------------------------------------------------------
// modifier le statut d'une commande complètement livrée
function _rctOAComplet($cdeNum){
global $connexion;
	// compter combien de ligne restent à recevoir pour la commande, pour voir si il faut aussi changer son statut
	$requete_sql="SELECT count(*) as cpt FROM ligneCdeFourArt WHERE cdeNum=$cdeNum AND ligneEtat in (0,1,4,5,8,9,12,13) ;";
	$enreg=DB_chercherEnreg($requete_sql, $connexion);
	if ($enreg['cpt']<=0) { // il n'y a plus de lignes à recevoir dans la commande
		DB_executerRequete("UPDATE cdeFour SET etat=etat+2 WHERE cdeNum=$cdeNum ;", $connexion); // màj de la base
	}
	return  true;
} // end function _rctOAComplet(cdeNum)
// -------------------------------------------------------------------
// Enregistrement de la quantité recue dans la ligne de commande, changer l'état et vérifier l'entete de commande
// modifier l'article (quté courante, ajouter le mouvement de stock)
function _enregQteRecue($artCode, $cdeNum, $qteRecue, $reste, $remarque=""){ 
global $connexion;
	($reste-$qteRecue<=0 && $reste>0)?$newEtat=1:$newEtat=0; // il reste à recevoir et la quantité complète la ligne alors on change d'état
	$requete_sql="UPDATE ligneCdeFourArt SET qteRecieved=qteRecieved+$qteRecue, ligneEtat=ligneEtat+$newEtat WHERE artCode='$artCode' AND cdeNum=$cdeNum ;";
	DB_executerRequete($requete_sql, $connexion); // màj de la base
	_rctOAComplet($cdeNum); // terminer la réception de la commande, si besoin				
	// modifier l'article
	$requete_sql="UPDATE article SET stockInit=stockInit+$qteRecue WHERE artCode='$artCode' ;";
	DB_executerRequete($requete_sql, $connexion); // màj de la base
	// ajouter un mouvement de stock
	$requete_sql="INSERT INTO stockMvt (mvtCode, mvtDate, mvtArt, mvtQte, mvtRefNum, mvtMotif)
		VALUE ('RCV', '".(COM_aujourdhui())."', '$artCode', $qteRecue, 'cf-$cdeNum', '$remarque');";
	DB_executerRequete($requete_sql, $connexion); // màj de la base
	echo mysql_error();
	return true;
}
// ========================================================================================
// MAIN()
// ========================================================================================
// Exemple de traitement : artCode=NEG002 rctDate=15/03/2015 fourNum=12 rctType=F cdeNum=22 qte=1 remarque= receptionner=Valider
/*DBG MODE */ $DBG=false; 
// /*DBG MODE */ $DBG=false; echo "<div id=DBG style='background:white;'>DBG MODE"; $DBG=true;
$userId="";
$headTitle="Liste des Articles";
$contentTitle="Gestion de production";
$rctDate=COM_DMY();$qte=$fourNum=$cdeNum=0;$remarque=""; //COM_aujourdhui()
				$rctTypeChk1=$rctTypeChk2=$rctTypeChk3="";
$rctType='F'; // R=répartie, F=fixée, attribuée à un seul OA
$rctADD=false;
$errorCode=0;

$etape=2; // etape du workflow de production de la commande : 1= choix des articles, 2=choix du fournisseur, 3=confirmation, 4=impression de la commande (optionnel)
/* il y a 4 étapes dans la production d'une commande :
commande normale
	1=choix des articles et de la quantité.
	2=choix de l'entête = dates et fournisseur
commande directe d'un article
	1= choix de la quantité, du fournisseur et des dates en une seule fois. Pas de choix d'autres articles.
*/
$oaDelai=0; // ce délai sera réactualisé si on donne un fournisseur. il faut donc le chercher ...
// -------------------------------------------------------------------
	$connexion=DB_connecter(); 

(isset($_REQUEST['artCode']))?$artCode=$_REQUEST['artCode']:$artCode="";
(isset($_REQUEST['tester']))?$tester=true:$tester=false;
(isset($_REQUEST['fourNum']))?$fourNum=$_REQUEST['fourNum']:$fourNum=0; 	// fournisseur absent ou incorrect
(isset($_REQUEST['cdeNum']))?$cdeNum=$_REQUEST['cdeNum']:$cdeNum=0; 		// commande absente ou incorrecte
if (isset($_REQUEST['rct'])){
	$t_ligneCde=_getLigneCde($cdeNum, $artCode);
	$qte=$t_ligneCde['qte'];	// quantité commande
	$fourNum=$t_ligneCde['fourNum']; 	// fournisseur : retrouver car on donne la commande en priorité
//echo "<br>DBG main cde=$cdeNum , art=$artCode , four=$fourNum ";
	//$rctDate=COM_DMY();			// date, déjà définie
	($t_ligneCde['qte']-$t_ligneCde['qteRecieved']>=0)?$qte=$t_ligneCde['qte']-$t_ligneCde['qteRecieved']:$qte=0;
}

if (isset($_REQUEST['receptionner']) || $tester){
	$error=false;
	// récup et contrôle des données communea à tous les modes de réception
	if(empty($artCode)) $errorCode=1101; 													// article absent ou incorrect
	(isset($_REQUEST['rctType']))?$rctType=$_REQUEST['rctType']:$errorCode=6001; 			// type de date absent
	(isset($_REQUEST['rctDate']))?$rctDate=$_REQUEST['rctDate']:$errorCode=1008;			// date incorrecte ou absente
	(isset($_REQUEST['qte']) && $_REQUEST['qte']>0)?$qte=$_REQUEST['qte']:$errorCode=1007;	// quantité absente
	(isset($_REQUEST['remarque']))?$remarque=$_REQUEST['remarque']:$remarque="";			// 
	if ($errorCode==0) $rctDate=COM_DMYtoYMD($rctDate);	// mettre la date au bon format : YY-M-D
	
	// Réceptionner selon le type de réception
	if ($errorCode==0 && $rctType=='F'){	// réception pour une commande fixée
		if (!$t_cde=_getLigneCde($cdeNum, $artCode)) {$errorCode=2000;}		// Commande inconnue
		else {
			// ligneEtat = 0 ou 1 ->2 ; 4->6 ; 8->10 ligneEtat in (0,1,4,5,8,9,12,13)
			$reste=$t_cde['qte']-$t_cde['qteRecieved'];
			$qteRecue=$qte; // qte donnée complètement affecté à la cde
			_enregQteRecue($artCode, $cdeNum, $qteRecue, $reste, $remarque="");
			$etape=3;
		}
	}
	elseif ($errorCode==0 && $rctType=='R'){	// réception avec répartition de la quantité sur les commandes d'un fournisseur. 
		// bon, on va parcourir la liste des lignes de commande, les modifier et pour chacune, vérifier s'il ne faut pas terminer la réception de l'entête.
		// A chaque réception, on décrémente la qté à recevoir (et répartir)
		if ($fourNum==0) $errorCode=6002; 												// fournisseur absent ou incorrect
		if ($errorCode==0 && !$t_four=_getFournisseur($fourNum)) $errorCode=6002;		// fournisseur absent ou incorrect
		// requête de lecture des commandes (on commence par la = ancienne, celle dont le n° est le + petit)
		// s'il reste une quantité à la fin du traitement, on l'ajoute sur la dernière (la plus récente).
		
		$requete_sql="SELECT cdeFour.cdeNum, qte, qteRecieved FROM ligneCdeFourArt, cdeFour WHERE cdeFour.cdeNum=ligneCdeFourArt.cdeNum AND artCode='$artCode' AND cdeFour.fourNum=$fourNum AND (qte-qteRecieved)>0 AND ligneEtat in (0,1,4,5,8,9,12,13) ORDER BY cdeDate";
		$requete_id=DB_ouvrirRequete($requete_sql, $connexion);
		if (DB_getNbEnreg($requete_id)){ // s'il y a des fournisseurs enregistrés
			while ($qte>0 && $enreg=DB_lireLigne($requete_id)){ // TQ on à une qté et on lit une ligne
				$cdeNum=$enreg['cdeNum']; 						// n° de la commande en cours
				$reste=$enreg['qte']-$enreg['qteRecieved']; 	// reste à recevoir
				($reste<$qte)?$qteRecue=$reste:$qteRecue=$qte;	// qteRecue=reste si qté restante à recevoir <= qte donnée : cde complétée ; sinon, qté donnée complètement affectée.
				_enregQteRecue($artCode, $cdeNum, $qteRecue, $reste, $remarque="");
				// calcul du reste à recevoir pour la prochaine ligne
				$qte=$qte-$qteRecue;
			}
			if ($qte>0){ // il reste un reliquat à recevoir et toutes les lignes ont été traitées.
				// modifier la dernière lue (on a encore le n° de la commande) et y ajouter le reliquat (pas besoin de changer l'état, il est déjà à +2)
				$updateCde="UPDATE ligneCdeFourArt SET qteRecieved=qteRecieved+$qteRecue WHERE artCode='$artCode' AND cdeNum=$cdeNum ;";
				DB_executerRequete($requete_sql, $connexion); // màj de la base
				// pas la peine de fermer la commande, elle est déjà testée.
			}
		}
	}
	elseif($errorCode==0)	$errCode=6011; // "Aucune commande en attente de réception";
	
	if ($errorCode==0 && $cdeNum && !$tester) { // afficher le rapport d'enregistrement et réinitialiser les champs de saisie
		$msg="<p>Réception de $qte unités pour $artCode enregistrée.</p>";
		//$artCode="";
		$rctDate=COM_DMY();$qte=$fourNum=$cdeNum=0;$remarque="";
		$rctTypeChk1=$rctTypeChk2=$rctTypeChk3="";
		$rctType='F';
		$rctADD=true;
		$etape=4; // réception terminée, on peut l'imprimer.
	}
}
// /* DBG */echo "</div id=DBG style='background:white;'>";
//=======================================================================
// Affichage de la page
//=======================================================================
_pageHeader($userId);	// entête de page et menu
?>
	<section><header>Enregistrer une réception</header>
		<article>
<?php 
_dspProgessionBar($etape, $cdeNum); // Afficher la barre de progression
(!empty($artCode))?$artTypeCode=_dspArticle($artCode):$artTypeCode=""; // afficher la fiche article si on le connaît
// affichage du formulaire ou du message d'enregistrement
	if ($rctADD){ 	// si la commande est ajoutée, afficher le message
		echo $msg;
		//_dspRct($cdeNum);
	}else {			// si la commande n'est pas ajoutée, afficher le formulaire de saisie
		if (empty($artCode)){ // formulaire de sélection d'article si le code est vide
			echo "<form id=receptForm name=receptForm>";
			echo "<label>Choisir l'article</label>";
			_dspSelectArticle('b',$artCode, 'receptForm'); // sélectionner un article.
			echo "</form>\n";
		}
		else{	// formulaire de création d'OA si le code article est connu
			// mise en place du bouton radio dateType qui sera sélectionné par défaut ou lors du réaffichage éventuel
				if ($rctType=='R') $null= (($rctTypeChk1="checked='checked'") & ($rctTypeChk2=$rctTypeChk3=""));
				if ($rctType=='F') $null= (($rctTypeChk2="checked='checked'") & ($rctTypeChk1=$rctTypeChk3=""));
			echo "<form id=receptForm name=receptForm>";
?>
				<input type=hidden name=artCode value='<?php echo $artCode; ?>' >
				<input type=hidden name=rctDate value=<?php echo $rctDate; ?> id=rctDate > </li>
				<div id=tester></div>
				<ul>
					<li><label>Date Réception</label><?php echo $rctDate; ?></li>
					<li><label>Fournisseur</label><?php _dspSelectFournisseur($artCode, $fourNum); ?></li>
					<li></li>
					<li><label>Réception </label>
						répartie sur les OA <input type="radio" name="rctType" value='R' id=rctType <?php echo $rctTypeChk1; ?> onchange="rctTypeChange();"> 
						pour un OA donné 	<input type="radio" name="rctType" value='F' id=rctType <?php echo $rctTypeChk2; ?> onchange="rctTypeChange();"> 
					</li>
					<li><label id=cdeNumLbl>Commande choisie</label><?php _dspSelectOA($artCode, $fourNum, $cdeNum); ?></li>
					<li></li>
					<li><label>Quantité reçue</label><input type=text name=qte value=<?php echo $qte; ?> id=rctQte  onchange="testerValeurs();"></li>
	<!-- Remplacer le contrôle suivant par un SELECT 
					<li><label>Prix unitaire Article</label><div id=dspMontant>0</div></li>
					<li><label>Montant de la commande</label><div id=dspMontant>0</div></li>
					<li></li>
	-->
					<li><label>Remarques</label><input type=text name=remarque value="<?php echo $remarque; ?>" placeholder="Remarque diverse, motif (non opérationnel)" size=100px ></li>
					<li><input type=submit id=btnReceptionner name=receptionner value='Valider' ></li>
				</ul>
<?php
			echo "</form>\n";
			_dspScriptDates($oaDelai);
		}
	} // FI cdeADD true
	if ($errorCode!=0) echo "Erreur ($errorCode)";
?>
		</article>
	</section>
	<section><header>Liste des approvisionnements en cours</header>
		<article>
<?php
	if(!empty($artCode)) _dspListeOA($artCode); else echo "Choisir un article";
?>
		</article>
	</section>
<?php
//========================================================================
// fin de page
//========================================================================
_pageFooter(); // pied de page
?>