<?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/DB_fct.inc.php";
include "library/APP_fct.inc.php";
include "library/_gesProdDesign.inc.php";
// ========================================================================================
// FONCTIONS LOCALES
// ========================================================================================
// -------------------------------------------------------------------
function _menuRight(){
echo "<h2>GesProd</h2>";
echo "<div>Maintenance des OF et OP :
<br>-&nbsp;Confirmer&nbsp;les &nbsp;OP&nbsp;</li>
<br>-&nbsp;Maintenir&nbsp;les&nbsp;OF</li>
</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 _getArticle($artCode){
global $connexion;
	$requete_sql="SELECT * from article WHERE artCode='$artCode' ";
	if($enreg=DB_chercherEnreg($requete_sql, $connexion)) return $enreg ;
	return 0;
}
// -------------------------------------------------------------------
// Afficher les donnée article (table)
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;
}
// ========================================================================================
// MAIN()
// ========================================================================================
$userId="";
$headTitle="Liste des Articles";
$contentTitle="Gestion de production";

(isset($_REQUEST['artCode']))?$artCode=$_REQUEST['artCode']:$artCode="";

// -------------------------------------------------------------------
	$connexion=DB_connecter(); 
//=======================================================================
// Affichage 
//=======================================================================
_pageHeader($userId);	// entête de page et menu


$artTypeCode=_dspArticle($artCode);
?>
<br> 
	<section><header>Gérer la production</header>
		<article>
		<p>
		<ul>
			<li>Lancer un ordre de fabrication ; Développement en cours</li>
			<li>Saisir une production ; Développement en cours</li>
		</ul>
		<br><br>
		</article>
	</section>
	<section><header>Données article</header>
		<article>
		<p>Ci-dessous, vous pouvez afficher les données d'un article : les besoins, les ressources, les données techniques.</p>
<?php
//=======================================================================
// Afficher une liste d'article et des actions à réaliser sur ceux-ci.
//=======================================================================
// -------------------------------------------------------------------
// Définition des pages d'action
$t_actionPage=array(
	'Dsp'=>"erpDspArt.php",
	'Upd'=>"",
	'Del'=>"",
	'Add'=>"",
	'Work'=>"gesProdDspArt.php"
);
$language['actPage']=array( 'Dsp'=>"Voir", 'Upd'=>"Mod", 'Del'=>"Suppr", 'Add'=>"Ajout", 'Work'=>"Ttmt" ); // nom des actions affichées

$pageName="gesProdArtLst.php"; //nom page locale, utilisé dans les liens pour le tri
$tableName="Article";
// -------------------------------------------------------------------
// Définition de la liste à afficher 
$t_fieldList['artCode']		=array( 'sortable'=>true, 	'sortNbr'=>"1", 'sortDir'=>"", 'originTable'=>"", 	'class'=>"text" ); // nom affiché des champs
$t_fieldList['artDesc']		=array( 'sortable'=>true, 	'sortNbr'=>"2", 'sortDir'=>"", 'originTable'=>"", 	'class'=>"text" ); // nom affiché des champs
$t_fieldList['artPrixHT']	=array( 'sortable'=>true, 	'sortNbr'=>"3", 'sortDir'=>"", 'originTable'=>"", 	'class'=>"num" ); // nom affiché des champs
$t_fieldList['artTypeCode']	=array( 'sortable'=>true, 	'sortNbr'=>"4", 'sortDir'=>"", 'originTable'=>"article.", 	'class'=>"text" ); // nom affiché des champs
$t_fieldList['artTypeDesc']	=array( 'sortable'=>true, 	'sortNbr'=>"5", 'sortDir'=>"", 'originTable'=>"", 	'class'=>"text" ); // nom affiché des champs
$t_fieldList['besNbr']		=array( 'sortable'=>false, 	'sortNbr'=>"0", 'sortDir'=>"", 'originTable'=>"BB", 	'class'=>"num" ); // nom affiché des champs /!\ (*)
$t_fieldList['resNbr']		=array( 'sortable'=>false, 	'sortNbr'=>"0", 'sortDir'=>"", 'originTable'=>"RB", 	'class'=>"num" ); // nom affiché des champs

	// (*) /!\ Attention, ici on utilise la valeur contenue dans le champ pour appeler une fonction

