source: spip-zone/_plugins_/reservation_evenement/trunk/inc/donnees_reservations_details.php @ 100805

Last change on this file since 100805 was 100805, checked in by abelass@…, 4 years ago

Permettre de réserver séparément les événement répétés

File size: 5.7 KB
Line 
1<?php
2if (!defined('_ECRIRE_INC_VERSION'))
3        return;
4
5function inc_donnees_reservations_details_dist($id_reservations_detail, $set) {
6        if (count($set) > 0) {
7                include_spip('inc/filtres');
8                $reservations_details = sql_fetsel('*', 'spip_reservations_details', 'id_reservations_detail=' . $id_reservations_detail);
9
10                $id_evenement = isset($set['id_evenement']) ? $set['id_evenement'] : $reservations_details['id_evenement'];
11                // Les données de l'évènenement
12
13                $evenement = sql_fetsel('*', 'spip_evenements', 'id_evenement=' . $id_evenement);
14
15                $date_debut = $evenement['date_debut'];
16                if (!$date_fin = sql_getfetsel('date_fin', 'spip_evenements', 'id_evenement_source=' . $id_evenement, '', 'date_debut DESC'))
17                        $date_fin = $evenement['date_fin'];
18
19                        // On établit les dates
20                if ($date_debut != $date_fin) {
21                        if (affdate($date_debut, 'd-m-Y') == affdate($date_fin, 'd-m-Y')) {
22                                $date = affdate($date_debut, 'd/m/Y') . ',' . affdate($date_debut, 'G:i') . '-' . affdate($date_fin, 'G:i');
23                        }
24                        else {
25                                $date = affdate($date_debut, 'd/m/Y') . '-' . affdate($date_fin, 'd/m/Y') . ', ' . affdate($date_debut, 'nom_jour') . ' ' . affdate($date_debut, 'G:i') . '-' . affdate($date_fin, 'G:i');
26                        }
27                }
28                else {
29                        if (affdate($date_debut, 'G:i') == '0:00')
30                                $date = affdate($date_debut, 'd/m/Y');
31                        else
32                                $date = affdate($date_debut, 'd/m/Y G:i');
33                }
34
35                // Les descriptif
36                $set['descriptif'] = supprimer_numero($evenement['titre']) . '  (' . $date . ')';
37                if (intval($evenement['places']))
38                        $set['places'] = $evenement['places'];
39
40                $set['quantite'] = _request('quantite') ? _request('quantite') : 1;
41                if (is_array($set['quantite']) and isset($set['quantite'][$id_evenement]))
42                        $set['quantite'] = ($set['quantite'][$id_evenement] > 0) ? $set['quantite'][$id_evenement] : 1;
43
44                $quantite = $set['quantite'];
45
46                // Si le prix n'est pas fournit, on essaye de le trouver
47                if (!isset($set['prix']) and !isset($set['prix_ht'])) {
48
49                        /* Existence d'un prix via le plugin Prix Objets http://plugins.spip.net/prix_objets.html */
50                        if ($prix_objets = test_plugin_actif('prix_objets')) {
51                                $fonction_prix = charger_fonction('prix', 'inc/');
52                                $fonction_prix_ht = charger_fonction('ht', 'inc/prix');
53
54                                // si le plugin déclinaison produit (http://plugins.spip.net/declinaisons.html)
55                                // est active il peut y avoir plusieurs prix par évenement
56                                if (test_plugin_actif('declinaisons')) {
57                                        $id_prix = isset($set['id_prix_objet']) ? $set['id_prix_objet'] : $reservations_details['id_prix_objet'];
58                                        $p = sql_fetsel('prix_ht,id_prix_objet,id_declinaison,code_devise', 'spip_prix_objets', 'id_prix_objet=' . $id_prix);
59
60                                        if ($p['id_declinaison'] > 0)
61                                                $set['descriptif'] .= ' - ' . supprimer_numero(sql_getfetsel('titre', 'spip_declinaisons', 'id_declinaison=' . $p['id_declinaison']));
62                                }
63                                // Sinon on cherche d'abord le prix attaché
64                                $p = prix_attache($id_evenement, $evenement['id_article'], $evenement['id_evenement_source']);
65
66                                if (isset($p)) {
67                                        $prix_ht = $quantite * $fonction_prix_ht('prix_objet', $p['id_prix_objet']);
68                                        $prix = $quantite * $fonction_prix('prix_objet', $p['id_prix_objet']);
69                                        if ($prix_ht)
70                                                $taxe = round(($prix - $prix_ht) / $prix_ht, 3);
71                                        $set['prix_ht'] = $prix_ht;
72                                        $set['taxe'] = $taxe;
73                                        $set['id_prix_objet'] = $p['id_prix_objet'];
74                                        // Si pas de devise fournit par le contexte, on prend celle de prix_objets
75                                        if (!isset($set['devise']))
76                                                $set['devise'] = $p['code_devise'];
77                                }
78                        }
79                        // Sinon voir s'il y a un champ prix dans la table evenement
80                        elseif (intval($evenement['prix']) or intval($evenement['prix_ht'])) {
81                                $set = etablir_prix($id_evenement, 'evenement', $evenement, $set, $quantite);
82                        }
83                        // Sinon voir s'il y a un champ prix dans la table articles
84                        elseif ($article = sql_fetsel('*', 'spip_articles', 'id_article=' . $evenement['id_article'])) {
85                                $set = etablir_prix($evenement['id_article'], 'article', $article, $set, $quantite);
86                        }
87                }
88        }
89        return $set;
90}
91function etablir_prix($id, $objet, $datas, $set, $quantite) {
92        if ($fonction_prix = charger_fonction('prix', 'inc/', true)) {
93                $prix = $fonction_prix($objet, $id);
94        }
95        else
96                $prix = $datas['prix'];
97
98        if ($fonction_prix_ht = charger_fonction('ht', 'inc/prix', true)) {
99                $prix_ht = $fonction_prix_ht($objet, $id);
100        }
101        elseif (intval($datas['prix_ht']))
102                $prix_ht = $datas['prix_ht'];
103
104        if ($prix_ht) {
105                $prix = $quantite * $prix;
106                $prix_ht = $quantite * $prix_ht;
107                if ($prix_ht > 0) {
108                        $taxe = round(($prix - $prix_ht) / $prix_ht, 3);
109                }
110                $set['prix_ht'] = $prix_ht;
111                $set['taxe'] = $taxe;
112        }
113        else
114                $set['prix'] = $quantite * $prix;
115
116        return $set;
117}
118
119/**
120 * Etablir le prix de l'objet
121 *
122 * @param int $id_evenement
123 *         Identifiant de l'événement.
124 * @param int $id_article
125 *         Identifiant de l'article.
126 * @param int $id_evenement_source
127 *         Identifiant source de l'événement
128 * @return array Les données du prix.
129 */
130function prix_attache($id_evenement, $id_article, $id_evenement_source) {
131
132        // Etablir le prixde l'événement sinon de l'article.
133        if (!$p = sql_fetsel(
134                        'prix_ht,id_prix_objet,code_devise',
135                        'spip_prix_objets',
136                        'objet="evenement" AND id_objet=' . $id_evenement)) {
137                $p = sql_fetsel(
138                                'prix_ht,id_prix_objet,code_devise',
139                                'spip_prix_objets',
140                                'objet="article" AND id_objet=' . $id_article);
141        }
142
143        // Si pas de prix, prendre l'événement source.
144        if (!$p and $id_evenement_source != 0) {
145                $evenement_source = sql_fetsel(
146                                'id_evenement, id_article, id_evenement_source',
147                                'spip_evenements',
148                                'id_evenement=' . $id_evenement_source);
149                if ($evenement_source) {
150                        $p = prix_attache(
151                                        $evenement_source['id_evenement'],
152                                        $evenement_source['id_article'],
153                                        $evenement_source['id_evenement_source']);
154                }
155        }
156        return $p;
157}
Note: See TracBrowser for help on using the repository browser.