<?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>Afficher un article pour afficher :
<ul>
	<li>les&nbsp;besoins&nbsp;en&nbsp;cours</li>
	<li>les&nbsp;ressources&nbsp;attendues</li>
	<li>les&nbsp;données&nbsp;techniques</li>
</ul>
</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;
}
// ========================================================================================
// MAIN()
// ========================================================================================
$userId="";
$headTitle="Index de la gestion de production";
$contentTitle="Gestion de production";
$pageName="gesProdIndex.php";
$tableName="article";


// -------------------------------------------------------------------
	$connexion=DB_connecter(); 
//=======================================================================
// Affichage de la page
//=======================================================================
_pageHeader($userId);	// entête de page et menu
?>
<br> 
	<section><header>Gestion de production</header>
		<article>
		<p>
		La gestion de production est le noyau de la gestion d'entreprise.<br>
		On y effectue les traitements de :
		<ul>
			<li><a href="erpDspBes.php">Planification de la production (conversion des ventes en achats)</a></li>
			<li><a href="gesProdIndex.php#">Gestion de la production (lancement des fabrications, saisies de la production : ci-après)</a></li>
			<li><a href="beArtLst.php">Gestion des données techniques (articles, gammes et nomenclatures, infrastructure de production)</a></li>
			<!-- obsolète <li><a href="gesProdArtLst.php">Gestion de la production (lancement des fabrications, saisies de la production)</a></li>-->
		</p>
		</article>
	</section>
	<section><header>Gérer la production des articles</header>
		<article>
		<p>Ci-dessous, vous pouvez 
			<ul><li>Afficher les données d'un article : les besoins, les ressources, les données techniques</li>
				<li>Saisir la production d'un article</li>
				<li>Traiter un article : Gérer les OF : création, modification, suppression.</li>
			</ul>
		</p>
<?php
//=======================================================================
// Construction et Affichage de la liste des articles
// ----------------------------------------------------------------------
// Définition des pages d'action
$t_actionPage=array(
	'Dsp'=>"erpDspArt.php",
	'Upd'=>"",
	'Del'=>"",
	'Add'=>"",
	'Fab'=>"gesProdDspArt.php",
	'Work'=>"gesProdWrkArt.php"
);
$language['actPage']=array( 'Dsp'=>"Voir", 'Upd'=>"Mod", 'Del'=>"Suppr", 'Add'=>"Ajout", 'Fab'=>"Saisie<br>Prod", 'Work'=>"Ttmt" ); // nom des actions affichées

$pageName="gesProdIndex.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 produit (PF ou semi fini)
				$filterClause=" and  article.artTypeCode in ('F', 'S')"; break;
			case 1: // SF seulement 
				$filterClause=" and  article.artTypeCode in ('S')"; 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 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 Semi finis'>Produits Semi finis</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'];
			$nbBB=APP_getArtBBNbr($recordKey);
			$nbRB=APP_getArtRBNbr($recordKey);
			// 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><img src=\"segami/btnFab_X.png\" border=0 height=14px /></td>";
			// A FAIRE : echo "		<td><a href=\"".$t_actionPage['Fab']."?artCode=$recordKey\" ><img src=\"segami/btnFab.png\" border=0 height=14px /></a></td>";
			//if (($nbBB+$nbRB)>0)
				echo "		<td><a href=\"".$t_actionPage['Work']."?artCode=$recordKey\" ><img src=\"segami/btnWork.png\" border=0 /></a></td>";
			//else
			//	echo "		<td><img src=\"segami/btnWork_X.png\" border=0 /></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 ($nbBB); // besoins bruts (*) 
					if ($t_fieldList[$key]['originTable']=='RB') echo ($nbRB); // 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
?>