//$t_fieldList['']=array("artCode", "artDesc", "artPrixHT", "artTypeCode", "artTypeDesc", "besNbr", "resNbr"); // nom bdd des champs = liste des champs affichés
$language['champs']=array('artCode'=>"Référence", 'artDesc'=>"Description", 'artPrixHT'=>"Prix HT", 
	'artTypeCode'=>"Type", 'artTypeDesc'=>"Nom type", 'besNbr'=>"Nbre BP", 'resNbr'=>"Nbre OP" ); // nom affiché des champs

$t_fieldSortable=array(true, true, true, true, true); // tri autorisé ou non
$t_fieldSortNbr=array("1", "2", "3", "4", "5"); // code des champs de tri dans les paramètres html
$t_fieldSortDir=array("", "", "", "", "", ""); // ordre de tri (temporairement défini)
// -------------------------------------------------------------------
// tableaux pour ne pas montrer le vrai nom des champs dans les paramètres transmis
$t_sortFieldNames=array("1", "2", "3", "4", "5"); // nom des champs dans les paramètres html
$t_sortFieldDbTabNames=array("", "", "", "article.", "");  // mettre ici le nom de la table de la requête (avec le point !!!)
$t_sortFieldDbNames=array("artCode", "artDesc", "artPrixHT", "artTypeCode", "artTypeDesc"); // nom des champs dans la BDD
$t_sortFieldDesc=array("Référence", "Description", "Prix HT", "Type", "Nom"); // description des champs à afficher
$t_sortFieldDir=array("", "", "", "", "", ""); // ordre de tri (temporairement défini)
$t_sortFieldDsp=array(true, true, true, true, true); // tri autorisé ou non
$defaultSortClause=" ORDER BY article.artCode desc";
// -------------------------------------------------------------------
// Construction de la requête à afficher, connexion et ouverture.
// -------------------------------------------------------------------
		$sqlBBov="SELECT artCode, cdeNum as num, 'ov' as orig from lignecdeclientart WHERE ligneEtat in (0,1,4,5,8,9,12,13)";
		$sqlBBof="SELECT comp_artCode from ligneofnomenclature ";
		$sqlBB="SELECT artCode as artCode, count(*) as besNbr FROM ($sqlBBov union $sqlBBof) bb group by bb artCode";
		$sqlBB="select b1ArtCode as bbArtCode, count(*) as besNbr from (
			SELECT artCode as b1ArtCode, cdeNum as num, 'ov' as orig from lignecdeclientart WHERE ligneEtat in (0,1,4,5,8,9,12,13) 
			union 
			SELECT ofComp_artCode as  b1ArtCode, ofnum as num, 'bf' as orig from ofnomenclature 
		) bb
		group by bbArtCode";
		
		$requete_sql="SELECT artCode, artDesc, artPrixHT, article.artTypeCode, artTypeDesc FROM article, artType type";
		$requete_sql.=" WHERE article.artTypeCode=type.artTypeCode";
	// -------------------------------------------------------------------
	// Gestion du 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="artCode"; // 
	// 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]!=""){
				(empty($sortClause))?$sortClause=" ORDER BY ":$sortClause.=", ";
				$sortClause.=$t_sortFieldDbTabNames[$key].$t_sortFieldDbNames[$key]." ".$t_sortFieldDir[$key];
			}
		}

	// -------------------------------------------------------------------
	// Gestion du filtre des produits
	// -------------------------------------------------------------------
		(isset($_REQUEST['mode']))?$mode=$_REQUEST['mode']:$mode=0; // récup du mode de tri (0 par défaut)
		$filterClause="";
		switch ($mode){ // choix du mode de filtre
			case 0: // Tout article vendu (PF, négoce, matières, consommables vendus)
				$filterClause=" and  article.artTypeCode in ('F', 'N', 'M')"; break;
			case 1: // Tout article vendu (PF, négoce, matières, consommables vendus)
				$filterClause=" and  article.artTypeCode in ('F', 'N', 'M')"; break;
			case 2: // PF seulement
				$filterClause=" and  article.artTypeCode in ('F')"; break;
		}
		
	// -------------------------------------------------------------------
	// fusion de la requête, de la clause de filtre et de tri
	// -------------------------------------------------------------------
		$requete_sql.=$filterClause;
		(!empty($sortClause))?$requete_sql.=$sortClause:$requete_sql.=$defaultSortClause;

