<?php
session_start();
// ========================================================================================
// Valider le panier et la commande, ETAPE FINALE
//
// Enregistrer le client et la commande.
// Valider le contenu du panier et le transformer en commande ferme.
// ========================================================================================
include "library/DB_fct.inc.php";
include "library/APP_fct.inc.php";
include "library/CART_fct.inc.php";
include "library/_baseDesign.inc.php";
// REMARQUE : le taux de TVA est 19,6 par défaut, pour l'instant, pas de taux géré.
	$tauxTVA=20;
// ========================================================================================
// FONCTIONS LOCALES
// ========================================================================================
// -------------------------------------------------------------------
function _menuRight(){
	echo "Merci de votre confiance.";
	echo "<div class=help>La commande est enregistrée, le panier est vidé.<br>Fin du traitement.</div>\n";
}
// -------------------------------------------------------------------
function _getTier($enregKey){
global $connexion;
	$requeteSelect="SELECT * FROM tier, pays WHERE paysCode=pays.code AND tierNum=$enregKey ;";
	 return DB_chercherEnreg($requeteSelect, $connexion);
}
// -------------------------------------------------------------------
function _getCde($enregKey){
global $connexion;
	$requeteSelect="SELECT cdeClient.* FROM cdeClient WHERE cdeNum=$enregKey ;";
	return DB_chercherEnreg($requeteSelect, $connexion);
}
// -------------------------------------------------------------------
function _getTransport($enregKey){
global $connexion;
	$requeteSelect="SELECT * FROM modeTransport WHERE code=$enregKey ;";
	return DB_chercherEnreg($requeteSelect, $connexion);
}
// -------------------------------------------------------------------
function _getPaiement($enregKey){
global $connexion;
	$requeteSelect="SELECT * FROM modePaiement WHERE code=$enregKey ;";
	return DB_chercherEnreg($requeteSelect, $connexion);
}
// -------------------------------------------------------------------
function _dspCoordTier($tierNum){
global $connexion;
	// remarquer que je renomme la colonne pays.libelle pour que dans le tableau résultat ($t_record),
	// 	je ne risque pas de le confondre avec un autre libellé éventuel.
	$requete_sql="SELECT tier.*, pays.libelle AS paysLibelle FROM tier, pays WHERE paysCode=pays.code AND tierNum='$tierNum' ;";
	//$requete_sql="SELECT * FROM tier, pays WHERE  tierNum='$tierNum' ;";
	$t_record=DB_chercherEnreg($requete_sql, $connexion);
	//echo mysql_error();
	//echo sizeof($t_record)."g".$t_record;
	//echo $tierNum;
	// BEGIN Liste des coordonnées
		echo "<!-- BEGIN Coord data --><table align=center border=1 width=100% id=coordList>";
		echo "<caption>Vos coordonnées</caption>";
		echo "<tr><th colspan='100%'>Adresse de facturation</td></tr>";
		echo "<tr><td>";
			echo "<ul class=coord_dsp>";
			echo "<li>Client : ".$t_record['tierNum']."</li>";
			echo "<li>".$t_record['tierRaisonSociale']."</li>";
			echo "<li>".$t_record['tierAdresse']."</li>";
			echo "<li>".$t_record['paysLibelle']."</li>";
			echo "</ul>";
		echo "</td></tr>";
		echo "</table><!-- END Coord data -->";
	// END Liste des coordonnées
}
// -------------------------------------------------------------------
// liste des articles de la commande. Liste simple affichage Mais avec récup des modes de transport et de paiement
// -------------------------------------------------------------------
function _cdeList($cdeNum){
global $connexion;
global $tauxTVA;
include "library/PARM_tabs.inc.php"; // tableaux de paramètres communs

	$montantCde=0;
	// Récupérer le mode de transport
	$t_cde=_getCde($cdeNum);
		$transMode=$t_cde['transCode'];
		$payMode=$t_cde['paiemtCode'];
		$cdeEtat=$t_cde['cdeEtat'];
	// Récupérer le mode de transport
	$t_modeTransport=_getTransport($transMode);
		$transModeLib=$t_modeTransport['libelle'];
		$transPrix=$t_modeTransport['prixHT'];
	// Récupérer le mode de paiement
	$t_modePaiement=_getPaiement($payMode);
		$paiemtModeLib=$t_modePaiement['libelle'];

	// BEGIN Afficher la liste des articles et des totaux
	echo "<!-- item List BEGIN --><table align=center id=itemList>";
		echo " <caption>Articles commandés</caption>";
		echo "<tr><td>Référence</td><td>Designation</td><td>Quantité</td><td>Prix unitaire</td><td>Prix total</td></tr>"; // entête de la liste
		
		$requete_sql="SELECT * FROM ligneCdeClientArt, article 
			WHERE ligneCdeClientArt.artCode=article.artCode
			AND cdeNum='$cdeNum' ;"; // préparation de la requête
		$requete_id=DB_ouvrirRequete($requete_sql, $connexion);
		
		// BEGIN Afficher la liste des articles
		while ($t_record=DB_lireLigne($requete_id)){ // while : tant que on trouve un enregistrement ...
			$prixLigne=$t_record['qte']*$t_record['artPrixHT']; // calcul du prix de la ligne
			$montantCde+=$prixLigne; // cummul de prix des lignes
			
			echo "<tr>"; // Afficher la ligne
				echo "<td>".$t_record['artCode']."</td>";
				echo "<td>".$t_record['artDesc']."</td>";
				echo "<td align=right>".number_format($t_record['qte'],2,',',' ')."</td>";
				echo "<td align=right>".number_format($t_record['artPrixHT'],2,',',' ')." €</td>";
				echo "<td align=right>".number_format($prixLigne,2,',',' ')." €</td>";
			echo "</tr>"; // fin d'affichage de la ligne
			
		} // ... done while : fin de la liste des articles
		// END Afficher la liste des articles
	
		// Calcul du montant du transport, de la TVA, du montant TTC
			// note : on considère que le taux de TVA est le même pour tous les articles ainsi que pour le transport
			$totalHT=number_format($montantCde,2,',',' ');
			$prixTransport=number_format($transPrix,2,',',' ');
			$montantTVA=($montantCde+$transPrix)*$tauxTVA/100;
			$TVA=number_format($montantTVA,2,',',' ');
			$totalTTC= number_format(($montantCde+$transPrix+$montantTVA),2,',',' ');
		
		// Affichage du pied de la facture (totalHT, transport, TVA, total TTC, rappel du mode de paiement)
		echo "<tr class=cdeTotalHT><td colspan=4 align=right>Total Hors taxes : </td><td align=right>$totalHT €</td></tr>";
		echo "<tr class=cdeTransport><td colspan=4 align=right>Transport : $transModeLib ; </td><td align=right>$prixTransport €</td></tr>";
		echo "<tr class=cdeTVA><td colspan=4 align=right>TVA ($tauxTVA) : </td><td align=right>$TVA €</td></tr>"; 
		echo "<tr class=cdeTotalTTC><td colspan=4 align=right>Total TTC : </td><td align=right>$totalTTC €</td></tr>";
		echo "<tr class=cdePaiement><td colspan=5 align=right>Mode de paiement : $paiemtModeLib</td></tr>";
	echo "</table><!-- Item List END -->\n";
	// END Afficher la liste des articles et des totaux
// BEGIN Afficher la liste des articles et des totaux
	echo "<!-- item List BEGIN --><table align=center id=cdeStatus>";
		echo " <caption></caption>";
		echo "<tr><td>Etat de la commande : <b>".$PRM_cdeEtatDesc[$cdeEtat]."</b></td></tr>"; // entête de la liste
	echo "</table><!-- Item List END -->\n";
}
// ========================================================================================
// MAIN()
// ========================================================================================
$userId="";
$pageName="lstArt.php";
$headTitle="Commande enregistrée";
$contentTitle="Commande enregistrée";

