Commit e84d2c37 authored by Feu's avatar Feu
Browse files

depouissierage code comptoirs (test à faire)

parent 4a446298
<?php
/* Copyright 2005,2006
/* Copyright 2005,2006,2008
* - Julien Etelain <julien CHEZ pmad POINT net>
*
* Ce fichier fait partie du site de l'Association des étudiants de
......@@ -21,24 +21,38 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**
* @file
* Interface de vente par carte AE sur des comptoirs de type "bueau" .
* Remarque: Ce fichier ne contient que les spécificités de ce type de comptoir.
*
* L'id du comptoir doit être définit en GET ou en POST : id_comptoir
*
* L'opérateur est définit à l'utilisateur connecté, si ce dernier n'est pas
* membre du groupe vendeurs du comptoir, une erreur 403 sera renvoyée.
*
* @see comptoir/frontend.inc.php
* @see comptoir
* @see sitecomptoirs
* @see get_localisation
*/
$topdir="../";
require_once("include/comptoirs.inc.php");
require_once($topdir. "include/cts/user.inc.php");
$site = new sitecomptoirs(true);
$site->comptoir->ouvrir($_REQUEST["id_comptoir"]);
if ( $site->comptoir->id < 1 )
{
header("Location: index.php");
exit();
}
if ( !$site->comptoir->is_valid() )
$site->error_not_found("services");
if ( $site->comptoir->type != 2 )
error_403("forbiddenmode");
$site->error_forbidden("services","invalid");
if ( !$site->comptoir->set_operateur($site->user) )
error_403();
$site->error_forbidden("services","group",$site->comptoir->groupe_vendeurs);
include("frontend.inc.php");
......
<?php
/* Copyright 2005,2006
/* Copyright 2005,2006,2008
* - Julien Etelain <julien CHEZ pmad POINT net>
*
* Ce fichier fait partie du site de l'Association des étudiants de
......@@ -22,6 +22,26 @@
* 02111-1307, USA.
*/
/**
* @file
* Interface de vente par carte AE sur des comptoirs de type "classique" (bar).
* Remarque: Ce fichier ne contient que les spécificités de ce type de comptoir.
*
* L'id du comptoir doit être définit en GET ou en POST : id_comptoir
*
* La salle est vérifiée par ce script : l'id de la salle du poste client
* est démandée à get_localisation(), si elle différe de id_salle du comptoir,
* l'accès est bloqué.
*
* Ce script ajoute la boite latérale pour la connexion des barmens, et prends
* en charge les opérations liées.
*
* @see comptoir/frontend.inc.php
* @see comptoir
* @see sitecomptoirs
* @see get_localisation
*/
$topdir="../";
require_once("include/comptoirs.inc.php");
require_once($topdir. "include/cts/user.inc.php");
......@@ -30,20 +50,15 @@ require_once($topdir. "include/localisation.inc.php");
$site = new sitecomptoirs(true );
$site->comptoir->ouvrir($_REQUEST["id_comptoir"]);
if ( $site->comptoir->id < 1 )
{
header("Location: index.php");
exit();
}
if ( !$site->comptoir->is_valid() )
$site->error_not_found("services");
if ( get_localisation() != $site->comptoir->id_salle )
{
header("Location: index.php");
exit();
}
$site->error_forbidden("services","wrongplace");
if ( $site->comptoir->type != 0 )
error_403("forbiddenmode");
$site->error_forbidden("services","invalid");
if ( $_REQUEST["action"] == "logoperateur" )
{
......@@ -54,7 +69,7 @@ if ( $_REQUEST["action"] == "logoperateur" )
else
$op->load_by_email($_REQUEST["adresse_mail"]);
if ( $op->id < 1 || !$op->is_password($_REQUEST["password"]) )
if ( !$op->is_valid() || !$op->is_password($_REQUEST["password"]) )
$opErreur = "Etudiant inconnu / mauvais mot de passe";
// restons vague sur les details de l'erreur
......@@ -80,7 +95,10 @@ $cts->add_paragraph("<a href=\"index.php\">Autre comptoirs</a>");
$lst = new itemlist();
foreach( $site->comptoir->operateurs as $op )
$lst->add("<a href=\"comptoir.php?id_comptoir=".$site->comptoir->id."&amp;action=unlogoperateur&amp;id_operateur=".$op->id."\">". $op->prenom." ".$op->nom."</a>");
$lst->add(
"<a href=\"comptoir.php?id_comptoir=".$site->comptoir->id."&amp;".
"action=unlogoperateur&amp;id_operateur=".$op->id."\">". $op->prenom.
" ".$op->nom."</a>");
$cts->add($lst);
$frm = new form ("logoperateur","comptoir.php?id_comptoir=".$site->comptoir->id);
......
<?php
/* Copyright 2005-2008
* - Julien Etelain <julien CHEZ pmad POINT net>
* - Pierre Mauduit <pierre POINT mauduit CHEZ utbm POINT fr>
*
* Ce fichier fait partie du site de l'Association des étudiants de
* l'UTBM, http://ae.utbm.fr.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**
* @file
* Interface de vente par carte AE sur des comptoirs de type "classique" (bar)
* ou de type "bureau". Il s'agit de la partie commune des interfaces pour les
* deux types de comptoir concernés.
*
* Permet aussi de preter les livres se trouvant dans la même salle que le
* comptoir.
*
* $site doit être de type sitecomptoirs
*
* @see sitecomptoirs
* @see comptoir
* @see comptoir/bureau.php
* @see comptoir/comptoir.php
*/
if ( $_REQUEST["action"] == "logclient" && count($site->comptoir->operateurs))
{
$client = new utilisateur($site->db,$site->dbrw);
......@@ -57,7 +97,7 @@ else if ( $_REQUEST["action"] == "vente" && count($site->comptoir->operateurs) )
}
else
{
list($client,$vendus,$nvendus) = $site->comptoir->vendre_panier();
list($client,$vendus) = $site->comptoir->vendre_panier();
if ( $client )
{
$client->refresh_solde();
......@@ -335,7 +375,7 @@ else if ( $site->comptoir->client->id > 0 )
foreach ( $panier as $info )
{
list($nb,$vp) = $info;
$prix = $vp->produit->obtenir_prix($site->comptoir->prix_barman);
$prix = $vp->produit->obtenir_prix($site->comptoir->prix_barman,$site->comptoir->client);
$lst->add($vp->produit->nom.($nb>1?" x ".$nb:"")." : ".($prix*$nb/100)." E");
$total += $prix*$nb;
}
......
<?php
/*
* Created on 12 ao�t 2006
/* Copyright 2006,2007
* - Julien Etelain <julien CHEZ pmad POINT net>
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
* Ce fichier fait partie du site de l'Association des étudiants de
* l'UTBM, http://ae.utbm.fr.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
require_once($topdir. "include/entities/cotisation.inc.php");
class cotisationae
......@@ -93,25 +107,6 @@ class cotisationae
{
if ( !$user->utbm )
return false;
/*if ( !$user->ae )
return true;
$req = new requete($this->db,
"SELECT *".
"FROM `ae_cotisations` " .
"WHERE `id_utilisateur`='".$user->id."' " .
"ORDER BY `date_cotis` DESC LIMIT 1");
if ( $req->lines != 1 )
return true;
list($curend) = $req->get_row();
$curend=strtotime($curend);
if ( $curend < $this->enddate )
return true;*/
return true;
}
......
......@@ -6,16 +6,9 @@
/*
* Classe comptoir.
*
* Cette classe a �t� con�ue pour r�sister au mieux aux erreurs des autres
* modules. La validit� de toutes les donn�es est v�rifi�e au chargement.
* A chaque op�ration la validit� des donn�es soumises est v�rifi�e.
*
* Lors de l'utilisation de classe, v�rifiez toujours les codes de sortie
* et les valeurs renvoy�es.
*/
/* Copyright 2005,2006
/* Copyright 2005,2006,2008
* - Julien Etelain <julien CHEZ pmad POINT net>
* - Pierre Mauduit <pierre POINT mauduit CHEZ utbm POINT fr>
*
......@@ -40,41 +33,94 @@
require_once($topdir . "comptoir/include/facture.inc.php");
/**
* Renvoie le premier élément d'un tableau
* @param $array Tableau
* @return le premier élément de $array
*/
function first ( $array )
{
reset($array);
return current($array);
}
/**
* @addtogroup comptoirs
* @{
*/
/**
* Classe gérant un comptoir
* Classe gérant un comptoir et des sessions de vente.
*
* Cette classe peut gérer des sessions de ventes, qui doivent se dérouler
* de la manière qui suit :
* 1 - Connecter le ou les barmens
* 2 - Connecter le client
* 3 - Ajouter les produits un à un dans le pannier
* 4 - Valider le panier, procède à la vente
* 5 - Retourner à 2...
*
* Cette classe prend en charge le mode "book" qui permet de mettre des livres
* dans le panier. ATTENTION: cette classe en prend pas en charge le pret de ces
* livres (ex: fait par frontend.inc.php)
*
* Ces différentes opérations peuvent se faire dans des appels de page différents.
* Voir frontend.inc.php pour l'usage de cette fonction.
*
* Un comptoir peut être de plusieurs types :
* 0 "Comptoir classique"
* Pour les bars, plusieurs opérateurs peuvent se connecter.
* 1 "Bureau"
* Pour les ventes dans les bureaux de l'AE. Un seul opérateur est connecté
* il s'agit normalement de l'utilisateur connecté au site.
* 2 "E-boutic"
* Comptoir pour la vente en ligne. Aucun operateur n'est connecté, c'est
* le client qui est considéré comme opérateur. Cette classe NE PEUT PAS être
* utilsié pour réaliser des ventes sur des comptoirs de ce type.
* frontend.inc.php ne peut donc pas être utilisés avec ces comptoirs.
* La vente se fait directement avec debitfacture
*
* @see debitfacture
* @see produit
* @see venteproduit
* @see comptoir/frontend.inc.php
*/
class comptoir extends stdentity
{
/* Informations comptoir */
/** Nom du comptoir */
var $nom;
/** Id compte association (obsolète)
* @deprecated
*/
var $id_assocpt;
/** Id du groupe barmens */
var $groupe_vendeurs;
/** Id du groupe administrateur */
var $groupe_admins;
/** Type de comptoir (bar, bureau, e-boutic) */
var $type;
/** Id de la salle où se trouve le comptoir */
var $id_salle;
/* Informations de session */
/** Barmen connectés (array(instance utilisateur)) */
var $operateurs;
/** Panier [si un client est connecté] */
var $panier;
/** Client connecté (instance utilisateur) */
var $client;
/** Le client a droit au prix barman */
var $prix_barman;
/** Mode du comptoir ("book" ou null/"") */
var $mode;
/** @brief chargement du comptoir
*
* @param id l'id du comptoir
*
/**
* Charge un comptoir en fonction de son id
* En cas d'erreur, l'id est défini à null
* @param $id id du comptoir
* @return true en cas du succès, false sinon
*/
function load_by_id ($id)
{
......@@ -104,14 +150,15 @@ class comptoir extends stdentity
$this->id_salle = $row['id_salle'];
}
/** @brief ajout d'un comptoir
*
* @param nom le nom g�n�rique du comptoir
* @param id_assocpt l'id de l'association concern�e
* @param groupe_vendeurs l'id du groupe d�signant les vendeurs
* @param groupe_admins l'id du groupe d�signant les admins du comptoir
/**
* Ajout d'un comptoir
*
* @return true en cas de succ�s, false sinon
* @param $nom le nom générique du comptoir
* @param $id_assocpt l'id de l'association concernée (obsolète)
* @param $groupe_vendeurs l'id du groupe désignant les vendeurs
* @param $groupe_admins l'id du groupe désignant les admins du comptoir
* @param $id_salle id de la salle où se trouve le comptoir
* @return true en cas de succès, false sinon
*/
function ajout ($nom, $id_assocpt, $groupe_vendeurs, $groupe_admins, $type, $id_salle)
{
......@@ -141,14 +188,15 @@ class comptoir extends stdentity
return true;
}
/** @brief modification d'un comptoir
/**
* Modification d'un comptoir
*
* @param nom le nom g�n�rique du comptoir
* @param id_assocpt l'id de l'association concern�e
* @param groupe_vendeurs l'id du groupe dsignant les vendeurs
* @param groupe_admins l'id du groupe dsignant les admins du comptoir
*
* @return true en cas de succs, false sinon
* @param $nom le nom générique du comptoir
* @param $id_assocpt l'id de l'association concernée (obsolète)
* @param $groupe_vendeurs l'id du groupe désignant les vendeurs
* @param $groupe_admins l'id du groupe désignant les admins du comptoir
* @param $id_salle id de la salle où se trouve le comptoir
* @return true en cas de succès, false sinon
*/
function modifier ($nom, $id_assocpt, $groupe_vendeurs, $groupe_admins,$type,$id_salle)
{
......@@ -173,17 +221,18 @@ class comptoir extends stdentity
return ($sql->lines == 1) ? true : false;
}
/** @brief ouverture d'un comptoir
/**
* "Ouvre" le comptoir.
* Recharge la "session" du comptoir si disponible/
*
* @param id l'identifiant du comptoir
*
* @return true en cas de succ�s, false sinon
* @return true en cas de succès, false sinon
*/
function ouvrir ($id)
{
$this->load_by_id($id);
if ( $this->id < 0 )
if ( !$this->is_valid() )
return false;
$this->operateurs = array();
......@@ -191,21 +240,21 @@ class comptoir extends stdentity
$this->client = new utilisateur($this->db,$this->dbrw);
/* Par scurit */
$this->client->id = -1;
/* par dfaut on paye au prix normal */
/* Par sécurité */
$this->client->id = null;
/* par dèfaut on paye au prix normal */
$this->prix_barman = false;
/* Si il n'y a pas d'entre, on a fini */
/* Si il n'y a pas d'entrée, on a fini */
if (!isset($_SESSION["Comptoirs"][$this->id]))
return true;
/* chargement des oprateurs */
/* chargement des opérateurs */
if( isset($_SESSION["Comptoirs"][$this->id]["operateurs"]) )
foreach($_SESSION["Comptoirs"][$this->id]["operateurs"] as $uid)
{
$Op = new utilisateur ($this->db,$this->dbrw);
$Op->load_by_id ($uid);
if (($Op->id > 0) && $Op->is_in_group_id($this->groupe_vendeurs))
if (($Op->is_valid()) && $Op->is_in_group_id($this->groupe_vendeurs))
{
$this->operateurs[] = $Op;
......@@ -241,8 +290,8 @@ class comptoir extends stdentity
$this->client->load_by_id($_SESSION["Comptoirs"][$this->id]["client"]);
/* L'utilisatveur n'existe pas... probablement une erreur
* de passage de paramtre */
if ($this->client->id < 0)
* de passage de paramètre */
if (!$this->client->is_valid())
return false;
......@@ -255,14 +304,14 @@ class comptoir extends stdentity
{
$bk = new livre($this->db);
$bk->load_by_id($pid);
if ( $bk->id > 0 && $bk->id_salle == $this->id_salle )
if ( $bk->is_valid() && $bk->id_salle == $this->id_salle )
$this->panier[] = $bk;
}
return true;
}
/* vrification pour la tarification */
/* vérification pour la tarification */
if ($_SESSION["Comptoirs"][$this->id]["prix_barman"])
$this->verifie_prix_barman ();
......@@ -272,7 +321,7 @@ class comptoir extends stdentity
{
$Prod = new produit ($this->db);
$Prod->load_by_id ($pid);
if ($Prod->id > 0)
if ($Prod->is_valid())
{
$VenteProd = new venteproduit ($this->db,$this->dbrw);
if ($VenteProd->charge ($Prod,$this))
......@@ -284,39 +333,38 @@ class comptoir extends stdentity
return true;
}
/** @brief fermeture d'un comptoir
*
* @return true si succ�s, false sinon
*
/**
* Fermeture d'un comptoir
*/
function fermer ()
{
unset($_SESSION["Comptoirs"][$this->id]);
}
/** @brief ajout d'un operateur dans la liste des op�rateurs
* du comptoir.
*
* @return true si succ�s, false sinon
/**
* Connecte un operateur(=barman) : l'ajoute dans la liste des opérateurs
* en cours du comptoir. Doit être membre du groupe vendeurs.
*
* @param $user Utilisateur (instance de la classe utilisateur)
* @return true si succès, false sinon
*/
function ajout_operateur ($etudiant)
function ajout_operateur ($user)
{
if ($etudiant->id < 0)
if (!$user->is_valid())
return false;
if (!$etudiant->is_in_group_id($this->groupe_vendeurs))
if (!$user->is_in_group_id($this->groupe_vendeurs))
return false;
$this->operateurs[] = $etudiant;
$this->operateurs[] = $user;
$_SESSION["Comptoirs"][$this->id]["operateurs"][] = $etudiant->id;
$_SESSION["Comptoirs"][$this->id]["operateurs"][] = $user->id;
// crée l'entrée de tracking pour le barman
$req = new insert ($this->dbrw,
"cpt_tracking",
array(
"id_utilisateur" => $etudiant->id,
"id_utilisateur" => $user->id,
"id_comptoir" => $this->id,
"logged_time" => date("Y-m-d H:i:s"),
"activity_time" => date("Y-m-d H:i:s"),
......@@ -326,46 +374,48 @@ class comptoir extends stdentity
return true;
}
/** @brief définit le seul operateur du comptoir.
/**
* Définit un unique operateur(=barman) du comptoir.
* L'utilisateur doit être membre du groupe vendeurs.
* Doit être appelè à chaque instanciation.
*
* @return true si succ�s, false sinon
*
* @param $user Utilisateur (instance de la classe utilisateur)
* @return true si succès, false sinon
*/
function set_operateur ($etudiant)
function set_operateur ($user)
{
if ($etudiant->id < 0)
if (!$user->is_valid())
return false;
if (!$etudiant->is_in_group_id($this->groupe_vendeurs))
if (!$user->is_in_group_id($this->groupe_vendeurs))
return false;
$this->operateurs = array($etudiant);
$this->operateurs = array($user);
return true;
}
/** @brief el�ve un operateur de la liste des op�rateurs
/**
* Enlève un operateur (=barman) de la liste des opérateurs
* du comptoir.
*
* @return true si succ�s, false sinon
*
* @param $id_utilisateur Id de l'utilisateur
* @return true si succès, false sinon
*/
function enleve_operateur ($id_etudiant)
function enleve_operateur ($id_utilisateur)
{
$id_etudiant = intval($id_etudiant); // On est jamais trop prudent, mme si c'est inutile
$id_utilisateur = intval($id_utilisateur); // On est jamais trop prudent, même si c'est inutile
if(!empty($this->operateurs))
foreach ( $this->operateurs as $key => $op )
if ( $id_etudiant == $op->id )
if ( $id_utilisateur == $op->id )
unset($this->operateurs[$key]);
if(isset($_SESSION["Comptoirs"][$this->id]["operateurs"]) && !empty($_SESSION["Comptoirs"][$this->id]["operateurs"]))
if(isset($_SESSION["Comptoirs"][$this->id]["operateurs"]) &&
!empty($_SESSION["Comptoirs"][$this->id]["operateurs"]))
foreach ( $_SESSION["Comptoirs"][$this->id]["operateurs"] as $key => $id_op )
if ( $id_etudiant == $id_op )
if ( $id_utilisateur == $id_op )
unset($_SESSION["Comptoirs"][$this->id]["operateurs"][$key]);
// met à jour l'entrée de tracking du barman
......@@ -374,25 +424,25 @@ class comptoir extends stdentity
"UPDATE `cpt_tracking` SET `closed_time`='".date("Y-m-d H:i:s")."'
WHERE `activity_time` > '".date("Y-m-d H:i:s",time()-intval(ini_get("session.gc_maxlifetime")))."'
AND `closed_time` IS NULL
AND `id_utilisateur` = '".mysql_real_escape_string($id_etudiant)."'
AND `id_utilisateur` = '".mysql_real_escape_string($id_utilisateur)."'
AND `id_comptoir` = '".mysql_real_escape_string($this->id)."'");