repare le telepaiement et lie les evenements aux telepaiements
authorPascal Corpet <pascal.corpet@m4x.org>
Sun, 5 Jun 2005 09:52:51 +0000 (09:52 +0000)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Thu, 26 Jun 2008 21:29:07 +0000 (23:29 +0200)
git-archimport-id: opensource@polytechnique.org--2005/platal--mainline--0.9--patch-681

htdocs.net/groupe/evenements.php
htdocs.net/groupe/evt-admin.php
htdocs.net/groupe/evt-detail.php
htdocs.net/groupe/telepaiement.php
templates/xnet/groupe/evt-admin.tpl
templates/xnet/groupe/form_evenement.tpl
templates/xnet/groupe/telepaiement.tpl
upgrade/0.9.7/00_xnet.sql

index ee8f65a..06e4f59 100644 (file)
@@ -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(
index 848ceb8..446f670 100644 (file)
@@ -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();
 
index c6bdbbc..b46f634 100644 (file)
@@ -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);               
 }
 
index 47cb834..94204cb 100644 (file)
@@ -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);
index 1737a38..040b4e2 100644 (file)
 
 {if $moments}
 <p class="center">
-{iterate from=$moments item=m}
-[<a href="{$smarty.server.PHP_SELF}?eid={$m.eid}&item_id={$m.item_id}" {if $smarty.request.item_id eq $m.item_id || ($m.item_id eq 1 && !$smarty.request.item_id)}class="erreur"{/if}>{$m.titre}</a>]
-{/iterate}
+[<a href="{$smarty.server.PHP_SELF}?eid={$smarty.request.eid}"{if !$smarty.request.item_id}class="erreur"{/if}>tout</a>]
+{foreach from=$moments item=m}
+[<a href="{$smarty.server.PHP_SELF}?eid={$m.eid}&item_id={$m.item_id}" {if $smarty.request.item_id eq $m.item_id}class="erreur"{/if}>{$m.titre}</a>]
+{/foreach}
 </p>
 {/if}
 
@@ -41,14 +42,24 @@ L'
 {/foreach}
 </p>
 
-<table summary="participants a l'evenement" class="tiny">
+<table summary="participants a l'evenement" class="{if $tout}large{else}tiny{/if}">
   <tr>
     <th>Prénom NOM</th>
     <th>Promo</th>
     <th>Info</th>
+    {if $tout}
+      {foreach from=$moments item=m}
+        <th>{$m.titre}</th>
+      {/foreach}
+      {if $admin && $money}
+        <th>Montant</th>
+        <th>Payé</th>
+      {/if}
+    {else}
     <th>Nombre</th>
+    {/if}
   </tr>
-  {iterate from=$ann item=m}
+  {foreach from=$ann item=m}
   <tr style="background:#d0c198;">
     <td>{if $m.femme}&bull;{/if}{$m.prenom} {$m.nom}</td>
     <td>{$m.promo}</td>
@@ -61,11 +72,21 @@ L'
       <a href="mailto:{$m.email}"><img src="{rel}/images/mail.png" alt="mail"></a>
       {/if}
     </td>
+    {if $tout}
+      {foreach from=$moments item=i}
+        <td>{$m[$i.item_id]}</td>
+      {/foreach}
+      {if $admin && $money}
+        <td {if $m.montant > $m.paid}class="erreur"{/if}>{$m.montant}</td>
+        <td>{$m.paid}</td>
+      {/if}
+    {else}
     <td>
       {$m.nb}
     </td>
+    {/if}
   </tr>
-  {/iterate}
+  {/foreach}
 </table>
 
 <p class="descr">
@@ -74,4 +95,36 @@ L'
 {/foreach}
 </p>
 
+{if $admin}
+<hr />
+<p class="decr">
+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.<br />
+<form action="{$smarty.server.PHP_SELF}" method="post">
+<input type="hidden" name="eid" value="{$smarty.request.eid}" />
+Mail: <input name="mail" size="20" />
+<input type="hidden" name="adm" value="nbs" />
+{if $smarty.request.item_id}
+  <input type="hidden" name="item_id" value="{$smarty.request.item_id}" />
+{$evt.titre}: <input name="nb{$smarty.request.item_id}" size="1" value="1" />
+{else}
+{foreach from=$moments item=m}
+  {$m.titre}: <input name="nb{$m.item_id}" size="1" value="1"/>
+{/foreach}
+{/if}
+<input type="submit" />
+</form>
+</p>
+
+<hr />
+<p class="decr">
+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.
+<form action="{$smarty.server.PHP_SELF}" method="post">
+<input type="hidden" name="eid" value="{$smarty.request.eid}" />
+<input type="hidden" name="adm" value="prix" />
+Mail: <input name="mail" size="20" />
+montant: <input name="montant" size="3" value="0,00" /> &#8364;
+<input type="submit" />
+</p>
+{/if}
+
 {* vim:set et sw=2 sts=2 sws=2: *}
index 655e7d9..6d1cd7a 100644 (file)
         <input type="radio" name="show_participants" value="0" {if !$evt.show_participants}checked{/if}/> non
       </td>
     </tr>
+    <tr>
+      <td>Référence de paiement :
+      </td>
+      <td>
+      <select name="paiement">
+       <option value=''>Pas de paiement déclaré</option>
+       {html_options options=$paiements selected=$evt.paiement_id}
+      </select>
+      </td>
+    </tr>
   </table>
   {foreach from=$moments item=i}
   {assign var='moment' value=$items[$i]}
index 4b97cf4..44df9c0 100644 (file)
@@ -26,7 +26,7 @@
 Voici la liste des paiements en ligne possible pour le groupe {$asso.nom}
 </p>
 
-{foreach from=$pitres item=t}
+{foreach from=$titres item=p}
 <a href="https://www.polytechnique.org/paiement/?ref={$p.id}">{$p.text}</a>
 {if $trans[$p.id]}
 <table>
@@ -43,6 +43,7 @@ Voici la liste des paiements en ligne possible pour le groupe {$asso.nom}
     <td>{$p.montant}</td>
     {/foreach}
   </tr>
+</table>
 {/if}
 {foreachelse}
 <p class="descr">
index 402e94e..22c9e6c 100644 (file)
@@ -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;