// Récup des paramètres
$errorCode=false;
//(isset($_REQUEST['id'])&&!empty($_REQUEST['id']))?$panierId=$_REQUEST['id']:$panierId=0; // 
$panierId=0;
(isset($_REQUEST['id'])&&!empty($_REQUEST['id']))?$panierId=$_REQUEST['id']:$errorCode=100; // 100 panier non défini

// ========================================================================================
// connexion et ouverture de la requête à afficher
	$connexion=DB_connecter(); 

$tauxTva=APP_getTVA();
// ========================================================================================
// GESTION DES ERREURS
// ========================================================================================
// Vérifier le panier et le nombre d'articles
	$cartCount=CART_getCartCount($panierId);
	// EN CAS D'ERREUR : Envoi de la page de redirection de base (goToUrl())
	if (!$cartCount || empty($cartCount)){ 
		$errorCode=101; // erreur, panier vide ou indéfini
	}
// Affichage des erreurs.
// 		EN CAS D'ERREUR : Envoi de la page de redirection de base (goToUrl())
	if ($errorCode) {
		$message="erreur ($errorCode). <br>vous allez être redirigé vers l'index ou <a href=\"javascript:history.back()\">Demander le retour page précédente.</a>";
		$backUrlCompltete="index.php";
		_goToUrl($message, $backUrlCompltete, '', ''); // pour l'instant, on perd l'utilisateur, voir comment corriger ça ... variables de session ?
		echo $message;
		exit(0);
	}
	
