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}

- +
+ {if $tout} + {foreach from=$moments item=m} + + {/foreach} + {if $admin && $money} + + + {/if} + {else} + {/if} - {iterate from=$ann item=m} + {foreach from=$ann item=m} @@ -61,11 +72,21 @@ L' mail {/if} + {if $tout} + {foreach from=$moments item=i} + + {/foreach} + {if $admin && $money} + + + {/if} + {else} + {/if} - {/iterate} + {/foreach}
Prénom NOM Promo Info{$m.titre}MontantPayéNombre
{if $m.femme}•{/if}{$m.prenom} {$m.nom} {$m.promo}{$m[$i.item_id]} $m.paid}class="erreur"{/if}>{$m.montant}{$m.paid} {$m.nb}

@@ -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.
+

+ +Mail: + +{if $smarty.request.item_id} + +{$evt.titre}: +{else} +{foreach from=$moments item=m} + {$m.titre}: +{/foreach} +{/if} + +
+

+ +
+

+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. +

+ + +Mail: +montant: € + +

+{/if} + {* vim:set et sw=2 sts=2 sws=2: *} diff --git a/templates/xnet/groupe/form_evenement.tpl b/templates/xnet/groupe/form_evenement.tpl index 655e7d9..6d1cd7a 100644 --- a/templates/xnet/groupe/form_evenement.tpl +++ b/templates/xnet/groupe/form_evenement.tpl @@ -83,6 +83,16 @@ non + + Référence de paiement : + + + + + {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} {/foreach} +
{$p.montant}
{/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