// -------------------------------------------------------------------
// Ouverture de la requête
// -------------------------------------------------------------------
	$requete_id=DB_ouvrirRequete($requete_sql, $connexion);
	//echo "<br>>".$requete_sql."<";
	//echo "<br>".mysql_error();
	
// -------------------------------------------------------------------
	// affichage du tableau de filtrage
	echo "<div border=1 align=center><!--Debut de filtre-->\n";
	echo "<ul id='filtreList'>";
	echo "<li class='filtreTitre'>Filtres : </li>";
	echo "<li class='filtreItem'><a href=$pageName?mode=0><span title='produits finis , Négoce, Matières et Semi-finis vendus'>X</span></a></li>";
	echo "<li class='filtreItem'><a href=$pageName?mode=2>Produits Fini</a></li>";
	echo "<li class='filtreItem'><a href=$pageName?mode=1><span title='produits finis , Négoce, Matières et Semi-finis vendus'>Produits Commerciaux</span></a></li>";
	echo "</ul>";
	echo "</div><!-- Fin de filtre -->";
// -------------------------------------------------------------------
	// début de liste
	echo "<table border=1 width=100%><!--Debut de liste-->\n";
	// Ouvrir et tester la requête. y a-t-il qqch à afficher ?
	if (DB_getNbEnreg($requete_id)){
		// -------------------------------
		// a) afficher l'entête des colonnes en vérifiant si on peut faire du tri dessus
		echo "<tr>";
		// liste des actions
		foreach($t_actionPage as $actKey=>$actVal) if (!empty($actVal)) echo "<th>".$language['actPage'][$actKey]."</th>"; // listes des actions
		// liste des champs
		foreach($t_fieldList as $key=>$val){
			echo "<th>";
			if(_isInTab($t_fieldList, $val)>=0){
				if ($t_fieldList[$key]['sortable']==true){
					$dir=$t_fieldList[$key]['sortDir'];
					($mode)?$url=$pageName."?mode=$mode&":$url=$pageName."?";
					$url.="sortDir=$dir&sortField=".$t_fieldList[$key]['sortNbr'];
					echo "<a href=\"".$url."\"><img src=\"segami/s_$dir.png\" border=0 /> ".$language['champs'][$key]."</a>";
				}else echo $language['champs'][$key];
			}else echo "$val";
			echo "</th>";
		}
		echo "</tr>\n";
		
		// b) afficher la liste des enregistrements
		$color=1;
		while ($t_record=DB_lireLigne($requete_id)){
			$recordKey=$t_record['artCode'];
			// définition de la classe de style en fonction du type et du n° de ligne :
			($color)?$color=0:$color=1;
			$classeTr="tr".$color;
			// affichage de la ligne
			echo "	<tr class='$classeTr'>";
			echo "		<td><a href=\"".$t_actionPage['Dsp']."?artCode=$recordKey\" ><img src=\"segami/btnDetail.png\" border=0 /></a></td>";
			echo "		<td><a href=\"".$t_actionPage['Work']."?artCode=$recordKey\" ><img src=\"segami/btnWork.png\" border=0 /></a></td>";
			foreach($t_fieldList as $key=>$val){
				$classeTd="td".$color." ".$t_fieldList[$key]['class'];
				echo "	<td class='$classeTd'>";
				if (!empty($t_record[$key]))	echo $t_record[$key];
				elseif (!empty($t_fieldList[$key]['originTable']))
					if ($t_fieldList[$key]['originTable']=='BB') echo (APP_getArtBBNbr($recordKey)); // besoins bruts (*) 
					if ($t_fieldList[$key]['originTable']=='RB') echo (APP_getArtRBNbr($recordKey)); // ressources brutes (*)
				echo "	</td>";
			}
			echo "	</tr>\n";
		}
		// fin de liste
	}else
		echo "<tr><td colspan=100%>aucun enreg trouvé</td></tr>";
	// Fin de liste
	echo "</table><!-- Fin de liste -->\n";
	// (*) /!\ Attention, ici on utilise la valeur contenue dans le champ originTable pour appeler une fonction, pas comme nom de table!!!
//========================================================================
// fin de l'affichage de la liste
//========================================================================
?>
		</article>
	</section>
<?php
//========================================================================
// fin de page
//========================================================================
_pageFooter(); // pied de page
?>