// il n'y a pas d'erreur de paramètres, on peut continuer

// ========================================================================================
// VALIDATION DU PANIER : enregistrement du client, de la commande, validation du panier
// ========================================================================================
	// a) Enregistrement du client (rechercher le panier, enregistrement du client, récup de son numéro)
		// recup du panier ; faire une fonction applicative getPanier($panierId) ?
		$requeteSelect="SELECT * FROM panier WHERE panierId='$panierId' AND status<2 ;";
		if($t_panier=DB_chercherEnreg($requeteSelect, $connexion)){
			// création du client
			//	Note : le mdp est actuellement chiffré en sha1 plutôt que md5, qui n'offre plus de garantie suffisante
			$requeteInsert="INSERT INTO tier (tierRaisonSociale, tierAdresse, paysCode, tierLogin, tierMot2Pass)
				VALUE ('".$t_panier['invNom']."', '".$t_panier['invAdress']."', '".$t_panier['invPaysCode']."', 
						'".$t_panier['invNom']."', '".(sha1($t_panier['invNom']))."') ;";
			$t_record=DB_executerRequete($requeteInsert, $connexion);
			// recup du n° du tiers client ; faire une fonction applicative getLastTiersNum() ?
			$requeteSelect="SELECT max(tierNum) FROM tier ;";
			$t_client=DB_chercherEnreg($requeteSelect, $connexion);
			$tierNum=$t_client[0];
			
		// b) modification du statut du panier (= en cours d'enregistrement)
			$requeteUpdate="UPDATE panier SET
				status='1', tierNum=$tierNum
				WHERE panierId='$panierId' ;";
			$t_record=DB_executerRequete($requeteUpdate, $connexion);
			
		// b) Enregistrement de la commande (et récupération de son n°)
			// Création de la commande
			// 	=>>	Remarquer la fonction now() qui perme d'obtenir la date du jour. Cette fonction est différente selon le SGBD
			$requeteInsert="INSERT INTO cdeClient (cliNum, cdeDate, cdeRemiseGlobale, transCode, paiemtCode, cdeEtat) 
				VALUES(".$tierNum.", NOW(), 0, ".$t_panier['transMode'].", ".$t_panier['payMode'].", 1 );";
			$t_record=DB_executerRequete($requeteInsert, $connexion);
			// récupération du n° de la commande
			$requeteSelect="SELECT max(cdeNum) FROM cdeClient ;";
			$t_client=DB_chercherEnreg($requeteSelect, $connexion);
			$cdeNum=$t_client[0];
			
		// d) enregistrement des articles dans la commande
			// remarquer les données constantes ($cdeNum et 0 ) ajoutées au résultat de la partie SELECT de la requête,
			// elles seront transmises directement à la partie INSERT.
			$requeteInsert="INSERT INTO lignecdeclientart 
				SELECT $cdeNum, artCode, panierQty, 0, 1 FROM panierArticle
				WHERE panierId='$panierId' and status<=1 ;";
			$t_record=DB_executerRequete($requeteInsert, $connexion);
			//if (mysql_errno()) echo "DBG : ".mysql_error();
			
		// d) enregistrement des infos dans le journal de la compta
			// Version simpliste : enregistrement du débit et du crédit
			
		// f) validation des articles du panier et du panier
		// DBG shunt de la maj du panier
			$requeteUpdate="UPDATE panierArticle SET status='2' WHERE panierId='$panierId' and status<=1 ;";
			$t_record=DB_executerRequete($requeteUpdate, $connexion);
			$requeteUpdate="UPDATE panier SET status='2', cdeNum=$cdeNum WHERE panierId='$panierId' ;";
			$t_record=DB_executerRequete($requeteUpdate, $connexion);
		// Le panier est validé et vide, il faut détruire le n° de panier, on récupère le n° de commande
		
		}else{ // le panier est déjà validé
			// juste rechercher la commande (enfin, ... son numéro)
			$requeteSelect="SELECT cdeNum FROM panier WHERE panierId='$panierId';";
			$t_client=DB_chercherEnreg($requeteSelect, $connexion);
			$cdeNum=$t_client[0];
		}
