Changeset 120840 in spip-zone


Ignore:
Timestamp:
Jan 27, 2020, 3:42:12 PM (13 months ago)
Author:
cedric@…
Message:

Report de r118994 : On ajoute l'appel à une fonction d'API générique qui doit renvoyer les taxes d'un contenu SPIP, sans pour l'instant préjuger de comment pourquoi. LES taxes hein, car suivant les pays, un même produit peut parfaitement avoir plusieurs taxes à la fois, pas que la TVA. Autrement dit, pour plus tard, un unique champ taxe ça ne va pas. Et pour mémoire de même la manière d'exonérer ajoutée uniquement dans Commandes ne va pas non plus, car telle taxe peut être exonérée (par ex la TVA si on est une entreprise avec un numéro) et pas d'autres. Donc tout exonérer l'ensemble des taxes d'une commande d'un coup ça ne va pas, il faut faire du granulaire pour être générique (mais oui pour la France ça marche). Au passage on change tous les type_objet en objet, qui est le terme utilisé. C'est totalement en chantier, ne pas utiliser ! Les signatures peuvent changer à tout moment.
Author: rastapopoulos@…
Date: 2019-12-11 13:54:27 +0100 (Mer, 11 déc 2019)

Location:
_plugins_/prix
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/prix

  • _plugins_/prix/inc/prix.php

    r117622 r120840  
    77 * Permet d'obtenir le prix HT d'un objet SPIP. C'est le résultat de cette fonction qui est utilisée pour calculer le prix TTC.
    88 *
    9  * @param string $type_objet Le type de l'objet
     9 * @param string $objet Le type de l'objet
    1010 * @param int $id_objet L'identifiant de l'objet
    1111 * @return float Retourne le prix HT de l'objet sinon 0
    1212 */
    13 function inc_prix_ht_dist($type_objet, $id_objet, $arrondi = 2, $serveur = ''){
     13function inc_prix_ht_dist($objet, $id_objet, $arrondi = 2, $serveur = ''){
    1414        $prix_ht = 0;
     15       
    1516        // Cherchons d'abord si l'objet existe bien
    16         if ($type_objet
     17        if (
     18                $objet
    1719                and $id_objet = intval($id_objet)
    1820                and include_spip('base/connect_sql')
    19                 and $type_objet = objet_type($type_objet)
    20                 and $table_sql = table_objet_sql($type_objet,$serveur)
    21                 and $cle_objet = id_table_objet($type_objet,$serveur)
     21                and $objet = objet_type($objet)
     22                and $table_sql = table_objet_sql($objet, $serveur)
     23                and $cle_objet = id_table_objet($objet, $serveur)
    2224                and $ligne = sql_fetsel('*', $table_sql, "$cle_objet = $id_objet",'','','','',$serveur)
    2325        ){
    2426                // Existe-t-il une fonction précise pour le prix HT de ce type d'objet : prix_<objet>_ht() dans prix/<objet>.php
    25                 if ($fonction_ht = charger_fonction('ht', "prix/$type_objet", true)){
     27                if ($fonction_ht = charger_fonction('ht', "prix/$objet", true)){
    2628                        // On passe la ligne SQL en paramètre pour ne pas refaire la requête
    2729                        $prix_ht = $fonction_ht($id_objet, $ligne);
    2830                }
    2931                // 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
    30                 elseif (!empty($ligne['prix_ht']))
     32                elseif (!empty($ligne['prix_ht'])) {
    3133                        $prix_ht = $ligne['prix_ht'];
    32                 elseif ($ligne['prix'])
     34                }
     35                elseif ($ligne['prix']) {
    3336                        $prix_ht = $ligne['prix'];
     37                }
    3438               
    3539                // Enfin on passe dans un pipeline pour modifier le prix HT
     
    3842                        array(
    3943                                'args' => array(
     44                                        'objet' => $objet,
    4045                                        'id_objet' => $id_objet,
    41                                         'type_objet' => $type_objet,
     46                                        'type_objet' => $objet, // déprécié, utiliser plutôt "objet"
    4247                                        'prix_ht' => $prix_ht
    4348                                ),
     
    4853       
    4954        // Si on demande un arrondi, on le fait
    50         if ($arrondi)
     55        if ($arrondi) {
    5156                $prix_ht = round($prix_ht, $arrondi);
     57        }
    5258       
    5359        return $prix_ht;
     
    5763 * Permet d'obtenir le prix final TTC d'un objet SPIP quel qu'il soit.
    5864 *
    59  * @param string $type_objet Le type de l'objet
     65 * @param string $objet Le type de l'objet
    6066 * @param int $id_objet L'identifiant de l'objet
    6167 * @return float Retourne le prix TTC de l'objet sinon 0
    6268 */
    63 function inc_prix_dist($type_objet, $id_objet, $arrondi = 2, $serveur = ''){
     69function inc_prix_dist($objet, $id_objet, $arrondi = 2, $serveur = ''){
    6470        include_spip('base/connect_sql');
    6571       
    6672        // On va d'abord chercher le prix HT. On délègue le test de présence de l'objet dans cette fonction.
    6773        $fonction_prix_ht = charger_fonction('ht', 'inc/prix');
    68         $type_objet = objet_type($type_objet);
    69         $prix = $prix_ht = $fonction_prix_ht($type_objet, $id_objet, 0, $serveur);
     74        $objet = objet_type($objet);
     75        $prix = $prix_ht = $fonction_prix_ht($objet, $id_objet, 0, $serveur);
     76        $taxes = array();
    7077       
    71         // On cherche maintenant s'il existe une personnalisation pour les taxes : prix_<objet>() dans prix/<objet>.php
    72         if ($fonction_prix_objet = charger_fonction($type_objet, 'prix/', true)){
     78        // On cherche maintenant s'il existe une personnalisation pour le prix total TTC : prix_<objet>() dans prix/<objet>.php
     79        if ($fonction_prix_objet = charger_fonction($objet, 'prix/', true)){
    7380                $prix = $fonction_prix_objet($id_objet, $prix_ht);
     81        }
     82        // Sinon on appelle une fonction générique pour trouver les taxes d'un objet, et on ajoute au HT
     83        elseif ($fonction_taxes = charger_fonction('taxes', 'inc/', true)) {
     84                $taxes = $fonction_taxes($objet, $id_objet);
     85                $taxes_total = array_sum(array_column($taxes, 'montant'));
     86                $prix = $prix_ht + $taxes_total;
    7487        }
    7588       
     
    7992                array(
    8093                        'args' => array(
     94                                'objet' => $objet,
    8195                                'id_objet' => $id_objet,
    82                                 'type_objet' => $type_objet,
     96                                'type_objet' => $objet, // déprécié, utiliser plutôt "objet"
    8397                                'prix_ht' => $prix_ht,
    84                                 'prix' => $prix
     98                                'prix' => $prix,
     99                                'taxes' => $taxes,
    85100                        ),
    86101                        'data' => $prix
     
    89104       
    90105        // Si on demande un arrondi, on le fait
    91         if ($arrondi)
     106        if ($arrondi) {
    92107                $prix = round($prix, $arrondi);
     108        }
    93109       
    94110        // Et c'est fini
Note: See TracChangeset for help on using the changeset viewer.