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

Last change on this file since 101661 was 101661, checked in by abelass@…, 4 years ago
  • bug détection bon prix avec déclinaisons
  • garder les champs extras modifiés dans la session
  • mieux détecter les noms de statuts
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                                        if ($p['id_declinaison'] > 0)
60                                                $set['descriptif'] .= ' - ' . supprimer_numero(sql_getfetsel('titre', 'spip_declinaisons', 'id_declinaison=' . $p['id_declinaison']));
61                                }
62                                // Sinon on cherche d'abord le prix attaché
63                                else {
64                                        $p = prix_attache($id_evenement, $evenement['id_article'], $evenement['id_evenement_source']);
65                                }
66
67                                if (isset($p)) {
68                                        $prix_ht = $quantite * $fonction_prix_ht('prix_objet', $p['id_prix_objet']);
69                                        $prix = $quantite * $fonction_prix('prix_objet', $p['id_prix_objet']);
70                                        if ($prix_ht)
71                                                $taxe = round(($prix - $prix_ht) / $prix_ht, 3);
72                                        $set['prix_ht'] = $prix_ht;
73                                        $set['taxe'] = $taxe;
74                                        $set['id_prix_objet'] = $p['id_prix_objet'];
75                                        // Si pas de devise fournit par le contexte, on prend celle de prix_objets
76                                        if (!isset($set['devise']))
77                                                $set['devise'] = $p['code_devise'];
78                                }
79                        }
80                        // Sinon voir s'il y a un champ prix dans la table evenement
81                        elseif (intval($evenement['prix']) or intval($evenement['prix_ht'])) {
82                                $set = etablir_prix($id_evenement, 'evenement', $evenement, $set, $quantite);
83                        }
84                        // Sinon voir s'il y a un champ prix dans la table articles
85                        elseif ($article = sql_fetsel('*', 'spip_articles', 'id_article=' . $evenement['id_article'])) {
86                                $set = etablir_prix($evenement['id_article'], 'article', $article, $set, $quantite);
87                        }
88                }
89        }
90        return $set;
91}
92function etablir_prix($id, $objet, $datas, $set, $quantite) {
93        if ($fonction_prix = charger_fonction('prix', 'inc/', true)) {
94                $prix = $fonction_prix($objet, $id);
95        }
96        else
97                $prix = $datas['prix'];
98
99        if ($fonction_prix_ht = charger_fonction('ht', 'inc/prix', true)) {
100                $prix_ht = $fonction_prix_ht($objet, $id);
101        }
102        elseif (intval($datas['prix_ht']))
103                $prix_ht = $datas['prix_ht'];
104
105        if ($prix_ht) {
106                $prix = $quantite * $prix;
107                $prix_ht = $quantite * $prix_ht;
108                if ($prix_ht > 0) {
109                        $taxe = round(($prix - $prix_ht) / $prix_ht, 3);
110                }
111                $set['prix_ht'] = $prix_ht;
112                $set['taxe'] = $taxe;
113        }
114        else
115                $set['prix'] = $quantite * $prix;
116
117        return $set;
118}
119
120/**
121 * Etablir le prix de l'objet
122 *
123 * @param int $id_evenement
124 *         Identifiant de l'événement.
125 * @param int $id_article
126 *         Identifiant de l'article.
127 * @param int $id_evenement_source
128 *         Identifiant source de l'événement
129 * @return array Les données du prix.
130 */
131function prix_attache($id_evenement, $id_article, $id_evenement_source) {
132
133        // Etablir le prixde l'événement sinon de l'article.
134        if (!$p = sql_fetsel(
135                        'prix_ht,id_prix_objet,code_devise',
136                        'spip_prix_objets',
137                        'objet="evenement" AND id_objet=' . $id_evenement)) {
138                $p = sql_fetsel(
139                                'prix_ht,id_prix_objet,code_devise',
140                                'spip_prix_objets',
141                                'objet="article" AND id_objet=' . $id_article);
142        }
143
144        // Si pas de prix, prendre l'événement source.
145        if (!$p and $id_evenement_source != 0) {
146                $evenement_source = sql_fetsel(
147                                'id_evenement, id_article, id_evenement_source',
148                                'spip_evenements',
149                                'id_evenement=' . $id_evenement_source);
150                if ($evenement_source) {
151                        $p = prix_attache(
152                                        $evenement_source['id_evenement'],
153                                        $evenement_source['id_article'],
154                                        $evenement_source['id_evenement_source']);
155                }
156        }
157        return $p;
158}
Note: See TracBrowser for help on using the repository browser.