// Validation du panier terminée. {On connaît le n° de commande : $cdeNum}
// ========================================================================================
// AFFICHAGE de l'aperçu de la commande
// ========================================================================================
// Initialiser les variables locales
$montantCde=0;
$printUrl="cdePrint.php?id=$cdeNum";

//------------------------------------------------------------------------
// Récupérer la commande
	$t_cde=_getCde($cdeNum);
		$cdeDate=$t_cde['cdeDate'];
		$tierNum=$t_cde['cliNum'];
		$paiemtCode=$t_cde['paiemtCode'];
		$transCode=$t_cde['transCode'];

//------------------------------------------------------------------------
// Récupérer le mode de transport
	$t_modeTransport=_getTransport($transCode);
		$transModeLib=$t_modeTransport['libelle'];
		$transPrix=$t_modeTransport['prixHT'];

//------------------------------------------------------------------------
// Récupérer le mode de paiement
	$t_modePaiement=_getPaiement($paiemtCode);
		$paiemtModeLib=$t_modePaiement['libelle'];

//------------------------------------------------------------------------------------------------------------
// Afficher la commande proFormat
//------------------------------------------------------------------------------------------------------------
_pageHeader($userId);	// entête de page et menu


// -------------------------------------------------------------------
// DEBUT Afficher la barre de progression
echo "<!-- BEGIN progression step List --><div id=progressionBar><ul class=nobloc>";
echo "<li class=stepCurrent>Commande Enregistrée, Merci de votre confiance.</li>"; // retour
echo "<li class=stepPrevious><a href='$printUrl' target='_blank'>Imprimer la commande</a></li>"; // valider le panier
echo "</ul></div><!-- END progression step List -->\n";
// FIN Afficher la barre de progression

// -------------------------------------------------------------------
// BEGIN Afficher l'espace de données
echo "<div id=data><!-- data Space BEGIN-->\n";
echo " <h3>Commande n° $cdeNum du $cdeDate</h3>";
	
	// -------------------------------------------------------------------
	// BEGIN Liste des coordonnées
		_dspCoordTier($tierNum);
	// END Liste des coordonnées
	
	// -------------------------------------------------------------------
	// BEGIN Liste des articles de la commande et des totaux
		_cdeList($cdeNum);
	// END Liste des articles de la commande et des totaux

echo "</div><!-- data Space END-->\n";
// FIN Afficher l'espace de données
// ========================================================================================
// fin de page
// ========================================================================================
_pageFooter(); // pied de page
?>