Changeset 110820 in spip-zone


Ignore:
Timestamp:
Jun 23, 2018, 4:03:28 PM (3 years ago)
Author:
abelass@…
Message:

le pix corredcte n'est pas encore retourné, à debuguer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/prix_objets/trunk/prix_objets_fonctions.php

    r110482 r110820  
    187187
    188188        $req = sql_select(
    189                         'code_devise,prix',
    190                         'spip_prix_objets',
    191                         'id_objet=' . $id_objet . ' AND objet=' . sql_quote($objet)
    192                         );
     189                'code_devise,prix',
     190                'spip_prix_objets',
     191                'id_objet=' . $id_objet . ' AND objet=' . sql_quote($objet)
     192                );
    193193        while ($row = sql_fetch($req)) {
    194194                $prix = $row['prix'] . ' ' . traduire_devise($row['code_devise']);
     
    338338                // Si il y a un cookie 'devise_selectionnee' et qu'il figure parmis les devises disponibles on le prend
    339339                if (isset($_COOKIE['devise_selectionnee'])
    340                                 and in_array($_COOKIE['devise_selectionnee'], $devises)) {
    341                                         $devise = $_COOKIE['devise_selectionnee'];
    342                                         $GLOBALS['devise_defaut'] = $devise;
    343                                 }
    344                 // Sinon on regarde si il ya une devise defaut valable
    345                 else {
    346                         $devise = prix_objets_devise_defaut($config);
    347                 }
     340                        and in_array($_COOKIE['devise_selectionnee'], $devises)) {
     341                                $devise = $_COOKIE['devise_selectionnee'];
     342                                $GLOBALS['devise_defaut'] = $devise;
     343                        }
     344                        // Sinon on regarde si il ya une devise defaut valable
     345                        else {
     346                                $devise = prix_objets_devise_defaut($config);
     347                        }
    348348        }
    349349
     
    360360        }
    361361
    362                 // Si PECL intl est présent on dermine le format de l'affichage de la devise selon la langue du contexte
     362        // Si PECL intl est présent on dermine le format de l'affichage de la devise selon la langue du contexte
    363363        if (function_exists('numfmt_create') and is_float($prix)) {
    364364                $fmt = numfmt_create($lang, NumberFormatter::CURRENCY);
     
    426426        }
    427427
    428         $prix_source = sql_select(
    429                         'id_prix_objet,prix_total,titre',
    430                         'spip_prix_objets',
    431                         'id_prix_objet_source=0 AND objet LIKE ' . sql_quote($objet) . ' AND id_objet=' . $id_objet,
    432                         '',
    433                         array('rang_lien', 'titre', 'prix_ht')
     428        if (isset($options['mode']) and !empty($options['mode'])) {
     429                $mode = $options['mode'];
     430        }
     431        else {
     432                include_spip('inc/config');
     433                $mode = lire_config('prix_objets/prix_par_objet_mode', 'global');
     434        }
     435
     436        if ($mode == 'prorata') {
     437                $sequence = isset($options['sequence']) ? $options['sequence'] : '';
     438                $horaire = isset($options['horaire']) ? $options['horaire'] : '';
     439                $format = isset($options['date_format']) ? $options['date_format'] : '';
     440
     441                if (!$sequence) {
     442                        if (isset($contexte['date_debut']) and
     443                                isset($contexte['date_fin']) and
     444                                include_spip('filtres/dates_outils') and
     445                                function_exists('dates_intervalle')) {
     446                                $sequence = dates_intervalle($contexte['date_debut'], $contexte['date_fin'], 0, -1, $horaire, $format);
     447                        }
     448                        else {
     449                                $sequence = array();
     450                        }
     451                }
     452
     453                $nr_elements_sequence = count($sequence);
     454                $contexte['date_fin'] = $contexte['date_debut'];
     455        }
     456        else {
     457                $nr_elements_sequence = 0;
     458        }
     459
     460        $prix_source = sql_allfetsel(
     461                'id_prix_objet,prix_total,titre',
     462                'spip_prix_objets',
     463                'id_prix_objet_source=0 AND objet LIKE ' . sql_quote(trim($objet)) . ' AND id_objet=' . $id_objet,
     464                '',
     465                array('rang_lien', 'titre', 'prix_ht')
    434466                );
    435 
     467        $prix_elements = array();
    436468        // On parcours les extension pour chaque prix principal.
    437         while ($data_source = sql_fetch($prix_source)) {
     469        $dates_applicables = array();
     470        foreach ($prix_source as $index => $data_source) {
     471
    438472                $id_prix_objet = $data_source['id_prix_objet'];
    439473                set_request('prix_total', $data_source['prix_total']);
    440474                $extensions = sql_allfetsel(
    441                                 'extension,id_extension,titre',
    442                                 'spip_prix_objets',
    443                                 'id_prix_objet_source=' . $id_prix_objet);
     475                        'extension,id_extension,titre',
     476                        'spip_prix_objets',
     477                        'id_prix_objet_source=' . $id_prix_objet);
     478                $prix = $fonction_prix('prix_objet', $id_prix_objet);
    444479
    445480                if (count($extensions) > 0) {
    446481                        $applicables = array();
     482
    447483                        $i = 0;
    448484
    449485                        foreach ($extensions as $data_extension) {
    450                                 $i++;
     486                                $id_extension = $data_extension['id_extension'];
     487
    451488                                if($extension = charger_fonction($data_extension['extension'], 'prix_objet/', TRUE)) {
    452                                         if ($extension($data_extension['id_extension'], $contexte)) {
     489                                        switch ($mode) {
     490                                                case 'global':
     491                                                        if ($applicable = $extension($id_extension, $contexte, $mode)) {
     492                                                                $applicables[] = $applicable;
     493                                                        }
     494                                                        break;
     495                                                case 'prorata':
     496                                                        if (is_array($sequence)) {
     497
     498                                                                foreach ($sequence as $index => $element) {
     499                                                                        $contexte['date_debut'] = $contexte['date_fin'] = $element;
     500                                                                        //spip_log("element: $element", 'teste');
     501                                                                        //spip_log("id_extension: $id_extension", 'teste');
     502                                                                        if($applicable = $extension($id_extension, $contexte, $mode) and
     503                                                                                        $applicable == 1) {
     504                                                                                                $dates_applicables[$element][$id_extension][] = 1;
     505                                                                        }
     506                                                                        //spip_log("element: $element", 'teste');
     507                                                                        //spip_log(count($dates_applicables), 'teste');
     508                                                                        //spip_log($fonction_prix('prix_objet', $id_prix_objet), 'teste')
     509
     510                                                                }
     511
     512
     513                                                        }
     514                                                        break;
     515                                                }
     516                                        }
     517                                        else {
    453518                                                $applicables[] = 1;
    454519                                        }
    455                                 }
    456                                 else {
    457                                         $applicables[] = 1;
    458                                 }
    459                         }
    460                         // On choisit le premier prix applicable.
    461                         if (count($applicables) == $i) {
    462                                 $prix = $fonction_prix('prix_objet', $id_prix_objet);
    463                                 break;
    464                         }
    465                 }
    466                 else {
    467                         $prix = $fonction_prix('prix_objet', $id_prix_objet);
    468                 }
    469         }
    470 
     520
     521                        switch ($mode) {
     522                                case 'global':
     523                                        // On choisit le premier prix applicable.
     524                                        if (count($applicables) == $i) {
     525                                                //$prix = $fonction_prix('prix_objet', $id_prix_objet);
     526                                                break;
     527                                        }
     528
     529                        }
     530
     531                        }
     532                        spip_log($dates_applicables, 'teste');
     533
     534
     535                        if  (is_array($dates_applicables[$id_prix_objet]) and
     536                                        $sum = array_sum($dates_applicables[$id_prix_objet]) and
     537                                        $sum > 0 and
     538                                        $sum == count($extensions)) {
     539                                                $prix_elements[$element] = $fonction_prix('prix_objet', $id_prix_objet);
     540                                                unset($sequence[$index]);
     541                                                spip_log($prix_elements, 'teste');
     542                                        }
     543        }
     544
     545        }
     546        if ($mode == "prorata") {
     547                spip_log($prix_elements, 'teste');
     548                $nr_prix_prorata = count($prix_elements);
     549                $sum_prix_prorata = array_sum($prix_elements);
     550
     551                if ($nr_prix_prorata == $nr_elements_sequence) {
     552                        if($nr_prix_prorata > 0) {
     553                                $prix = $sum_prix_prorata / $nr_prix_prorata;
     554                        }
     555                        else {
     556                                $prix = $sum_prix_prorata;
     557                        }
     558                }
     559                elseif ($nr_prix_prorata > 0) {
     560                        $prix = (($sum_prix_prorata / $nr_prix_prorata) + $prix) / 2;
     561                }
     562        }
    471563
    472564        // Permettre d'intervenir sur le prix
Note: See TracChangeset for help on using the changeset viewer.