source: spip-zone/_plugins_/optionsproduits/trunk/inc/prix_option.php @ 111457

Last change on this file since 111457 was 111457, checked in by nicod@…, 9 months ago

Un formulaire générique pour ajouter n'importe quel objet avec ses options au panier (cf README.md)

  • Property svn:executable set to *
File size: 3.4 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) {
5        return;
6}
7
8/*
9 * Permet d'obtenir le prix HT d'un objet SPIP avec une option
10 * C'est le résultat de cette fonction qui est utilisée pour calculer le prix TTC.
11 *
12 * @param string $type_objet Le type de l'objet
13 * @param int $id_objet L'identifiant de l'objet
14 * @return float Retourne le prix HT de l'objet sinon 0
15 */
16function inc_prix_option_ht_dist($type_objet, $id_objet, $id_option, $arrondi = 2, $serveur = '') {
17        //debug('inc_prix_option_ht_dist');
18        $prix_ht = 0;
19        // Cherchons d'abord si l'objet existe bien
20        if ($type_objet
21                and $id_objet = intval($id_objet)
22                and include_spip('base/connect_sql')
23                and $type_objet = objet_type($type_objet)
24                and $table_sql = table_objet_sql($type_objet, $serveur)
25                and $cle_objet = id_table_objet($type_objet, $serveur)
26                and $ligne = sql_fetsel('*', $table_sql, "$cle_objet = $id_objet", '', '', '', '', $serveur)
27        ) {
28
29                // Existe-t-il une fonction précise pour le prix HT de ce type d'objet : prix_option_<objet>_ht() dans prix_option/<objet>.php
30                if ($fonction_ht = charger_fonction('ht', "prix_option/$type_objet", true)) {
31                        // On passe la ligne SQL en paramètre pour ne pas refaire la requête
32                        $prix_ht = $fonction_ht($type_objet, $id_objet, $id_option, $ligne);
33                } else {
34                        // S'il n'y a pas de fonction, regardons s'il existe des champs normalisés, ce qui évite d'écrire une fonction pour rien
35                        if ($ligne['prix_ht']) {
36                                $prix_ht = $ligne['prix_ht'];
37                        } elseif ($ligne['prix']) {
38                                $prix_ht = $ligne['prix'];
39                        }
40                        if ($id_option) {
41                                $prix_option_ht = sql_getfetsel(
42                                        'prix_option_objet',
43                                        'spip_options_liens',
44                                        array(
45                                                'id_option = ' . $id_option,
46                                                'objet = ' . sql_quote($type_objet),
47                                                'id_objet = ' . $id_objet,
48                                        )
49                                );
50                                $prix_ht        += $prix_option_ht;
51                        }
52                }
53        }
54
55        // Si on demande un arrondi, on le fait
56        if ($arrondi) {
57                $prix_ht = round($prix_ht, $arrondi);
58        }
59
60        return $prix_ht;
61}
62
63/*
64 * Permet d'obtenir le prix final TTC d'un objet SPIP avec une option
65 *
66 * @param string $type_objet Le type de l'objet
67 * @param int $id_objet L'identifiant de l'objet
68 * @return float Retourne le prix TTC de l'objet sinon 0
69 */
70function inc_prix_option_dist($type_objet, $id_objet, $id_option, $arrondi = 2, $serveur = '') {
71        //debug('inc_prix_option_dist');
72        include_spip('base/connect_sql');
73
74        // On va d'abord chercher le prix HT. On délègue le test de présence de l'objet dans cette fonction.
75        $fonction_prix_ht = charger_fonction('ht', 'inc/prix_option');
76        $type_objet       = objet_type($type_objet);
77        $prix             = $prix_ht = $fonction_prix_ht($type_objet, $id_objet, $id_option, 0, $serveur);
78
79        // On cherche maintenant s'il existe une personnalisation pour les taxes : prix_option_<objet>() dans prix_option/<objet>.php
80        if ($fonction_prix_objet = charger_fonction($type_objet, 'prix_option/', true)) {
81                $prix = $fonction_prix_objet($type_objet, $id_objet, $id_option, $prix_ht);
82        }
83
84        // Enfin on passe dans un pipeline pour pouvoir ajouter taxes, ristournes ou autres modifications
85        $prix = pipeline(
86                'prix_option',
87                array(
88                        'args' => array(
89                                'id_objet'   => $id_objet,
90                                'type_objet' => $type_objet,
91                                'prix_ht'    => $prix_ht,
92                                'prix'       => $prix,
93                        ),
94                        'data' => $prix,
95                )
96        );
97
98        // Si on demande un arrondi, on le fait
99        if ($arrondi) {
100                $prix = round($prix, $arrondi);
101        }
102
103        // Et c'est fini
104        return $prix;
105}
106
Note: See TracBrowser for help on using the repository browser.