source: spip-zone/_plugins_/commandes/trunk/prix/commandes_detail.php

Last change on this file was 104785, checked in by cedric@…, 17 months ago

ajout d'un champ reduction sur les lignes de details d'une commande
Il est par defaut a 0 le fonctionnement actuel reste donc inchangé.

Si il est renseigné, sa valeur est prise en compte dans le calcul du prix de chaque detail et dans le prix total de la commande.
Dans le back-office le contenu d'une commande affiche bien la colonne des reduction si il y en a au moins une (sinon elle est masquee pour ne pas alourdir l'affichage).
+ on cree un filtre commandes_afficher_prix_detaille_abbr() charger d'afficher le detail du calcul du prix de chaque ligne quand il est non trivial, car avec quantite, reduction et taxe cela devenait complique de gerer dans dans le squelette
Les squelettes public d'affichage du detail d'une commande ne sont pas modifies, ils n'affichent donc pas la valeur de la reduction ligne par ligne, mais le prix ligne par ligne est bien le bon, qui tient compte de la reduction

File size: 2.5 KB
Line 
1<?php
2/**
3 * Fonctions de calcul des prix d'une commande et de ses détails
4 *
5 * @plugin     Commandes
6 * @copyright  2014
7 * @author     Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
8 * @licence    GPL 3
9 * @package    SPIP\Commandes\Prix
10 */
11
12// Sécurité
13if (!defined('_ECRIRE_INC_VERSION')) return;
14
15/**
16 * Permet d'obtenir le prix HT d'un détail d'une commande.
17 *
18 * C'est le résultat de cette fonction qui est utilisée pour calculer le prix TTC.
19 * Prix HT = quantité * prix unitaire HT
20 *
21 * @param int $id_commandes_detail
22 *     Identifiant du détail (paramètre inutilisé)
23 * @param array $ligne
24 *     Couples champs / valeurs décrivant le détail
25 *     Il faut au moins $ligne['quantite'] et $ligne['prix_unitaire_ht']
26 * @return float
27 *     Retourne le prix HT du détail sinon 0
28 */
29function prix_commandes_detail_ht_dist($id_commandes_detail, $ligne){
30        // La quantité "0" ne voulant rien dire, cela signifie que ce n'est pas un produit quantifiable
31        // mais des lignes en plus comme les frais de livraison, des frais de dossier, des déductions, etc
32        $prix = $ligne['prix_unitaire_ht'];
33        if ($ligne['quantite'] > 0) $prix = $ligne['quantite'] * $ligne['prix_unitaire_ht'];
34
35        if (isset($ligne['reduction'])
36          and ($reduction = floatval($ligne['reduction']))>0) {
37                $reduction = min($reduction, 1.0); // on peut pas faire une reduction de plus de 100%;
38                $prix = $prix * (1.0 - $reduction);
39        }
40
41        return $prix;
42}
43
44/**
45 * Permet d'obtenir le prix final TTC d'un détail d'une commande
46 *
47 * Prix TTC = prix HT + (prix HT * taxe)
48 *
49 * @param int $id_commandes_detail
50 *     Identifiant du détail
51 * @param float $prix_ht
52 *     Prix HT du détail
53 * @return float
54 *     Retourne le prix TTC du détail sinon 0
55 */
56function prix_commandes_detail_dist($id_commandes_detail, $prix_ht){
57        static $taxe_applicable = array();
58        $prix = $prix_ht;
59
60        if (!function_exists('sql_fetsel')) {
61                include_spip('base/abstract_sql');
62        }
63        $detail = sql_fetsel('*', 'spip_commandes_details', 'id_commandes_detail = '.intval($id_commandes_detail));
64
65        if (!isset($taxe_applicable[$detail['id_commande']])) {
66                $taxe_applicable[$detail['id_commande']] = true;
67                $taxe_exoneree_raison = sql_getfetsel('taxe_exoneree_raison', 'spip_commandes', 'id_commande='.intval($detail['id_commande']));
68                if (strlen($taxe_exoneree_raison)) {
69                        $taxe_applicable[$detail['id_commande']] = false;
70                }
71        }
72
73        if (
74                $taxe_applicable[$detail['id_commande']]
75                and ($taxe = $detail['taxe']) !== null
76        ){
77                $prix += $prix*$taxe;
78        }
79
80        return $prix;
81}
82
83?>
Note: See TracBrowser for help on using the repository browser.