From d12d0f240cd7d67b2c7164e1b3e0e836303e54bf Mon Sep 17 00:00:00 2001
From: Pascal Corpet
Date: Sun, 5 Jun 2005 09:52:51 +0000
Subject: [PATCH] repare le telepaiement et lie les evenements aux
telepaiements
git-archimport-id: opensource@polytechnique.org--2005/platal--mainline--0.9--patch-681
---
htdocs.net/groupe/evenements.php | 14 ++--
htdocs.net/groupe/evt-admin.php | 129 +++++++++++++++++++++++++++----
htdocs.net/groupe/evt-detail.php | 2 +-
htdocs.net/groupe/telepaiement.php | 2 +-
templates/xnet/groupe/evt-admin.tpl | 65 ++++++++++++++--
templates/xnet/groupe/form_evenement.tpl | 10 +++
templates/xnet/groupe/telepaiement.tpl | 3 +-
upgrade/0.9.7/00_xnet.sql | 5 +-
8 files changed, 197 insertions(+), 33 deletions(-)
diff --git a/htdocs.net/groupe/evenements.php b/htdocs.net/groupe/evenements.php
index ee8f65a..06e4f59 100644
--- a/htdocs.net/groupe/evenements.php
+++ b/htdocs.net/groupe/evenements.php
@@ -22,7 +22,7 @@ if (may_update() && Post::get('intitule')) {
{?},
{?}, {?}, {?})",
$eid, $globals->asso('id'), Session::get('uid'), Post::get('intitule'),
- NULL, Post::get('descriptif'),
+ Post::get('paiement')?Post::get('paiement'):NULL, Post::get('descriptif'),
Post::get('deb_Year')."-".Post::get('deb_Month')."-".Post::get('deb_Day')." ".Post::get('deb_Hour').":".Post::get('deb_Minute').":00",
Post::get('fin_Year')."-".Post::get('fin_Month')."-".Post::get('fin_Day')." ".Post::get('fin_Hour').":".Post::get('fin_Minute').":00",
Post::get('membres_only'), Post::get('advertise'), Post::get('show_participants'));
@@ -58,12 +58,18 @@ if (may_update() && Env::has('sup') && $eid) {
$globals->xdb->execute("DELETE FROM groupex.evenements_participants WHERE eid = {?}", $eid);
}
-if (may_update() && Env::has('add'))
+if (may_update() && (Env::has('add') || (Env::has('mod') && $eid))) {
$page->assign('get_form', true);
+ $res = $globals->xdb->iterator
+ ("SELECT id, text FROM {$globals->money->mpay_tprefix}paiements WHERE asso_id = {?}", $globals->asso('id'));
+ $paiements = array();
+ while ($a = $res->next()) $paiements[$a['id']] = $a['text'];
+ $page->assign('paiements', $paiements);
+}
if (may_update() && Env::has('mod') && $eid) {
$res = $globals->xdb->query(
- "SELECT eid, intitule, descriptif, debut, fin, membres_only, advertise, show_participants
+ "SELECT eid, intitule, descriptif, debut, fin, membres_only, advertise, show_participants, paiement_id
FROM groupex.evenements
WHERE eid = {?}", $eid);
$evt = $res->fetchOneAssoc();
@@ -78,8 +84,6 @@ if (may_update() && Env::has('mod') && $eid) {
$items = array();
while ($item = $res->next()) $items[$item['item_id']] = $item;
$page->assign('items', $items);
-
- $page->assign('get_form', true);
} else {
$evenements = $globals->xdb->iterator(
diff --git a/htdocs.net/groupe/evt-admin.php b/htdocs.net/groupe/evt-admin.php
index 848ceb8..446f670 100644
--- a/htdocs.net/groupe/evt-admin.php
+++ b/htdocs.net/groupe/evt-admin.php
@@ -3,16 +3,85 @@ require 'xnet.inc.php';
define('NB_PER_PAGE', 25);
+// check this event is from this asso
+if (Env::get('eid')) {
+ $res = $globals->xdb->query("SELECT eid FROM groupex.evenements WHERE eid = {?} AND asso_id = {?}", Env::get('eid'), $globals->asso('id'));
+ $eid = $res->fetchOneCell();
+}
+
+$res = $globals->xdb->iterator(
+ "SELECT eid, item_id, titre, montant
+ FROM groupex.evenements_items
+ WHERE eid = {?}",
+ $eid);
+$moments = array();
+while ($m = $res->next()) $moments[$m['item_id']] = $m;
+
+if (may_update() && Env::get('adm') && Env::get('mail') && $eid) {
+ if (strpos(Env::get('mail'), '@') === false)
+ $res = $globals->xdb->query(
+ "SELECT m.uid
+ FROM groupex.membres AS m
+ INNER JOIN aliases AS a ON (a.id = m.uid)
+ WHERE a.alias = {?}",
+ Env::get('mail'));
+ else
+ $res = $globals->xdb->query(
+ "SELECT m.uid
+ FROM groupex.membres AS m
+ WHERE m.email = {?} AND m.asso_id = {?}",
+ Env::get('mail'), $globals->asso('id'));
+ $member = $res->fetchOneCell();
+}
+
+if (may_update() && Env::get('adm') == 'prix' && $member && $eid) {
+ $globals->xdb->execute("UPDATE groupex.evenements_participants SET paid = IF(paid + {?} > 0, paid + {?}, 0) WHERE uid = {?} AND eid = {?}",
+ strtr(Env::get('montant'), ',', '.'),
+ strtr(Env::get('montant'), ',', '.'),
+ $member, $eid);
+}
+
+if (may_update() && Env::get('adm') == 'nbs' && $member && $eid) {
+ $res = $globals->xdb->query("SELECT paid FROM groupex.evenements_participants WHERE uid = {?} AND eid = {?}", $member, $eid);
+ $paid = $res->fetchOneCell();
+ foreach ($moments as $m) if (Env::has('nb'.$m['item_id'])) {
+ print_r($m);
+ $nb = Env::getInt('nb'.$m['item_id'], 0);
+ if ($nb < 0) $nb = 0;
+ if ($nb) {
+ if (!$paid) $paid = 0;
+ $globals->xdb->execute("REPLACE INTO groupex.evenements_participants VALUES ({?}, {?}, {?}, {?}, {?})",
+ $eid, $member, $m['item_id'], $nb, $paid);
+ }
+ else
+ $globals->xdb->execute("DELETE FROM groupex.evenements_participants WHERE uid = {?} AND eid = {?} AND item_id = {?}", $member, $eid, $m['item_id']);
+ }
+}
+
$res = $globals->xdb->query(
- "SELECT SUM(nb) AS nb_tot, e.intitule, ei.titre, e.show_participants
+ "SELECT SUM(nb) AS nb_tot, e.intitule, ei.titre, e.show_participants, e.paiement_id
FROM groupex.evenements AS e
INNER JOIN groupex.evenements_items AS ei ON (e.eid = ei.eid)
LEFT JOIN groupex.evenements_participants AS ep ON(e.eid = ep.eid AND ei.item_id = ep.item_id)
- WHERE e.eid = {?} AND ei.item_id = {?} AND asso_id = {?}
- GROUP BY e.eid",
- Env::get('eid'), Env::getInt('item_id', 1), $globals->asso('id'));
+ WHERE e.eid = {?} AND ei.item_id = {?}
+ GROUP BY ei.item_id",
+ $eid, Env::getInt('item_id', 1));
$evt = $res->fetchOneAssoc();
+
+if (!Env::has('item_id')) {
+ $res = $globals->xdb->query("SELECT MAX(nb)
+ FROM groupex.evenements AS e
+ INNER JOIN groupex.evenements_items AS ei ON (e.eid = ei.eid)
+ LEFT JOIN groupex.evenements_participants AS ep ON(e.eid = ep.eid AND ei.item_id = ep.item_id)
+ WHERE e.eid = {?}
+ GROUP BY ep.uid",
+ $eid);
+ $evt['nb_tot'] = array_sum($res->fetchColumn());
+ $evt['titre'] = '';
+ $evt['item_id'] = 0;
+}
+
if (!$evt['intitule'])
header("Location: evenements.php");
@@ -21,25 +90,25 @@ if ($evt['show_participants'])
else
new_groupadmin_page('xnet/groupe/evt-admin.tpl');
+$page->assign('admin', may_update());
$page->assign('evt', $evt);
-$page->assign('url_page', Env::get('PHP_SELF')."?eid=".Env::get('eid')."&item_id=".Env::getInt('item_id', 1));
+$page->assign('url_page', Env::get('PHP_SELF')."?eid=".$eid.(Env::has('item_id')?("&item_id=".Env::getInt('item_id')):''));
+$page->assign('tout', !Env::has('item_id'));
-$res = $globals->xdb->iterator(
- "SELECT eid, item_id, titre
- FROM groupex.evenements_items
- WHERE eid = {?}",
- Env::get('eid'));
-if ($res->total() > 1) $page->assign('moments', $res);
+if (count($moments) > 1) $page->assign('moments', $moments);
+foreach ($moments as $m) if ($m['montant'] > 0) $money = true;
+if ($money) $page->assign('money', true);
$tri = (Env::get('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo');
+$whereitemid = Env::has('item_id')?('AND ep.item_id = '.Env::getInt('item_id', 1)):'';
$res = $globals->xdb->iterRow(
'SELECT UPPER(SUBSTRING(IF(m.origine="X",IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom), 1, 1)), COUNT(IF(m.origine="X",u.nom,m.nom))
FROM groupex.evenements_participants AS ep
INNER JOIN groupex.evenements AS e ON (ep.eid = e.eid)
INNER JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
LEFT JOIN auth_user_md5 AS u ON ( u.user_id = m.uid )
- WHERE e.asso_id = {?} AND ep.eid = {?} AND ep.item_id = {?}
- GROUP BY UPPER(SUBSTRING(IF(m.origine="X",u.nom,m.nom), 1, 1))', $globals->asso('id'), Env::get('eid'), Env::getInt('moment', 1));
+ WHERE ep.eid = {?} '.$whereitemid.'
+ GROUP BY UPPER(SUBSTRING(IF(m.origine="X",u.nom,m.nom), 1, 1))', $eid);
$alphabet = array();
$nb_tot = 0;
@@ -78,20 +147,46 @@ $ann = $globals->xdb->iterator(
IF(m.origine='X',FIND_IN_SET('femme', u.flags),0) AS femme,
m.perms='admin' AS admin,
m.origine='X' AS x,
- ep.nb
+ m.uid,
+ ep.nb, ep.item_id, ep.paid
FROM groupex.evenements_participants AS ep
INNER JOIN groupex.evenements AS e ON (ep.eid = e.eid)
INNER JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
LEFT JOIN auth_user_md5 AS u ON ( u.user_id = m.uid )
LEFT JOIN aliases AS a ON ( a.id = m.uid AND a.type='a_vie' )
- WHERE e.asso_id = {?} AND ep.eid = {?} AND ep.item_id = {?} $ini
+ WHERE ep.eid = {?} $whereitemid $ini
ORDER BY $tri
LIMIT {?}, {?}",
- $globals->asso('id'), Env::get('eid'), Env::getInt('item_id', 1),
+ $eid,
$ofs*NB_PER_PAGE, NB_PER_PAGE);
+$tab = array();
+$user = 0;
+while ($a = $ann->next()) {
+ if ($user != $a['uid']) {
+ if ($user) $tab[] = $u;
+ $u = $a;
+ $user = $a['uid'];
+ $u['montant'] = 0;
+ if ($money && $evt['paiement_id'] && may_update() && !Env::has('item_id')) {
+ $res = $globals->xdb->query(
+ "SELECT montant
+ FROM {$globals->money->mpay_tprefix}transactions AS t
+ WHERE ref = {?} AND uid = {?}",
+ $evt['paiement_id'], $user);
+ $montants = $res->fetchColumn();
+ foreach ($montants as $m) {
+ $p = strtr(substr($m, 0, strpos($m, "EUR")), ",", ".");
+ $u['paid'] += trim($p);
+ }
+ }
+ }
+ $u[$a['item_id']] = $a['nb'];
+ $u['montant'] += $moments[$a['item_id']]['montant']*$a['nb'];
+}
+if ($user) $tab[] = $u;
-$page->assign('ann', $ann);
+$page->assign('ann', $tab);
$page->run();
diff --git a/htdocs.net/groupe/evt-detail.php b/htdocs.net/groupe/evt-detail.php
index c6bdbbc..b46f634 100644
--- a/htdocs.net/groupe/evt-detail.php
+++ b/htdocs.net/groupe/evt-detail.php
@@ -22,7 +22,7 @@ for ($i=1; Env::has('item_id'.$i); $i++) {
else
$globals->xdb->execute(
"DELETE FROM groupex.evenements_participants
- WHERE eid = {?}, uid = {?}, item_id = {?}",
+ WHERE eid = {?} AND uid = {?} AND item_id = {?}",
Env::get("eid"), Session::get("uid"), $j);
}
diff --git a/htdocs.net/groupe/telepaiement.php b/htdocs.net/groupe/telepaiement.php
index 47cb834..94204cb 100644
--- a/htdocs.net/groupe/telepaiement.php
+++ b/htdocs.net/groupe/telepaiement.php
@@ -18,7 +18,7 @@ if (may_update()) {
INNER JOIN auth_user_md5 AS u ON ( t.uid = u.user_id )
INNER JOIN aliases AS a ON ( t.uid = a.id AND a.type='a_vie' )
WHERE ref = {?}
- ORDER BY timestamp DESC", $id);
+ ORDER BY timestamp DESC", $pid);
$trans[$pid] = $res->fetchAllAssoc();
}
$page->assign('trans', $trans);
diff --git a/templates/xnet/groupe/evt-admin.tpl b/templates/xnet/groupe/evt-admin.tpl
index 1737a38..040b4e2 100644
--- a/templates/xnet/groupe/evt-admin.tpl
+++ b/templates/xnet/groupe/evt-admin.tpl
@@ -24,9 +24,10 @@
{if $moments}
-{iterate from=$moments item=m}
-[{$m.titre}]
-{/iterate}
+[tout]
+{foreach from=$moments item=m}
+[{$m.titre}]
+{/foreach}
{/if}
@@ -41,14 +42,24 @@ L'
{/foreach}
-
+
Prénom NOM |
Promo |
Info |
+ {if $tout}
+ {foreach from=$moments item=m}
+ {$m.titre} |
+ {/foreach}
+ {if $admin && $money}
+ Montant |
+ Payé |
+ {/if}
+ {else}
Nombre |
+ {/if}
- {iterate from=$ann item=m}
+ {foreach from=$ann item=m}
{if $m.femme}•{/if}{$m.prenom} {$m.nom} |
{$m.promo} |
@@ -61,11 +72,21 @@ L'
{/if}
+ {if $tout}
+ {foreach from=$moments item=i}
+ {$m[$i.item_id]} |
+ {/foreach}
+ {if $admin && $money}
+ $m.paid}class="erreur"{/if}>{$m.montant} |
+ {$m.paid} |
+ {/if}
+ {else}
{$m.nb}
|
+ {/if}
- {/iterate}
+ {/foreach}
@@ -74,4 +95,36 @@ L'
{/foreach}
+{if $admin}
+
+
+En tant qu'administrateur, tu peux fixer la venue (accompagnée ou pas) d'un des membres du groupe. Donne ici son mail (complet pour les extérieurs, sans @polytechnique.org pour les X), ainsi que le nombre de participants.
+
+
+
+
+
+En tant qu'administrateur, tu peux entrer un paiement reçu par une autre source que le télépaiement du site X.org. Ce montant s'ajoutera aux montants déjà entrés. Si tu as fais une erreur, tu peux entrer un montant négatif.
+
{foreach from=$moments item=i}
{assign var='moment' value=$items[$i]}
diff --git a/templates/xnet/groupe/telepaiement.tpl b/templates/xnet/groupe/telepaiement.tpl
index 4b97cf4..44df9c0 100644
--- a/templates/xnet/groupe/telepaiement.tpl
+++ b/templates/xnet/groupe/telepaiement.tpl
@@ -26,7 +26,7 @@
Voici la liste des paiements en ligne possible pour le groupe {$asso.nom}
-{foreach from=$pitres item=t}
+{foreach from=$titres item=p}
{$p.text}
{if $trans[$p.id]}
@@ -43,6 +43,7 @@ Voici la liste des paiements en ligne possible pour le groupe {$asso.nom}
{$p.montant} |
{/foreach}
+
{/if}
{foreachelse}
diff --git a/upgrade/0.9.7/00_xnet.sql b/upgrade/0.9.7/00_xnet.sql
index 402e94e..22c9e6c 100644
--- a/upgrade/0.9.7/00_xnet.sql
+++ b/upgrade/0.9.7/00_xnet.sql
@@ -1,4 +1,5 @@
ALTER TABLE groupex.asso ADD `pub` ENUM( 'public', 'private' ) DEFAULT 'public' NOT NULL AFTER `ax` ;
-ALTER TABLE evenements_participants ADD PRIMARY KEY (eid, item_id, uid);
-ALTER TABLE evenements ADD `show_participants` TINYINT( 1 ) NOT NULL ;
+ALTER TABLE groupex.evenements_participants ADD PRIMARY KEY (eid, item_id, uid);
+ALTER TABLE groupex.evenements ADD `show_participants` TINYINT( 1 ) NOT NULL ;
+ALTER TABLE groupex.evenements_participants ADD paid FLOAT DEFAULT 0 NOT NULL;
--
2.1.4