Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forum osCommerce-fr _ Contributions _ [Contrib] Proposer une date de livraison selon un produit ou/et le module de livraison

Écrit par : shoprun 27 Sep 2008, 13:25

Bonjour a tous

Suite à un besoin personnel, je mets ici un code permettant de proposer une date de livraison. Je dirais plutôt une estimation.

C'est vrai, il y a déjà un sujet créé le dessus -> http://www.oscommerce-fr.info/forum/index.php?showtopic=56526
Merci à celui qui l'a créé et ceux qui y sont intervenu, qui constitue une solution à part entière.
Mais peut être que ceci va contribuer, ou déboucher sur un second choix smile.gif

Bien que le but soit le même, je préfère créer un autre sujet car la manière de faire reste à mon sens assez différente.
Je suis partie du principe que la date obtenue sera soit lié à un produit (ou s'il y en a plusieurs, le délai de plus long), soit par le ou les modules de livraisons.
A savoir que prendre cette voie me parait pas la plus simple, car des modules de livraisons il en existe énormément, et par conséquent il sera difficile voir impossible de prévoir un code "généraliste" pour tous ces modules. Une adaptation personnelle sera à mon avis obligatoire. sad.gif

Bon, pour le moment ce n'est qu'une ébauche, la gestion coté admin de tout cela est inexistant. Disons que cela dépendra si la solution est correcte, bonne, ou encore si évolution il y a.
Pour le moment c'est donc un début de solution blush.gif


Descriptif des fonctionnalités de base :
Un délai de livraison peut être défini selon chaque produit, si un panier contient plusieurs produits, le délai le plus grand sera pris comme base de calcul.
Un délai peu être défini dans chacun des modules, mais ce n'est pas obligatoire, comme par exemple le module "spu" pour "A récupérer sur place".
Pour le moment rien est fait, mais si un module contient son propre délai, ce délai se substituera à celui du produit à condition qu'il soit supérieur. En faite, c'est toujours le délai le plus important qui prend le "pas", que ce soit un produit ou un module.
Ensuite, par rapport à la date en court, on calcul une date de livraison (estimation) en tenant compte du délai et des jours ouvrables.
Cette date s'affiche dans dans les différents modules de livraisons (checkout_shipping.php). Il peut donc avoir des date différentes selon les modules.

Amélioration (ou optionnel) :
Affichage de la date de livraison (estimation) du module de livraison sélectionné dans le checkout_confirmation.php
Les modifs à effectuer :
-> Dans chacun des modules de livraisons : Ajout d'une méthode confirmation()
-> Dans includes/classees/shipping.php : Ajout d'une méthode confirmation()
-> Dans checkout_confirmation.php : Affichage/mise en forme de la date.

Voilà en gros l'idée smile.gif

De mon coté ça a l'air concluant.
Pour les membres que ça intéresse, ils peuvent bien évidemment dire ce qu'ils en pensent, c'est un peu le but je dirais.
Du coup, qu'en pensez vous ?
Ceci respecte t'il cette loi Châtel ?

Le code est ci-dessous, divisée en 4 parties (4 post).

Écrit par : shoprun 27 Sep 2008, 19:24

Suite : Les parties :
-> Champ products_delai BDD, general.php, classe shopping_cart.php, classe order.php

Donc comme le délai peut être obtenue d'un produit, il faut ajouter un champ products_delai à la table products.

Code
// Lancer la requête dans son PhpMyAdmin
// ALTER TABLE `products` ADD `products_delai` INT( 8 ) NOT NULL AFTER `products_weight`;
Le principe ici, est de stocker un délai de livraison (genre 2 jours ou 48h00, 1 semaine, etc...) sous forme d'un timestamp UNIX, ceci facilite les calculs par la suite. Enfin, théoriquement smile.gif
Les valeurs doivent prendre (par exemple) :
0 -> Pas de délai (valeur par défaut)
172800 -> 2 jour/48h00 = 3600 * 24 * 2
604800 -> 1 semaine/7 jours
etc ...


Ensuite une fonction permettant d'obtenir le nombre de jours ouvrables. Un code trouvé sur le Net, un peu modifié.
-> includes/functions/general.php
Code
function get_jours_ouvrables($debut, $fin, $with_saterday = false, $with_sunday = true, $verif_livraison = false) {
    $totOuvrables = 0;
    // Comptabilise le nombre de jours ouvrables pendant la période de livraison
    for ($day = $debut; $day < $fin; ($day += 86400)) {
        $day_en = strtolower(date('D', $day)); // mon-tue-wen-thu-fri-sat-sun
        //
        if ($day_en == 'sat' || $day_en == 'sun') {
            switch (true) {
                case ($with_sunday == true && $with_saterday == true) :
                    $totOuvrables++; // Comptabilise le samedi ET le dimanche
                break;
                case ($with_sunday == true && $with_saterday == false && $day_en == 'sun') :
                    $totOuvrables++; // Comptabilise uniquement le dimanche
                break;
                case ($with_saterday == true && $with_sunday === false && $day_en === 'sat') :
                    $totOuvrables++; // Comptabilise uniquement le samedi
                break;
            }
        }
        else {
            // Définition des dates fériées fixes
            $jour = date('j', $day);
            $mois = date('m', $day);
            $an = date('Y', $day);
            //
            if ($jour == 01 && $mois == 01) $totOuvrables++; // 1er janvier
            else if ($jour == 01 && $mois == 05) $totOuvrables++; // 1er mai
            else if ($jour == 08 && $mois == 05) $totOuvrables++; // 5 mai
            else if ($jour == 14 && $mois == 07) $totOuvrables++; // 14 juillet
            else if ($jour == 15 && $mois == 08) $totOuvrables++; // 15 aout
            else if ($jour == 01 && $mois == 11) $totOuvrables++; // 1 novembre
            else if ($jour == 11 && $mois == 11) $totOuvrables++; // 11 novembre
            //else if ($jour == 20 && $mois == 12) $totOuvrables++; // 20 décembre (Ile de La Réunion)
            else if ($jour == 25 && $mois == 12) $totOuvrables++; // 25 décembre
            // Pâques
            $paques = easter_date($an); // retourne un timestamp UNIX pour Pâques
            if (date('d', $paques) == $jour && date('m', $paques) == $mois) $totOuvrables++;
            // Ascension
            $ascension = $paques + 39;
            if (date('d', $ascension) == $jour && date('m', $ascension) == $mois) $totOuvrables++;
            // Pentecote
            $pentecote = $paques + 50;
            if (date('d', $pentecote) == $jour && date('m', $pentecote) == $mois) $totOuvrables++;
        }
    }
    // Si jour de livraison est un jour ouvrable
    if ($verif_livraison === true) $totOuvrables += get_jours_ouvrables($fin, ($fin + 86400), $with_saterday, $with_sunday, false);
    //
    return $totOuvrables;
}


Dans la classe shopping_cart.php (ligne ~ 13)
-> includes/classes/shopping_cart.php :
Initialise la nouvelle propriété "delaiMax" dans le constructeur
Code
function shoppingCart() {
    // delai_livraison BOC
    $this->delaiMax = 0;
    // delai_livraison EOC
    $this->reset();
}


(toujours dans le shopping_cart.php)
Ajouter le champ "products_delai" à la requête
et -- -> initialiser le délai le plus grand par rapport aux produits
et -- -> ajouter au tableau le "products_delai"
Code
    function get_products() {
      global $languages_id;

      if (!is_array($this->contents)) return false;

      $products_array = array();
      reset($this->contents);
      while (list($products_id, ) = each($this->contents)) {
// delai_livraison BOC
        $products_query = tep_db_query("select p.products_id, pd.products_name, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_delai, p.products_tax_class_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$products_id . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");
// delai_livraison EOC
        if ($products = tep_db_fetch_array($products_query)) {
          $prid = $products['products_id'];
          $products_price = $products['products_price'];

          $specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$prid . "' and status = '1'");
          if (tep_db_num_rows($specials_query)) {
            $specials = tep_db_fetch_array($specials_query);
            $products_price = $specials['specials_new_products_price'];
          }
            // delai_livraison BOC
            if ($products['products_delai'] > $this->delaiMax) {
                $this->delaiMax = $products['products_delai'];
            }
          $products_array[] = array('id' => $products_id,
                                    'name' => $products['products_name'],
                                    'model' => $products['products_model'],
                                    'image' => $products['products_image'],
                                    'price' => $products_price,
                                    'quantity' => $this->contents[$products_id]['qty'],
                                    'weight' => $products['products_weight'],
                                    'final_price' => ($products_price + $this->attributes_price($products_id)),
                                    'products_delai' => (int)$products['products_delai'],
                                    'tax_class_id' => $products['products_tax_class_id'],
                                    'attributes' => (isset($this->contents[$products_id]['attributes']) ? $this->contents[$products_id]['attributes'] : ''));
// delai_livraison EOC
        }
      }

      return $products_array;
    }


(toujours dans le shopping_cart.php)
// Puis création d'une nouvelle méthode getDelaiMax() :
Code
class shoppingCart {
... code ...
    // delai_livraison BOC
    function getDelaiMax() {
        return $this->delaiMax;
    }
    // delai_livraison EOC
}



Dans la classe order.php
-> includes/classes/order.php
(Code pas obligatoirement utile en faite, non exploité pour le moment)
Ajouter le "products_delai" au tableau (ligne ~ 227) :
Code
... code ...
      for ($i=0, $n=sizeof($products); $i<$n; $i++) {
// delai_livraison BOC
        $this->products[$index] = array('qty' => $products[$i]['quantity'],
                                        'name' => $products[$i]['name'],
                                        'model' => $products[$i]['model'],
                                        'tax' => tep_get_tax_rate($products[$i]['tax_class_id'], $tax_address['entry_country_id'], $tax_address['entry_zone_id']),
                                        'tax_description' => tep_get_tax_description($products[$i]['tax_class_id'], $tax_address['entry_country_id'], $tax_address['entry_zone_id']),
                                        'price' => $products[$i]['price'],
                                        'final_price' => $products[$i]['price'] + $cart->attributes_price($products[$i]['id']),
                                        'weight' => $products[$i]['weight'],
                                        'products_delai' => $products[$i]['products_delai'],
                                        'id' => $products[$i]['id']);
// delai_livraison EOC
... suite code ...


(toujours dans la classe order.php)
Création du nouvel élémént "delaiMax" au tableau this->info[]
Permet de récupérer le délai le plus grand parmi les produits du panier
Code
function cart() {
  global $HTTP_POST_VARS, $customer_id .........
  ... code ...
      $index = 0;
      $products = $cart->get_products();
      // delai_livraison BOC
      $this->info['delaiMax'] = $cart->getDelaiMax(); // Délai Max de la livraison
      // delai_livraison EOC
  ... suite code ...
}

Écrit par : shoprun 27 Sep 2008, 21:00

Suite : La partie MODULE DE LIVRAISON smile.gif
Le module flat.php (Frais forfaitaires) est à titre d'exemple, ceci peut être intégré à d'autres modules, comme colissimo, etc...

Dans le (ou les) module de livraison
-> includes/modules/shipping/flat.php (par exemple) (ligne ~ 77)
Ajouter le délai minimum pour ce module dans -> function install() {}
Désinstaller le module avant de faire les modifications si le module est déjà installé

Code
    function install() {
// Délai_minimum BOC (L'ordre des positions sont redéfini -> sort_order)
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Utiliser ce mode de livraison', 'MODULE_SHIPPING_FLAT_STATUS', 'Oui', 'Voulez-vous proposer ce mode de livraison ?', '6', '1', 'tep_cfg_select_option(array(\'Oui\', \'Non\'), ', now())");
// Ajout constante -> MODULE_SHIPPING_FLAT_DELAI_MINI
        tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Délai minimum', 'MODULE_SHIPPING_FLAT_DELAI_MINI', '172800', 'Délai minimum de jours ouvrés de livraison', '6', '2', 'tep_get_delai_title', 'tep_cfg_pull_down_delai(', now())");
        tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Coût de la livraison', 'MODULE_SHIPPING_FLAT_COST', '5.00', 'Le montant forfaitaire de livraison pour toute commande utilisant cette méthode.', '6', '3', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('TVA applicable', 'MODULE_SHIPPING_FLAT_TAX_CLASS', '0', 'Sélectionnez la TVA applicable sur le montant de la livraison.', '6', '4', 'tep_get_tax_class_title', 'tep_cfg_pull_down_tax_classes(', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Zone de livraison', 'MODULE_SHIPPING_FLAT_ZONE', '0', 'Si une zone est sélectionnée, elle sera la seule à proposer ce mode de livraison.', '6', '5', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Ordre d\'affichage', 'MODULE_SHIPPING_FLAT_SORT_ORDER', '0', 'Ordre de tri de l\'affichage dans la liste des modules.', '6', '6', now())");
// Délai_minimum EOC
     }


(toujours dans le (ou les) module de livraison)
Et à faire en même temps de l'étape ci dessus, pour rajouter la constante -> MODULE_SHIPPING_FLAT_DELAI_MINI
Code
function keys() {
    return array('MODULE_SHIPPING_FLAT_STATUS', 'MODULE_SHIPPING_FLAT_DELAI_MINI', 'MODULE_SHIPPING_FLAT_COST', 'MODULE_SHIPPING_FLAT_TAX_CLASS', 'MODULE_SHIPPING_FLAT_ZONE', 'MODULE_SHIPPING_FLAT_SORT_ORDER');
}


(toujours dans le (ou les) module de livraison)
-> includes/modules/shipping/flat.php
Code
function getDelai() {
    global $order;
    
    $delai = array();
    $totOuvrables = 0;
    $delai_order = (int)$order->info['delaiMax'];
    // Le délai minimum remplace le délai max des produits si celui ci est plus grand
    if (MODULE_SHIPPING_FLAT_DELAI_MINI > $delai_order) {
        $delai_order = MODULE_SHIPPING_FLAT_DELAI_MINI;
    }
    $time = time();
    $heure = (int)date("H", $time);
    // Départ de la livraison le jour même ou le lendemain selon l'heure (12h00)
    $date_depart = ($heure > 12) ? $time + 86400: $time;
    $date_livraison = $date_depart + $delai_order;
    // Comptabilise le nombre de jours ouvrables entre la période de livraison
    $with_saterday = false; // Comptabilise pas les samedis
    $with_sunday = true; // Comptabilise les dimanches
    $verif_jour_livraison = true; // Vérifie si le jour de livraison est un jour ouvrable (si oui -> 1 jours de plus)
    $totOuvrables = get_jours_ouvrables($date_depart, $date_livraison, $with_saterday, $with_sunday, $verif_jour_livraison);
    // On ajoute les jour ouvrables : Timestamp du jour de livraison
    $date_livraison += $totOuvrables * 86400;
    //
    $delai['delai'] = $delai_order / 86400;
    $delai['date_liv'] = date(DATE_FORMAT, $date_livraison);
    return $delai;
}


(toujours dans le module)
Code
... codes ...
        $this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_FLAT_TEXT_TITLE,
                            'methods' => array(array('id' => $this->code,
                                                     'title' => MODULE_SHIPPING_FLAT_TEXT_WAY,
                                                     'delai' => sprintf(MODULE_SHIPPING_FLAT_DELAI, $delai['delai'], $delai['date_liv']),
                                                     'cost' => MODULE_SHIPPING_FLAT_COST)));
... suite codes ...


Dans le (ou les) fichiers langues du (ou des) module de livraison
-> includes/languages/french/modules/shipping/flat.php
Code
// Estimation de la livraison
define('MODULE_SHIPPING_FLAT_DELAI', '%s jours ouvrés. Livraison le %s (Estimation)');


Affichage du nombre de jours ouvrés et de l'estimation de la date de livraison
-> catalog/checkout_shipping.php
Code
... suite code ...
          for ($j=0, $n2=sizeof($quotes[$i]['methods']); $j<$n2; $j++) {
// set the radio button to be checked if it is the method chosen
            $checked = (($quotes[$i]['id'] . '_' . $quotes[$i]['methods'][$j]['id'] == $shipping['id']) ? true : false);

//
                        if (isset($quotes[$i]['methods'][$j]['delai']) && tep_not_null($quotes[$i]['methods'][$j]['delai'])) {
                            $colspan = '';
                            if ( ($n > 1) || ($n2 > 1) ) {
                                $colspan = ' colspan="3"';
                            }
                            echo '            <tr class="moduleRow">'."\n";
                            echo '                <td width="10">'.tep_draw_separator('pixel_trans.gif', '10', '1').'</td>'."\n";
                            echo '                <td'.$colspan.' class="main">'.$quotes[$i]['methods'][$j]['delai'].'</td>'."\n";
                            echo '                <td width="10">'.tep_draw_separator('pixel_trans.gif', '10', '1').'</td>'."\n";
                            echo '            </tr>'."\n";
                        }
//

            if ( ($checked == true) || ($n == 1 && $n2 == 1) ) {
              echo '                  <tr id="defaultSelected" class="moduleRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, ' . $radio_buttons . ')">' . "\n";
            } else {
              echo '                  <tr class="moduleRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, ' . $radio_buttons . ')">' . "\n";
            }
... suite code ...

Écrit par : shoprun 27 Sep 2008, 21:05

Suite : La partie ADMIN smile.gif

Une solution simpliste, c'est à dire sans gestion des différents délais dans une table, mais avec de simples tabeaux Php.
Ca ce répète un peu, c'est le petit inconvénient.
Mais rien n'empêche de pouvoir gérer ceci grâce à la BDD, via une table (genre delai_livraison). Pour le moment c'est pas le cas.

3 fonctions à rajouter
Dans -> admin/includes/functions/general.php (avant : ?>)

Code
// delai_livraison BOC
// table configuration : -> use_function
function tep_get_delai_title($delai) {
    if ($delai == '0') {
        return TEXT_NONE;
    }
    else {
        $title = TEXT_NONE;
        //
        $t_delai[0] = array('id' => 0, 'text' => TEXT_NONE);
        $t_delai[1] = array('id' => 172800, 'text' => '2 Jours');
        $t_delai[2] = array('id' => 259200, 'text' => '3 Jours');
        $t_delai[3] = array('id' => 604800, 'text' => '1 Semaine');
        $t_delai[4] = array('id' => 864000, 'text' => '10 Jours');
        $t_delai[5] = array('id' => 1296000, 'text' => '15 Jours');
        $t_delai[6] = array('id' => 1814400, 'text' => '3 Semaines');
        $t_delai[7] = array('id' => 2419200, 'text' => '4 Semaines');
        //
        for ($i=0, $n = count($t_delai); $i < $n; $i++) {
            if ($t_delai[$i]['id'] == $delai) {
                $title = $t_delai[$i]['text'];
                break;
            }
        }
        //
        return $title;
    }
}
// table configuration : -> set_function
function tep_cfg_pull_down_delai($delai, $key = '') {
    $name = (($key) ? 'configuration[' . $key . ']' : 'configuration_value');
    //
    $t_delai[0] = array('id' => 0, 'text' => TEXT_NONE);
    $t_delai[1] = array('id' => 172800, 'text' => '2 Jours');
    $t_delai[2] = array('id' => 259200, 'text' => '3 Jours');
    $t_delai[3] = array('id' => 604800, 'text' => '1 Semaine');
    $t_delai[4] = array('id' => 864000, 'text' => '10 Jours');
    $t_delai[5] = array('id' => 1296000, 'text' => '15 Jours');
    $t_delai[6] = array('id' => 1814400, 'text' => '3 Semaines');
    $t_delai[7] = array('id' => 2419200, 'text' => '4 Semaines');
    //
    return tep_draw_pull_down_menu($name, $t_delai, $delai);
}
// Pour categories.php
function get_delai_pull_down_list() {
    // 3600 s = 1h00 // 1 jour/24h00 = 3600 * 24 = 86400 secondes
    $t_delais[0] = array('id' => 0, 'text' => TEXT_NONE);
    $t_delais[1] = array('id' => 172800, 'text' => '2 Jours');
    $t_delais[2] = array('id' => 259200, 'text' => '3 Jours');
    $t_delais[3] = array('id' => 604800, 'text' => '1 Semaine');
    $t_delais[4] = array('id' => 864000, 'text' => '10 Jours');
    $t_delais[5] = array('id' => 1296000, 'text' => '15 Jours');
    $t_delais[6] = array('id' => 1814400, 'text' => '3 Semaines');
    $t_delais[7] = array('id' => 2419200, 'text' => '4 Semaines');
    //
    return $t_delais;
}
// delai_livraison EOC



Dans -> admin/categories.php
Ajout dans le tableau $parameters le "products_delai". Dans la condition -> if ($action == 'new_product') (ligne ~ 368)
Code
... code ...
  if ($action == 'new_product') {
// delai_livraison BOC
... code ...
                       'products_status' => '',
                       'products_delai' => '',
                       'products_tax_class_id' => '',
                       'manufacturers_id' => '');
// delai_livraison EOC
... suite code ...


(toujours dans le categories.php)
Ajout du champ products_delai à la requête : (ligne ~ 390)
Code
// delai_livraison BOC
$product_query = tep_db_query("select pd.products_name, pd.products_description, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_delai, p.products_tax_class_id, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "'");
// delai_livraison EOC


(toujours dans le categories.php)
Affichage du choix du délai (menu déroulant), après les prix par exemple : (ligne ~ 500)
Code
        <tr>
            <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
        </tr>
<?php
// delai_livraison BOC
    echo '        <tr>'."\n";
    echo '            <td class="main">'.TEXT_PRODUCTS_DELAI.'</td>'."\n";
    echo '            <td class="main">'.tep_draw_separator('pixel_trans.gif', '24', '15').'&nbsp;'.tep_draw_pull_down_menu('products_delai', get_delai_pull_down_list(), $pInfo->products_delai).'</td>'."\n";
    echo '        </tr>'."\n";
// delai_livraison EOC
?>
        <tr>
            <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
        </tr>


(toujours dans le categories.php)
Mise à jour du produit.
Ajout au tableau $sql_data_array le products_delai : (ligne ~ 219)
Code
// delai_livraison BOC
$sql_data_array = array('products_quantity' => (int)tep_db_prepare_input($HTTP_POST_VARS['products_quantity']),
... code ...
                        'products_status' => tep_db_prepare_input($HTTP_POST_VARS['products_status']),
                        'products_delai' => (int)tep_db_prepare_input($HTTP_POST_VARS['products_delai']),
                                             'products_tax_class_id' => tep_db_prepare_input($HTTP_POST_VARS['products_tax_class_id']),
                        'manufacturers_id' => (int)tep_db_prepare_input($HTTP_POST_VARS['manufacturers_id']));
// delai_livraison EOC
... suite code ...


Fichiers langues
Dans -> admin/includes/languages/french/categories.php (et les autres) (ligne ~ 96)
Code
// delai_livraison BOC
define('TEXT_PRODUCTS_DELAI', 'Délai de livraison :');
// delai_livraison EOC

Écrit par : coconimo 28 Sep 2008, 08:29

slt shoprun,
joli travail.
par contre, tu as développé pour php5 non ?
une 'tite idée optionnelle : suivant l'heure de la commande, le colis peut partir le jour même ou le lendemain, genre :
function je_commande_avant_midi{
if $paiement_par_cb = true
$mon colis part aujourd'hui
$ma carte bleue est débité aussitôt (si si, on peut faire des remises le jour même manuellement wink.gif )
}

Cdt

Écrit par : shoprun 28 Sep 2008, 09:11

Citation
par contre, tu as développé pour php5 non ?
Effectivement, mon environnement c'est Php5, mais théoriquement ça devrait fonctionner sur du Php4.
Mais je vois pourquoi du dis ceci, j'ai laissé des "public function...", je les enlève de suite. Bien vu blush.gif

idea.gif Ceci dit, j'en profite pour dire qu'il faudrait abandonner Php4, ce n'est plus supporté par la communauté Php.
arrow.gif http://www.php.net/archive/2007.php#2007-07-13-1

Citation
une 'tite idée optionnelle : suivant l'heure de la commande, le colis peut partir le jour même ou le lendemain, genre :
function je_commande_avant_midi{}
L'idée est bonne certainement, mais je pense tout de même que cela est assez éloigné avec ce que je propose.
Je me contente juste de proposer un délai de livraison, et c'est même plus qu'une estimation qu'autre chose, c'est pour être en accord avec cette loi Châtel.

Mais effectivement, pourquoi pas.
Malgré tout, ça me parais assez risqué tout de même, non ?
En faite, tant que le client ne paie pas sa commande, il me parait difficile d'accorder une remise, ce n'est qu'à son retour du système de paiement (Paypal, Banque ...) que l'on sait qu'il a réglé, et de l'heure de la transaction.
Du coup, la commande est enregistrée. Quelque part, c'est un peu tard pour accorder la remise.


Ceci dit, je remarque que dans le code je rajoute immédiatement une journée (86400 secondes), ce qui fait que si on peu livrer le jour même, la date estimée sera de 24 heures trop tôt.
Je vais mettre une condition en me basant sur l'heure, un truc du genre :
SI avant 12h00 -> Calcul selon le jours en cours
SINON (donc après 12h00) -> Calcul selon le lendemain
Merci à toi cool.gif

Écrit par : shoprun 28 Sep 2008, 12:05

Suite de cette contribution smile.gif
La partie : OPTIONNELLE -> Afficher la date dans le checkout_confirmation

Dans -> includes/classes/shipping.php
Ajout d'une nouvelle propriété -> selected_module : (ligne ~ 14)

Code
  class shipping {
// delai_livraison BOC
    var $modules, $selected_module;
// delai_livraison EOC


(toujours dans shipping.php) (ligne ~ 23)
Initialisation de la propriété $this->selected_module
Code
... code ...
        $include_modules = array();

        if ( (tep_not_null($module)) && (in_array(substr($module['id'], 0, strpos($module['id'], '_')) . '.' . substr($PHP_SELF, (strrpos($PHP_SELF, '.')+1)), $this->modules)) ) {
          $include_modules[] = array('class' => substr($module['id'], 0, strpos($module['id'], '_')), 'file' => substr($module['id'], 0, strpos($module['id'], '_')) . '.' . substr($PHP_SELF, (strrpos($PHP_SELF, '.')+1)));
// delai_livraison BOC
            $mod = explode('_', $module['id']);
            $this->selected_module = $mod[0];
// delai_livraison EOC
          } else {
... suite code ...


(toujours dans shipping.php)
Création de la nouvelle méthode -> confirmation()
Code
class shipping {
... code ...
// delai_livraison BOC
    // Rerourne un tableau pour afficher la date de livraison dans le checkout_confirmation.php
    function confirmation() {
        if (is_array($this->modules)) {
            if (is_object($GLOBALS[$this->selected_module]) && ($GLOBALS[$this->selected_module]->enabled) ) {
                // Contrôle de l'existance de la méthode "confirmation()" du module sélectionné
                if (in_array('confirmation', get_class_methods($GLOBALS[$this->selected_module]))) {
                    return $GLOBALS[$this->selected_module]->confirmation();
                }
            }
        }
    }
// delai_livraison EOC
}


Dans -> includes/modules/shipping/flat.php
Création de la nouvelle méthode -> function confirmation()
Code
  class flat {
    var $code, $title, $description, $icon, $enabled;
... code ...
// delai_livraison BOC
    function confirmation() {
        $delai = $this->getDelai();
        $fields[] = array('title' => HEADING_SHIPPING_DATE, 'field' => sprintf(MODULE_SHIPPING_FLAT_DELAI, $delai['delai'], $delai['date_liv']));
        return array('title' => HEADING_SHIPPING_INFORMATION,
                        'fields' => $fields);
    }
// delai_livraison EOC
  }



Dans -> checkout_confirmation.php (ligne ~ 240)
Affichage de la date de livraison
Code
... code ...
  if (MODULE_ORDER_TOTAL_INSTALLED) {
    echo $order_total_modules->output();
  }
?>
            </table></td>
          </tr>
        </table></td>
      </tr>
<?php
// delai_livraison BOC
if (is_array($shipping_modules->modules)) {
    if ($confirm_shipping = $shipping_modules->confirmation()) {
        if (tep_not_null($confirm_shipping['title']) && isset($confirm_shipping['fields']) && is_array($confirm_shipping['fields'])) {
?>
            <tr>
                <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
            </tr>
<?php
            echo '            <tr>'."\n";
            echo '                <td class="main"><b>'.$confirm_shipping['title'].'</b></td>'."\n";
            echo '            </tr>'."\n";
            echo '            <tr>'."\n";
            echo '                <td>'.tep_draw_separator('pixel_trans.gif', '100%', '10').'</td>'."\n";
            echo '            </tr>'."\n";
            echo '            <tr>'."\n";
            echo '                <td>'."\n";
            echo '                    <table border="0" summary="" width="100%" cellspacing="1" cellpadding="2" class="infoBox">'."\n";
            echo '                    <tr class="infoBoxContents">'."\n";
            echo '                        <td>'."\n";
            echo '                            <table border="0" summary="" cellspacing="0" cellpadding="2">'."\n";
            for ($i=0, $n=count($confirm_shipping['fields']); $i<$n; $i++) {
                echo '                            <tr>'."\n";
                echo '                                <td class="main">'.$confirm_shipping['fields'][$i]['title'].'</td>'."\n";
                echo '                                <td class="main">'.$confirm_shipping['fields'][$i]['field'].'</td>'."\n";
                echo '                            </tr>'."\n";
            }
            echo '                            </table>'."\n";
            echo '                        </td>'."\n";
            echo '                    </tr>'."\n";
            echo '                    </table>'."\n";
            echo '                </td>'."\n";
            echo '            </tr>'."\n";
        }
    }
}
// delai_livraison EOC
  if (is_array($payment_modules->modules)) {
    if ($confirmation = $payment_modules->confirmation()) {
... suite code ...



Fichiers langues
Dans -> includes/languages/french/checkout_confirmation.php (ligne ~ 29) (et les autres)
Code
// delai_livraison BOC
define('HEADING_SHIPPING_INFORMATION', 'Information de livraison');
define('HEADING_SHIPPING_DATE', 'Date de Livraison :');
// delai_livraison EOC

Écrit par : shoprun 30 Sep 2008, 08:03

Et bien voilà, après quelques essai sur une MS2-RC1-FR-W3C-v3, je n'ai pas vu de bug smile.gif

La prochaine étape sera de modifier la façon d'intégrer cette (futur) contribution plus proche de ce que l'on peu voir sur les autres contributions, pour améliorer son intégration a osC. La façon ci dessus est un peu "à la dur" par moment.
Puis de la déposer sur le site US. (pas trop le temps pour le moment)

Cependant, il manque les traductions aussi (en, esp, de), alors s'ils y a des membres qui veulent bien faire des propositions de traductions, ça serait fort sympathique blush.gif
Mais aussi un nom pour cette futur contribution, j'suis pas très inspiré à vrai dire huh.gif
Un nom comme ceci peut être : delivery_date_depending_products_modules (un peu long non ?)


Merci par avance pour toute aide blush.gif

Écrit par : coconimo 30 Sep 2008, 08:07

bonjour monsieur,
Est il envisageable de caresser l'espoir d'avoir des screenshot de ce merveilleux code que vous avez eu l'amabilité de partager avec nous ?
En vous remerciant d'avance,
une admiratrice anonyme.





(hum, j'y ai mis les formes cette fois ... happy.gif )

Écrit par : shoprun 30 Sep 2008, 08:19

Citation (coconimo @ 30 Sep 2008, 11:07) *
bonjour monsieur,
Est il envisageable de caresser l'espoir d'avoir des screenshot de ce merveilleux code que vous avez eu l'amabilité de partager avec nous ?
M'en doutais laugh.gif

Bon, on va réparer ça. -> AYE smile.gif
Bon, ce n'est pas une contrib très graphique, tout ce "pata caisse" c'est pour obtenir 2 malheureux petits texte informatif de la date de livraison.

Il y a donc 2 moment où on obtient cette date, sous cette forme :
arrow.gif Dans les modules de livraison (checkout_shipping)
Pour obtenir un texte comme : 2 jours ouvrés. Livraison le 02/10/2008 (Estimation)

http://www.casimages.com/img.php?i=081011022506430312598173.gif

arrow.gif Dans la la confirmation de commande, avant paiement (checkout_confirmation)
Et on reprend la même chose pour obtenir :
Information de livraison
Date de Livraison : 2 jours ouvrés. Livraison le 02/10/2008 (Estimation)


http://www.casimages.com/img.php?i=081011022451430312598171.gif


arrow.gif La partie admin : modules-> Expéditions

http://www.casimages.com/img.php?i=081011022420430312598169.gif

arrow.gif La partie admin : fiche produit
http://www.casimages.com/img.php?i=081011022437430312598170.gif


Evidemment, chacun aura le loisir de le présenter comme il veut. Les 2 informations essentielles y sont, à savoir le nombre de jours ouvré -> le délai, et la date de livraison, une estimation en faite qui peu variée selon les jours ouvrables (dimanche, jour fériés)

Écrit par : nixo 16 Apr 2009, 17:40

Bonjour,

tout d'abord merci pour le code Shoprun rolleyes.gif

J'ai eu le même problème que http://www.oscommerce-fr.info/forum/index.php?s=&showtopic=58582&view=findpost&p=303594

En fait la contribution fonctionne correctement dans la partie admin ainsi que dans la partie checkout_confirmation.php.

Par contre, dans la partie checkout_shipping.php le délai ne s'affiche pas correctement.

En fait il manque l'appel à la fonction getDelai() dans le module (enfin c'est ce que j'en ai déduit avec mon niveau unsure.gif )

Du coup, $delai['delai'] et $delai['date_liv'] sont vides et on obtient:

Citation
jours ouvrés.Livraison le (estimation)
.

Donc la partie
Citation
Suite : La partie MODULE DE LIVRAISON
il semble qu'il soit nécessaire de remplacer

Code
(toujours dans le module)
Code
... codes ...
        $this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_FLAT_TEXT_TITLE,
                            'methods' => array(array('id' => $this->code,
                                                     'title' => MODULE_SHIPPING_FLAT_TEXT_WAY,
                                                     'delai' => sprintf(MODULE_SHIPPING_FLAT_DELAI, $delai['delai'], $delai['date_liv']),
                                                     'cost' => MODULE_SHIPPING_FLAT_COST)));
... suite codes ...


par

Code
// class methods
    function quote($method = '') {
      global $order;

     // BOC delai_minimum
      $delai = $this->getDelai();
      // EOC delai_minimum

      $this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_FLAT_TEXT_TITLE,
                            'methods' => array(array('id' => $this->code,
                                                     'title' => MODULE_SHIPPING_FLAT_TEXT_WAY,
                                                     'delai' => sprintf(MODULE_SHIPPING_FLAT_DELAI, $delai['delai'], $delai['date_liv']),
                                                     'cost' => MODULE_SHIPPING_FLAT_COST)));
.......
... code ...
........


J'ai également placé la déclaration de la fonction getDelai() avant la fonction quote() dans mon module (colissimo en l'occurence, mais j'imagine que c'est pareil pour flat.php).

J'espère ne pas dire trop de sottises et que ça aidera certains qui ont mon niveau et qui ont passé 48h( comme moi blush.gif ) à chercher d'ou ca provenait ohmy.gif)

Enfin, désolé pour le up ohmy.gif)

Nicolas

Écrit par : shoprun 16 Apr 2009, 18:57

Salut Nixo

Citation (nixo)
Par contre, dans la partie checkout_shipping.php le délai ne s'affiche pas correctement.
Ca fait une paye que j'ai lâché cette affaire, mais je pense que c'est tout à fait ça. wink.gif

Mais dans le code de cette contribution (dans le module flat.php), le code y est, non ?
Je remarque que le code y est aussi dans le install.html ???
Serait ce un oubli dans la version à télécharger sur le site US ?


Si tu veux que ce texte soit repris dans le checkout_confirmation.php, et bien pour ça, idem :
Code
    function confirmation() {
        $delai = $this->getDelai();
        $fields[] = array('title' => HEADING_SHIPPING_DATE, 'field' => sprintf(MODULE_SHIPPING_FLAT_DELAI, $delai['delai'], $delai['date_liv']));
        return array('title' => HEADING_SHIPPING_INFORMATION,
                    'fields' => $fields);
    }

Écrit par : Gnidhal 16 Apr 2009, 21:16

Good job man!
waip, je dis bravo!
et pendant que Mâme Coco caresse l'espoir (une nouvelle race de poilus?) je ferai juste une petite suggestion d'amélioration sur tes arrays de pull_down (wai, je la joues optimiseur):

tu utilises le TEXT_NONE qui provient du fichier french.php, ok mais à ce moment là, utilises des variables pour les autres durées sinon si c'est uniquement pour les français, personnalise ton text_none, enfin tu forces l'index $t_delai ou $t_delais (pourquoi les nommer différemment puisque le contenu est identique?) ce qui me semble superflu.
donc je serai tenté de dire que puisque le tableau est identique, pourquoi ne pas le déclarer en general.php ?
ce qui fait que :

Code
function get_delai_pull_down_list() {
    // 3600 s = 1h00 // 1 jour/24h00 = 3600 * 24 = 86400 secondes
    $t_delais[0] = array('id' => 0, 'text' => TEXT_NONE);
    $t_delais[1] = array('id' => 172800, 'text' => '2 Jours');
pourrait devenir :
Code
########
// dans general.php ou mieux dans french.php, un localisé pouvant se trouver dans english.php
########
    $t_delai = array();
    $t_delai[] = array('id' => 0, 'text' => 'Choisissez');
    $t_delai[] = array('id' => 172800, 'text' => '2 Jours');
    $t_delai[] = array('id' => 259200, 'text' => '3 Jours');
    $t_delai[] = array('id' => 604800, 'text' => '1 Semaine');
    $t_delai[] = array('id' => 864000, 'text' => '10 Jours');
    $t_delai[] = array('id' => 1296000, 'text' => '15 Jours');
    $t_delai[] = array('id' => 1814400, 'text' => '3 Semaines');
    $t_delai[] = array('id' => 2419200, 'text' => '4 Semaines');

########
    // dans l'appel de la creation du menu de liste de categories.php
########
    tep_draw_pull_down_menu('products_delai', $t_delai, $pInfo->products_delai)

########
    // et pour l'insérer dans une fonction comme celle de la configuration
########

   // delai_livraison BOC
// table configuration : -> use_function
function tep_get_delai_title($delai) {
    global $t_delai;
    if ($delai == '0') {
        return TEXT_NONE;
    }
    else {
        $title = TEXT_NONE;

        for ($i=0, $n = count($t_delai); $i < $n; $i++) {
            if ($t_delai[$i]['id'] == $delai) {
                $title = $t_delai[$i]['text'];
                break;
            }
        }
        //
        return $title;
    }
}
// table configuration : -> set_function
function tep_cfg_pull_down_delai($delai, $key = '') {
    global $t_delai;
    $name = (($key) ? 'configuration[' . $key . ']' : 'configuration_value');
    return tep_draw_pull_down_menu($name, $t_delai, $delai);
}

Alors pas seulement puriste, mais pratique : ton code est plus léger, facile à localiser et si te veux changer les segments de durée, tu n'as qu'un seul tableau (array) à changer pour chaque langue.
Note bien que le coup de la langue, on s'en tape un peu coté admin, mais si tu veux déposer ta contrib un jour sur addons.oscommerce autant avoir prévu le coup wink.gif
et encore bravo pour cette initiative!

Écrit par : shoprun 17 Apr 2009, 07:10

Citation (Gnidhal)
mais si tu veux déposer ta contrib un jour sur addons.oscommerce autant avoir prévu le coup wink.gif
huh.gif
Presque ma main à couper de l'avoir déposée sur le site US mrgreen.gif

Bon, je prends en compte ton code optimisé, et prévoir de la déposer, c'est tout de même plus pratique wink.gif
En tout cas, à cet instant j'ai pas tout pigé tongue.gif
mais je vais m'y atteler, j'en doute pas 1 seconde que les modifs seront un plus.

A suivre donc ...

Écrit par : rico76 17 Apr 2009, 11:41

Excellent travail shoprun tongue.gif !
ça donne réellement un plus pour la boutique. wink.gif

Écrit par : shoprun 19 Apr 2009, 09:18

Aussitôt dit, aussitôt fait, la contribution est dispo sur le site US : http://addons.oscommerce.com/info/6696

J'ai donc pigé les modifications de Gnidhal tongue.gif ... merci à toi wink.gif
Cette contribution intègre donc cette évolution, elle devient bien conçue pour du multi-langue, mais les traductions de même que les jours fériés des différentes langues n'y sont pas, c'est uniquement que pour le calendrier Français.

D'ailleurs, je n'est pas du tout fait d'essai dans ce cas de figure, surtout dans le cas où les jours fériés sont différents selon les langues.
A mon avis c'est mal goupillé ...
Pour faire simple, faudrait déplacer la fonction get_jours_ouvrables() ce trouvant dans catalog/includes/general.php et le mettre dans le french.php, english.php, etc ...
Ensuite il sera possible de définir des jours fériés différents selon les langues.
Il y surement mieux, mais faut se replonger dans le code wacko.gif

Vu que c'est devenu une contribution -> déplacé dans le forum en question.


/!\ Les codes fournis au tout début sont donc obsolètes ...
Je ferais le ménage une prochaine fois wink.gif

Écrit par : audioshop55 22 May 2009, 11:46

bonjour shoprun,

juste une petite question;

les modifications qui sont à faire dans catalog/includes/modules/shipping/flat.php

ils faut aussi les faire dans tous les fichiers présent dans ce dossier catalog/includes/modules/shipping ?

Écrit par : shoprun 22 May 2009, 15:50

Citation (audioshop55)
les modifications qui sont à faire dans catalog/includes/modules/shipping/flat.php
ils faut aussi les faire dans tous les fichiers présent dans ce dossier catalog/includes/modules/shipping ?
Pas obligatoirement, ça dépend si ça correspond ou non à son besoin.
En faite, le module "flat" n'est qu'à titre d'exemple, pour voir ce que ça donne en finalité grâce aux captures d'écran, et surtout pour savoir comment intégrer cette contrib et les codes dans son ou ses modules de livraisons.

Si par exemple on a un module comme "spu" (récupération sur place, dans la boutique), il est inutile de proposer un délai de livraison, c'est même absurde vu qu'il n'y a pas de livraison, c'est le client qui vient le chercher.

Écrit par : audioshop55 23 May 2009, 08:58

merci shoprun pour cette réponse.

j'ai donc réussis à intégrer cette contrib pour tout mes modules d'expéditions sauf 1 bien sur, ou j'aurais besoin de votre aide c'est pour colissimo !

apparemment quand je suis sur la page checkout_confirmation.php l'estimation est bien affiché quand je choisi le mode colissimo mais par contre il n'y est pas sur la page checkout_shipping.php comme on le vois sur cette image:

http://imagik.fr/view/60632

je vous met mon fichier colissimo.php aussi pour que vous puissiez voir ou j'ai du faire une erreur

http://dl.toofiles.com/evtq4m/documents/colissimo.txt


Écrit par : shoprun 23 May 2009, 14:23

@audioshop55
Le lien vers le fichier mène nulle part ... -> erreur 404

Écrit par : audioshop55 23 May 2009, 15:14

effectivement une petite erreur de manip sorry blush.gif

http://www.toofiles.com/fr/oip/documents/txt/6445_colissimo.html

par contre j'ai apporté quelques modifications sur le deuxieme fichier qui suit, et je pense que mes erreurs d'affichage ce situais là!
par contre j'ai pas encore pu le tester car je ne peux plus accéder à mon site j'ai un gros problème de serveur, vivement que je change d'hebergeur confused.gif

http://www.toofiles.com/fr/oip/documents/txt/colissimo_2.html

Écrit par : shoprun 23 May 2009, 15:32

En regardant dans ton colissomo_2.php, peut être faudrait il remonter le code du délai avant une condition, car plus bas dans les 2 else if() de cette même condition, le délai n'y est pas (apparemment).

Ce qui donnerait un code :

Code
    // Délai_minimum BOC
      $delai = $this->getDelai();
      if (($dest_country == 'FR') OR ($dest_country == 'FX') OR ($dest_country == 'MC')) {
... etc ...

Écrit par : audioshop55 24 May 2009, 20:08

ok merci shoprun, après la modif sur le fichier colissimo_2.php tout fonctionne correctement wink.gif


encore une chose , c'est possible d'afficher le délais de livraison sur chaque produit en expliquant que c'est une estimation et que si 1 produits prend plus de temps qu'un autre ce seras la durée la plus longue qui seras prise en compte?


merci encore pour ton aide

Écrit par : AlexKid 11 Dec 2009, 13:31

bonjour,
Super la contrib
mais j'ai un soucis avec le module colissimo çà ne marche pas du tout
Avez vous une solution pour corriger le module ?
Merçi d'avance
Alex

Écrit par : AlexKid 19 Dec 2009, 23:19

bonsoir à tous,

J'ai inséré ceci dans catalog/product_info.php

Code
// J'ai ajouté p.products_delai dans la ligne de lecture de la table

$product_info_query = tep_db_query("select p.products_id, pd.products_name, ..... , p.products_image, p.products_delai, pd.products_url, ......

// ensuite en dessous du prix ou du bouton "ajouter au panier"
// j'ai ajouté ces quelques lignes pour afficher un delai aproximatif de livraison

<tr><td align="left"><?php
// Livraison
echo tep_image(DIR_WS_IMAGES . 'icons/delivery.png', HEADER_TITLE_CHECKOUT, '15', '', 'hspace="5" vspace="5"')
?></td>
<td align="left" style="font-family:arial; font-size:9px;"><?php
echo TEXT_VEFROMSTORE;
echo '<br/>';
$delai_order = $product_info['products_delai'];
if (MODULE_SHIPPING_FLAT_DELAI_MINI > $delai_order) {
$delai_order = MODULE_SHIPPING_FLAT_DELAI_MINI;
}
$time = time();
$heure = (int)date("H", $time);
// Départ de la livraison le jour même ou le lendemain selon l'heure (12h00)
$date_depart = ($heure > 12) ? $time + 86400: $time;
$date_livraison = $date_depart + $delai_order;
// Comptabilise le nombre de jours ouvrables entre la période de livraison
$with_saterday = false; // Comptabilise pas les samedis
$with_sunday = true; // Comptabilise les dimanches
$verif_jour_livraison = true; // Vérifie si le jour de livraison est un jour ouvrable (si oui -> 1 jours de plus)
$totOuvrables = get_jours_ouvrables($date_depart, $date_livraison, $with_saterday, $with_sunday, $verif_jour_livraison);
// On ajoute les jour ouvrables : Timestamp du jour de livraison
$date_livraison += $totOuvrables * 86400;
//
$delai['delai'] = $delai_order / 86400;
$delai['date_liv'] = date(DATE_FORMAT, $date_livraison);

echo HEADING_SHIPPING_DATE;
echo $delai['date_liv'];
?> </td>
</tr>


Qu'en pensez-vous ?
Cordialement
Alex

Écrit par : AlexKid 20 Dec 2009, 18:10

bonsoir,

J'ai trouvé un peu de temps pour mettre à jour le module collissimo V1,8

Code
<?php
/*
  A partir de colissimoR1.php... Francois Pons

  The Exchange Project - Community Made Shopping!
  [url="http://www.theexchangeproject.org"]http://www.theexchangeproject.org[/url]

  Copyright (c) 2000,2001 The Exchange Project

  Released under the GNU General Public License

    adaptation Stéphane GUIBOUD-RIBAUD <[email="devteam@e-network.fr"]devteam@e-network.fr[/email]>
            xaglo <[email="xaglo@free.fr"]xaglo@free.fr[/email]>
      
MAJ v1.4.2 by fram 05/10/2003
MAJ v1.5 by lepoissonrouge 19/06/2005
MAJ v1.5.2 by lepoissonrouge 20/11/2005
MAJ v1.5.2 by bacri 01/02/2007
MAJ V1.6 by THEROTH 19/04/2008
MAJ V1.7 by THEROTH 20/04/2008
MAJ V1.8 by Nekosign 05/03/2009


[url="http://www.oscommerce-fr.info"]www.oscommerce-fr.info[/url]
*/


  class colissimo {
    var $code, $title, $description, $icon, $enabled;

// class constructor
    function colissimo()
{
      $this->code = 'colissimo';
      $this->title = MODULE_SHIPPING_COLISSIMO_TEXT_TITLE;
      $this->description = MODULE_SHIPPING_COLISSIMO_TEXT_DESCRIPTION;
      $this->sort_order = MODULE_SHIPPING_COLISSIMO_SORT_ORDER;
      $this->icon = DIR_WS_ICONS . 'shipping_colissimo.gif';
      $this->tax_class = MODULE_SHIPPING_COLISSIMO_TAX_CLASS;
      $this->enabled = MODULE_SHIPPING_COLISSIMO_STATUS;
      $this->num_international = 4; //Nbr de zone International
// disable the module if the order only weight > 30
      global $PHP_SELF;
        if (basename($PHP_SELF) != FILENAME_MODULES) {
      global $cart , $order;
        if ($this->enabled == true) {
/*        $dest_country = $order->delivery['country']['iso_code_2'];
        if (($dest_country != 'FR') && ($dest_country != 'FX') && ($dest_country != 'GP') && ($dest_country != 'MQ') && ($dest_country != 'GF') && ($dest_country != 'RE') && ($dest_country != 'YT') && ($dest_country != 'PM')  && ($dest_country != 'NC') && ($dest_country != 'PF') && ($dest_country != 'WF') && ($dest_country != 'TF')) {
         $this->enabled = false;
        }*/
        if ($cart->show_weight() > '30') {
     $this->enabled = false;
        }
        }
        }
}

    // delai_livraison BOC
    function getDelai() {
        global $order;
    
        $delai = array();
        $totOuvrables = 0;
        $delai_order = (int)$order->info['delaiMax'];
        // Le délai minimum remplace le délai max des produits si celui ci est plus grand
        if (MODULE_SHIPPING_COLISSIMO_DELAI_MINI > $delai_order) {
            $delai_order = MODULE_SHIPPING_COLISSIMO_DELAI_MINI;
        }
        $time = time();
        $heure = (int)date("H", $time);
        // Départ de la livraison le jour même ou le lendemain selon l'heure (12h00)
        $date_depart = ($heure > 12) ? $time + 86400: $time;
        $date_livraison = $date_depart + $delai_order;
        // Comptabilise le nombre de jours ouvrables entre la période de livraison
        $with_saterday = false; // Comptabilise pas les samedis
        $with_sunday = true; // Comptabilise les dimanches
        $verif_jour_livraison = true; // Vérifie si le jour de livraison est un jour ouvrable (si oui -> 1 jours de plus)
        $totOuvrables = get_jours_ouvrables($date_depart, $date_livraison, $with_saterday, $with_sunday, $verif_jour_livraison);
        // On ajoute les jour ouvrables : Timestamp du jour de livraison
        $date_livraison += $totOuvrables * 86400;
        //
        $delai['delai'] = $delai_order / 86400;
        $delai['date_liv'] = date(DATE_FORMAT, $date_livraison);
        return $delai;
    }
    // delai_livraison EOC

// class methods
    function quote($method = '')
{
      global $order, $cart, $shipping_weight;
      
      $dest_country = $order->delivery['country']['iso_code_2'];
      
if (($dest_country == 'FR') OR ($dest_country == 'FX') OR ($dest_country == 'MC')) {


      $delai = $this->getDelai();
   $this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_COLISSIMO_TEXT_TITLE . ' NATIONAL (' . $shipping_weight .' Kg)');
   $methods = array();
  
      if (tep_not_null($this->icon))
$this->quotes['icon'] = tep_image($this->icon, $this->title);


$auto= constant('MODULE_SHIPPING_COLISSIMO_R1R5');
$total = $cart->show_total();

$cost = constant('MODULE_SHIPPING_COLISSIMO_NATIONAL');
$cost1 = constant('MODULE_SHIPPING_COLISSIMOR1_NATIONAL');
$cost2 = constant('MODULE_SHIPPING_COLISSIMOR2_NATIONAL');
$cost3 = constant('MODULE_SHIPPING_COLISSIMOR3_NATIONAL');
$cost4 = constant('MODULE_SHIPPING_COLISSIMOR4_NATIONAL');
$cost5 = constant('MODULE_SHIPPING_COLISSIMOR5_NATIONAL');
$table = split("[:,]" , $cost);
    $table1 = split("[:,]" , $cost1);
    $table2 = split("[:,]" , $cost2);
    $table3 = split("[:,]" , $cost3);
    $table4 = split("[:,]" , $cost4);
    $table5 = split("[:,]" , $cost5);

    $j="0";
    $k="0";
    for ($i = 0; $i < sizeof($table); $i+=2) {
      
if ($shipping_weight > $table[$i])
   continue;
  if (($shipping_weight < $table[$i]) && ($j== '0')) {
   if($auto=="True"){
  
    if(($total<=50)&&($k=="0")){
    $methods[] = array('id' => "R1",
           'delai' => sprintf(MODULE_SHIPPING_ITEM_DELAI, $delai['delai'], $delai['date_liv']),
           'title' => MODULE_SHIPPING_COLISSIMOR1_TEXT_TITLE,
           'cost' => $table1[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>50) && ($total<=200)&&($k=="0")){
    $methods[] = array('id' => "R2", 'title' => MODULE_SHIPPING_COLISSIMOR2_TEXT_TITLE, 'cost' => $table2[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>200) && ($total<=400)&&($k=="0")){
    $methods[] = array('id' => "R3", 'title' => MODULE_SHIPPING_COLISSIMOR3_TEXT_TITLE, 'cost' => $table3[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>400) && ($total<=600)&&($k=="0")){
    $methods[] = array('id' => "R4", 'title' => MODULE_SHIPPING_COLISSIMOR4_TEXT_TITLE, 'cost' => $table4[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>600)&&($k=="0")){
    $methods[] = array('id' => "R5", 'title' => MODULE_SHIPPING_COLISSIMOR5_TEXT_TITLE, 'cost' => $table5[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }
   }else{
    if ( $method == '' || $method == "R0" ) {
    $methods[] = array('id' => "R0",
           'delai' => sprintf(MODULE_SHIPPING_COLISSIMO_DELAI, $delai['delai'], $delai['date_liv']),
           'title' => MODULE_SHIPPING_COLISSIMOR_TEXT_TITLE,
           'cost' => $table[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "R1" ) {
    $methods[] = array('id' => "R1", 'title' => MODULE_SHIPPING_COLISSIMOR1_TEXT_TITLE, 'cost' => $table1[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "R2" ) {
    $methods[] = array('id' => "R2", 'title' => MODULE_SHIPPING_COLISSIMOR2_TEXT_TITLE, 'cost' => $table2[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "R3" ) {
    $methods[] = array('id' => "R3", 'title' => MODULE_SHIPPING_COLISSIMOR3_TEXT_TITLE, 'cost' => $table3[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "R4" ) {
    $methods[] = array('id' => "R4", 'title' => MODULE_SHIPPING_COLISSIMOR4_TEXT_TITLE, 'cost' => $table4[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "R5" ) {
    $methods[] = array('id' => "R5", 'title' => MODULE_SHIPPING_COLISSIMOR5_TEXT_TITLE, 'cost' => $table5[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }
    $j="2";
   }
  }

    }
      
      
$this->quotes['methods'] = $methods;
    return $this->quotes;
    
    
    
    }elseif(($dest_country == 'GP') OR ($dest_country == 'MQ') OR ($dest_country == 'GF') OR ($dest_country == 'RE') OR ($dest_country == 'YT') OR ($dest_country == 'PM')) {
     if(constant('MODULE_SHIPPING_COLISSIMO_DOM_STATUS')=="True"){  
    
    
    $delai = $this->getDelai();
$this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_COLISSIMO_TEXT_TITLE . ' DOM (' . $shipping_weight .' Kg)');
   $methods = array();
  
      if (tep_not_null($this->icon))
$this->quotes['icon'] = tep_image($this->icon, $this->title);


$auto= constant('MODULE_SHIPPING_COLISSIMO_R1R5');
$total = $cart->show_total();

$cost = constant('MODULE_SHIPPING_COLISSIMO_DOM');
$cost1 = constant('MODULE_SHIPPING_COLISSIMOR1_DOM');
$cost2 = constant('MODULE_SHIPPING_COLISSIMOR2_DOM');
$cost3 = constant('MODULE_SHIPPING_COLISSIMOR3_DOM');
$cost4 = constant('MODULE_SHIPPING_COLISSIMOR4_DOM');
$cost5 = constant('MODULE_SHIPPING_COLISSIMOR5_DOM');
$table = split("[:,]" , $cost);
    $table1 = split("[:,]" , $cost1);
    $table2 = split("[:,]" , $cost2);
    $table3 = split("[:,]" , $cost3);
    $table4 = split("[:,]" , $cost4);
    $table5 = split("[:,]" , $cost5);

    $j="0";
    $k="0";
    for ($i = 0; $i < sizeof($table); $i+=2) {
      
if ($shipping_weight > $table[$i])
   continue;
  if (($shipping_weight < $table[$i]) && ($j== '0')) {
   if($auto=="True"){
  
    if(($total<=50)&&($k=="0")){
    $methods[] = array('id' => "DOMR1",
           'delai' => sprintf(MODULE_SHIPPING_COLISSIMO_DELAI, $delai['delai'], $delai['date_liv']),
           'title' => MODULE_SHIPPING_COLISSIMOR1_TEXT_TITLE,
           'cost' => $table1[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>50) && ($total<=200)&&($k=="0")){
    $methods[] = array('id' => "DOMR2", 'title' => MODULE_SHIPPING_COLISSIMOR2_TEXT_TITLE, 'cost' => $table2[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>200) && ($total<=400)&&($k=="0")){
    $methods[] = array('id' => "DOMR3", 'title' => MODULE_SHIPPING_COLISSIMOR3_TEXT_TITLE, 'cost' => $table3[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>400) && ($total<=600)&&($k=="0")){
    $methods[] = array('id' => "DOMR4", 'title' => MODULE_SHIPPING_COLISSIMOR4_TEXT_TITLE, 'cost' => $table4[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>600)&&($k=="0")){
    $methods[] = array('id' => "DOMR5", 'title' => MODULE_SHIPPING_COLISSIMOR5_TEXT_TITLE, 'cost' => $table5[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }
   }else{
    if ( $method == '' || $method == "DOMR0" ) {
    $methods[] = array('id' => "DOMR0",
           'delai' => sprintf(MODULE_SHIPPING_COLISSIMO_DELAI, $delai['delai'], $delai['date_liv']),
           'title' => MODULE_SHIPPING_COLISSIMOR_TEXT_TITLE,
           'cost' => $table[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "DOMR1" ) {
    $methods[] = array('id' => "DOMR1", 'title' => MODULE_SHIPPING_COLISSIMOR1_TEXT_TITLE, 'cost' => $table1[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "DOMR2" ) {
    $methods[] = array('id' => "DOMR2", 'title' => MODULE_SHIPPING_COLISSIMOR2_TEXT_TITLE, 'cost' => $table2[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "DOMR3" ) {
    $methods[] = array('id' => "DOMR3", 'title' => MODULE_SHIPPING_COLISSIMOR3_TEXT_TITLE, 'cost' => $table3[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "DOMR4" ) {
    $methods[] = array('id' => "DOMR4", 'title' => MODULE_SHIPPING_COLISSIMOR4_TEXT_TITLE, 'cost' => $table4[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "DOMR5" ) {
    $methods[] = array('id' => "DOMR5", 'title' => MODULE_SHIPPING_COLISSIMOR5_TEXT_TITLE, 'cost' => $table5[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }
    $j="2";
   }
  }

    }
      
      
$this->quotes['methods'] = $methods;
    return $this->quotes;
    
    }
    
    }elseif(($dest_country == 'NC') OR ($dest_country == 'PF') OR ($dest_country == 'WF') OR ($dest_country == 'TF')) {
    
    if(constant('MODULE_SHIPPING_COLISSIMO_TOM_STATUS')=="True"){
    
$delai = $this->getDelai();
$this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_COLISSIMO_TEXT_TITLE . ' TOM (' . $shipping_weight .' Kg)');
   $methods = array();
  
      if (tep_not_null($this->icon))
$this->quotes['icon'] = tep_image($this->icon, $this->title);


$auto= constant('MODULE_SHIPPING_COLISSIMO_R1R5');
$total = $cart->show_total();

$cost = constant('MODULE_SHIPPING_COLISSIMO_TOM');
$cost1 = constant('MODULE_SHIPPING_COLISSIMOR1_TOM');
$cost2 = constant('MODULE_SHIPPING_COLISSIMOR2_TOM');
$cost3 = constant('MODULE_SHIPPING_COLISSIMOR3_TOM');
$cost4 = constant('MODULE_SHIPPING_COLISSIMOR4_TOM');
$cost5 = constant('MODULE_SHIPPING_COLISSIMOR5_TOM');
$table = split("[:,]" , $cost);
    $table1 = split("[:,]" , $cost1);
    $table2 = split("[:,]" , $cost2);
    $table3 = split("[:,]" , $cost3);
    $table4 = split("[:,]" , $cost4);
    $table5 = split("[:,]" , $cost5);

    $j="0";
    $k="0";
    for ($i = 0; $i < sizeof($table); $i+=2) {
      
if ($shipping_weight > $table[$i])
   continue;
  if (($shipping_weight < $table[$i]) && ($j== '0')) {
   if($auto=="True"){
  
    if(($total<=50)&&($k=="0")){
    $methods[] = array('id' => "TOMR1",
           'delai' => sprintf(MODULE_SHIPPING_COLISSIMO_DELAI, $delai['delai'], $delai['date_liv']),
           'title' => MODULE_SHIPPING_COLISSIMOR1_TEXT_TITLE,
           'cost' => $table1[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>50) && ($total<=200)&&($k=="0")){
    $methods[] = array('id' => "TOMR2", 'title' => MODULE_SHIPPING_COLISSIMOR2_TEXT_TITLE, 'cost' => $table2[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>200) && ($total<=400)&&($k=="0")){
    $methods[] = array('id' => "TOMR3", 'title' => MODULE_SHIPPING_COLISSIMOR3_TEXT_TITLE, 'cost' => $table3[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>400) && ($total<=600)&&($k=="0")){
    $methods[] = array('id' => "TOMR4", 'title' => MODULE_SHIPPING_COLISSIMOR4_TEXT_TITLE, 'cost' => $table4[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }elseif(($total>600)&&($k=="0")){
    $methods[] = array('id' => "TOMR5", 'title' => MODULE_SHIPPING_COLISSIMOR5_TEXT_TITLE, 'cost' => $table5[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    $k++;
    }
   }else{
    if ( $method == '' || $method == "TOMR0" ) {
    $methods[] = array('id' => "TOMR0",
           'delai' => sprintf(MODULE_SHIPPING_COLISSIMO_DELAI, $delai['delai'], $delai['date_liv']),
           'title' => MODULE_SHIPPING_COLISSIMOR_TEXT_TITLE,
           'cost' => $table[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "TOMR1" ) {
    $methods[] = array('id' => "TOMR1", 'title' => MODULE_SHIPPING_COLISSIMOR1_TEXT_TITLE, 'cost' => $table1[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "TOMR2" ) {
    $methods[] = array('id' => "TOMR2", 'title' => MODULE_SHIPPING_COLISSIMOR2_TEXT_TITLE, 'cost' => $table2[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "TOMR3" ) {
    $methods[] = array('id' => "TOMR3", 'title' => MODULE_SHIPPING_COLISSIMOR3_TEXT_TITLE, 'cost' => $table3[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "TOMR4" ) {
    $methods[] = array('id' => "TOMR4", 'title' => MODULE_SHIPPING_COLISSIMOR4_TEXT_TITLE, 'cost' => $table4[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }if ( $method == '' || $method == "TOMR5" ) {
    $methods[] = array('id' => "TOMR5", 'title' => MODULE_SHIPPING_COLISSIMOR5_TEXT_TITLE, 'cost' => $table5[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING);
    }
    $j="2";
   }
  }

    }
      
      
$this->quotes['methods'] = $methods;
    return $this->quotes;
    }
    
    }elseif(constant('MODULE_SHIPPING_COLISSIMO_INT_STATUS')=="True"){
    
    $this->icon = DIR_WS_ICONS . 'shipping_colissimoINT.gif';
    $delai = $this->getDelai();
    $this->quotes = array('id'      => $this->code,
                            'module'  => MODULE_SHIPPING_COLISSIMO_TEXT_TITLE . ' International (' . $shipping_weight .' Kg)',
                            'methods' => array());

      if (tep_not_null($this->icon))
$this->quotes['icon'] = tep_image($this->icon, $this->title);

      if ($this->tax_class > 0)
        $this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);

      $dest_country = $order->delivery['country']['iso_code_2'];
      $dest_zone = 0;
      for ($i = 1; $i <= $this->num_international; $i ++) {
$countries_table = constant('MODULE_SHIPPING_COLISSIMO_INT_COUNTRIES_' . $i);
$country = split("[, ]", $countries_table);
if ( in_array($dest_country, $country ) ) {
   $dest_zone = $i;
   break;
}
      }
      if ($dest_zone == 0) {
$this->quotes['error'] = MODULE_SHIPPING_COLISSIMO_INT_INVALID_ZONE;
return $this->quotes;
      }

      $table = split("[:,]" , constant('MODULE_SHIPPING_COLISSIMO_INT_COST_' . $dest_zone));
      $cost = -1;
      for ($i = 0, $n = sizeof($table); $i < $n; $i+=2) {
if ($shipping_weight <= $table[$i]) {
   $cost = $table[$i+1] + MODULE_SHIPPING_COLISSIMO_HANDLING + SHIPPING_HANDLING;
   break;
}
      }

      if ($cost == -1) {
$this->quotes['error'] = MODULE_SHIPPING_COLISSIMO_INT_UNDEFINED_RATE;
return $this->quotes;
      }

      $this->quotes['methods'][] = array('id'    => $this->code,
           'title' => MODULE_SHIPPING_COLISSIMO_INT_TEXT_WAY . ' ' . $order->delivery['country']['title'],
            'delai' => sprintf(MODULE_SHIPPING_COLISSIMO_DELAI, $delai['delai'], $delai['date_liv']),
           'cost'  => $cost + MODULE_SHIPPING_COLISSIMO_HANDLING + SHIPPING_HANDLING);

      return $this->quotes;
    
    
    }



}
    function check() {
      $check = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_COLISSIMO_STATUS'");
      $check = tep_db_num_rows($check);

      return $check;
    }
    

    function install() {
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Activer Module Colissimo', 'MODULE_SHIPPING_COLISSIMO_STATUS', 'True', 'Activer / Désactiver Colissimo sans perdre les valeurs changés', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Frais fixes', 'MODULE_SHIPPING_COLISSIMO_HANDLING', '0', 'Frais fixes (emballage) pour colissimo', '6', '0', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Classe de taxe', 'MODULE_SHIPPING_COLISSIMO_TAX_CLASS', '0', 'Appliquer le taux de taxe suivant sur les frais de livraison.', '6', '0', 'tep_get_tax_class_title', 'tep_cfg_pull_down_tax_classes(', now())");
   tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Ordre de tri', 'MODULE_SHIPPING_COLISSIMO_SORT_ORDER', '0', 'Ordre de tri pour l\'affichage (Le plus petit nombre est montré en premier).', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo', 'MODULE_SHIPPING_COLISSIMO_NATIONAL', '0.500:5.50, 1:6.70, 2:7.65, 3:8.60, 5:10.50, 7:12.40, 10:15.25, 15:17.25, 30:23.25', 'Tarif TTC Colissimo sans assurance', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo R1', 'MODULE_SHIPPING_COLISSIMOR1_NATIONAL', '0.500:7.80, 1:9.00, 2:9.95, 3:10.90, 5:12.80, 7:14.70, 10:17.55, 15:19.55, 30:25.55', 'Tarif TTC Colissimo R1.', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo R2', 'MODULE_SHIPPING_COLISSIMOR2_NATIONAL', '0.500:8.70, 1:9.90, 2:10.85, 3:11.80, 5:13.70, 7:15.60, 10:18.45, 15:20.45, 30:26.45', 'Tarif TTC Colissimo R2', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo R3', 'MODULE_SHIPPING_COLISSIMOR3_NATIONAL', '0.500:9.90, 1:11.10, 2:12.05, 3:13.00, 5:14.90, 7:16.80, 10:19.65, 15:21.65, 30:27.65', 'Tarif TTC Colissimo R3', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo R4', 'MODULE_SHIPPING_COLISSIMOR4_NATIONAL', '0.500:11.10, 1:12.30, 2:13.25, 3:14.20, 5:16.10, 7:18.00, 10:20.85, 15:22.85, 30:28.85', 'Tarif TTC Colissimo R4', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo R5', 'MODULE_SHIPPING_COLISSIMOR5_NATIONAL', '0.500:12.30, 1:13.50, 2:14.45, 3:15.40, 5:17.30, 7:19.20, 10:22.05, 15:24.05, 30:30.05', 'Tarif TTC Colissimo R5', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Activer Colissimo DOM', 'MODULE_SHIPPING_COLISSIMO_DOM_STATUS', 'True', 'Activer / Désactiver Colissimo dans les DOM', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo DOM', 'MODULE_SHIPPING_COLISSIMO_DOM', '0.500:8.35, 1:12.55, 2:17.15, 3:21.75, 4:26.35, 5:30.95, 6:35.55, 7:40.15, 8:44.75, 9:49.35, 10:53.95, 15:76.95, 20:99.95, 25:122.95, 30:145.95', 'Tarif TTC Colissimo DOM sans assurance', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo DOM R1', 'MODULE_SHIPPING_COLISSIMOR1_DOM', '0.500:10.65, 1:14.85, 2:19.45, 3:24.05, 4:28.65, 5:33.25, 6:37.85, 7:42.45, 8:47.05, 9:51.65, 10:56.25, 15:79.25, 20:102.25, 25:125.25, 30:148.25', 'Tarif TTC Colissimo DOM R1', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo DOM R2', 'MODULE_SHIPPING_COLISSIMOR2_DOM', '0.500:11.55, 1:15.75, 2:20.35, 3:24.95, 4:29.55, 5:34.15, 6:38.75, 7:43.35, 8:47.95, 9:52.55, 10:57.15, 15:80.15, 20:103.14, 25:126.15, 30:149.15', 'Tarif TTC Colissimo DOM R2', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo DOM R3', 'MODULE_SHIPPING_COLISSIMOR3_DOM', '0.500:12.75, 1:16.95, 2:21.55, 3:26.15, 4:30.75, 5:35.35, 6:39.95, 7:44.55, 8:49.15, 9:53.75, 10:58.35, 15:81.35, 20:104.35, 25:127.35, 30:150.35', 'Tarif TTC Colissimo DOM R3', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo DOM R4', 'MODULE_SHIPPING_COLISSIMOR4_DOM', '0.500:13.95, 1:18.15, 2:22.75, 3:27.35, 4:31.95, 5:36.55, 6:41.15, 7:45.75, 8:50.35, 9:54.95, 10:59.55, 15:82.55, 20:105.55, 25:128.55, 30:151.55', 'Tarif TTC Colissimo DOM R4', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo DOM R5', 'MODULE_SHIPPING_COLISSIMOR5_DOM', '0.500:15.15, 1:19.35, 2:23.95, 3:28.55, 4:33.15, 5:37.75, 6:42.35, 7:46.95, 8:51.55, 9:56.15, 10:60.75, 15:83.75, 20:106.75, 25:129.75, 30:152.75', 'Tarif TTC Colissimo DOM R5', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Activer Colissimo TOM', 'MODULE_SHIPPING_COLISSIMO_TOM_STATUS', 'True', 'Activer / Désactiver Colissimo dans les TOM', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo TOM', 'MODULE_SHIPPING_COLISSIMO_TOM', '0.500:10.00, 1:15.00, 2:26.50, 3:38.00, 4:49.50, 5:61.00, 6:72.50, 7:84.00, 8:95.50, 9:107.00, 10:118.50, 15:176.50, 20:234.50, 25:292.50, 30:350.50', 'Tarif TTC Colissimo TOM sans assurance', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo TOM R1', 'MODULE_SHIPPING_COLISSIMOR1_TOM', '0.500:12.30, 1:17.30, 2:28.80, 3:40.30, 4:51.80, 5:63.30, 6:74.80, 7:86.30, 8:97.80, 9:109.30, 10:120.80, 15:178.80, 20:236.80, 25:294.80, 30:352.80', 'Tarif TTC Colissimo TOM R1', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo TOM R2', 'MODULE_SHIPPING_COLISSIMOR2_TOM', '0.500:13.20, 1:18.20, 2:29.70, 3:41.20, 4:52.70, 5:64.20, 6:75.70, 7:87.20, 8:98.70, 9:110.20, 10:121.70, 15:179.70, 20:237.70, 25:295.70, 30:353.70', 'Tarif TTC Colissimo TOM R2', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo TOM R3', 'MODULE_SHIPPING_COLISSIMOR3_TOM', '0.500:14.40, 1:19.40, 2:30.90, 3:42.40, 4:53.90, 5:65.40, 6:76.90, 7:88.40, 8:99.90, 9:111.40, 10:122.90, 15:180.90, 20:238.90, 25:296.90, 30:354.90', 'Tarif TTC Colissimo TOM R3', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo TOM R4', 'MODULE_SHIPPING_COLISSIMOR4_TOM', '0.500:15.60, 1:20.60, 2:32.10, 3:43.60, 4:55.10, 5:66.60, 6:78.10, 7:89.60, 8:101.10, 9:112.60, 10:124.10, 15:182.10, 20:240.10, 25:298.10, 30:356.10', 'Tarif TTC Colissimo TOM R4', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo TOM R5', 'MODULE_SHIPPING_COLISSIMOR5_TOM', '0.500:16.80, 1:21.80, 2:33.30, 3:44.80, 4:56.30, 5:67.80, 6:79.30, 7:90.80, 8:102.30, 9:113.80, 10:125.30, 15:183.30, 20:241.30, 25:299.30, 30:357.30', 'Tarif TTC Colissimo TOM R5', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Activer Colissimo International', 'MODULE_SHIPPING_COLISSIMO_INT_STATUS', 'True', 'Activer / Désactiver Colissimo dans International', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo Zone A (pays)', 'MODULE_SHIPPING_COLISSIMO_INT_COUNTRIES_1', 'AT, AD, AX, BE, BG, BL, CH, CY, CZ, DE, DK, ES, EE, FI, GB, GF, GI, GP, GR, HU, IE, IT, LT, LU, LV, MF, MQ, MT, NL, PL, PT, RE, RO, SE, SI, SK', 'Insérer une virgule entre 2 codes ISO de pays qui font partie de la mme zone', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo Zone A (poids:tarifs)', 'MODULE_SHIPPING_COLISSIMO_INT_COST_1', '1:15.90, 2:17.45, 3:21.05, 4:24.65, 5:28.25, 6:31.85, 7:35.45, 8:39.05, 9:42.65, 10:46.25, 15:53.25, 20:60.25, 25:67.25, 30:74.25', 'Tarifs Colissimo international pour les destinations de la Zone A. ', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo Zone B (pays)', 'MODULE_SHIPPING_COLISSIMO_INT_COUNTRIES_2', 'AL, DZ, BY, BA, BG, HR, CZ', 'Insérer une virgule entre 2 codes ISO de pays qui font partie de la même zone', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo Zone B (poids:tarifs)', 'MODULE_SHIPPING_COLISSIMO_INT_COST_2', '1:19.20, 2:21.10, 3:25.50, 4:29.90, 5:34.30, 6:38.70, 7:43.10, 8:47.50, 9:51.90, 10:56.30, 15:66.40, 20:76.50, 25:86.60, 30:96.70', 'Tarifs Colissimo international pour les destinations de la Zone B. ', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo Zone C (pays)', 'MODULE_SHIPPING_COLISSIMO_INT_COUNTRIES_3', 'AF, AO, AI, AG, AM, AZ, BJ, BM, BW, BF, BI, CM, CA, CV, CF, TD, CG, CI, CY, CJ, US, UM', 'Insérer une virgule entre 2 codes ISO de pays qui font partie de la même zone', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo Zone C (poids:tarifs)', 'MODULE_SHIPPING_COLISSIMO_INT_COST_3', '1:22.10, 2:29.50, 3:38.70, 4:47.90, 5:57.10, 6:66.30, 7:75.50, 8:84.70, 9:93.90, 10:103.10, 15:126.10, 20:149.10, 25:172.10, 30:195.10', 'Tarifs Colissimo international pour les destinations de la Zone C. ', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo Zone D (pays)', 'MODULE_SHIPPING_COLISSIMO_INT_COUNTRIES_4', 'AS, AQ, AR, AW, AU, BS, BH, BD, BB, BZ, BT, BO, BV, BR, IO, BN, KH, KY, CL, CN, CX, CC, CO, KM, CK, CR, CU, DO', 'Insérer une virgule entre 2 codes ISO de pays qui font partie de la même zone', '6', '0', now())");
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Colissimo Zone D (poids:tarifs)', 'MODULE_SHIPPING_COLISSIMO_INT_COST_4', '1:24.40, 2:36.60, 3:48.80, 4:61.00, 5:73.20, 6:85.40, 7:97.60, 8:109.80, 9:122.00, 10:134.20, 15:158.60, 20:183.00, 25:231.80, 30:280.60', 'Tarifs Colissimo international pour les destinations de la Zone D. ', '6', '0', now())");
   tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Selection Automatique du R1 à R5', 'MODULE_SHIPPING_COLISSIMO_R1R5', 'True', 'Selon le montant du panier, il choisit le bon recommandé', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
      // Délai_minimum BOC (L'ordre des positions sont redéfini -> sort_order)
      // Ajout constante -> MODULE_SHIPPING_COLISSIMO_DELAI_MINI
      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Délai minimum', 'MODULE_SHIPPING_COLISSIMO_DELAI_MINI', '172800', 'Délai minimum de jours ouvrés de livraison', '6', '2', 'tep_get_delai_title', 'tep_cfg_pull_down_delai(', now())");
      // Délai_minimum EOC
}

    function remove() {
      tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
    }

    function keys() {
      return array('MODULE_SHIPPING_COLISSIMO_STATUS',  
  'MODULE_SHIPPING_COLISSIMO_HANDLING',
  'MODULE_SHIPPING_COLISSIMO_DELAI_MINI',
  'MODULE_SHIPPING_COLISSIMO_TAX_CLASS',
  'MODULE_SHIPPING_COLISSIMO_R1R5',
  'MODULE_SHIPPING_COLISSIMO_NATIONAL',
  'MODULE_SHIPPING_COLISSIMOR1_NATIONAL',
  'MODULE_SHIPPING_COLISSIMOR2_NATIONAL',
  'MODULE_SHIPPING_COLISSIMOR3_NATIONAL',
  'MODULE_SHIPPING_COLISSIMOR4_NATIONAL',
  'MODULE_SHIPPING_COLISSIMOR5_NATIONAL',
  'MODULE_SHIPPING_COLISSIMO_DOM_STATUS',
  'MODULE_SHIPPING_COLISSIMO_DOM',
  'MODULE_SHIPPING_COLISSIMOR1_DOM',
  'MODULE_SHIPPING_COLISSIMOR2_DOM',
  'MODULE_SHIPPING_COLISSIMOR3_DOM',
  'MODULE_SHIPPING_COLISSIMOR4_DOM',
  'MODULE_SHIPPING_COLISSIMOR5_DOM',
  'MODULE_SHIPPING_COLISSIMO_TOM_STATUS',
  'MODULE_SHIPPING_COLISSIMO_TOM',
  'MODULE_SHIPPING_COLISSIMOR1_TOM',
  'MODULE_SHIPPING_COLISSIMOR2_TOM',
  'MODULE_SHIPPING_COLISSIMOR3_TOM',
  'MODULE_SHIPPING_COLISSIMOR4_TOM',
  'MODULE_SHIPPING_COLISSIMOR5_TOM',
  'MODULE_SHIPPING_COLISSIMO_INT_STATUS',
  'MODULE_SHIPPING_COLISSIMO_INT_COUNTRIES_1',
  'MODULE_SHIPPING_COLISSIMO_INT_COST_1',
  'MODULE_SHIPPING_COLISSIMO_INT_COUNTRIES_2',
  'MODULE_SHIPPING_COLISSIMO_INT_COST_2',
  'MODULE_SHIPPING_COLISSIMO_INT_COUNTRIES_3',
  'MODULE_SHIPPING_COLISSIMO_INT_COST_3',
  'MODULE_SHIPPING_COLISSIMO_INT_COUNTRIES_4',
  'MODULE_SHIPPING_COLISSIMO_INT_COST_4',
  'MODULE_SHIPPING_COLISSIMO_SORT_ORDER',);
    }

    // delai_livraison BOC
    function confirmation() {
        $delai = $this->getDelai();
        $fields[] = array('title' => HEADING_SHIPPING_DATE, 'field' => sprintf(MODULE_SHIPPING_COLISSIMO_DELAI, $delai['delai'], $delai['date_liv']));
        return array('title' => HEADING_SHIPPING_INFORMATION,
                        'fields' => $fields);
    }
    // delai_livraison EOC

  }
?>

Je pense que çà vous ferra gagner un peu de temps
Cordialement
Alex


Écrit par : ThaPL 22 Jan 2010, 14:40

Salut,

@ AlexKid, j'ai utiliser ton fichier colissimo, en effet cela m'a fait gagner pas mal de temps (vu mon niveau de debutant), mais par contre lord de la selection du mode de livraison, la date de livraison estimer n'est pas afficher alors que pour les autres modules elle est bien visible.

Sinon j'ai ajouter l'estimation de la date de livraison a la contrib French Lettermax v4, tout semble ok, donc je vous met le fichier meme si c'est pas un exploit en soit, ca fera encore gagner du temps a d'autre.

/catalog/includes/modules/shipping/lettermax.php:

Code
<?php
/*
   $Id: lettermax.php,v 1.40 2003/02/05 22:41:52 hpdl Exp $

   osCommerce, Open Source E-Commerce Solutions
   http://www.oscommerce.com

   Copyright (c) 2003 osCommerce

   Released under the GNU General Public License

   LETTERMAX
*/

class lettermax {
     var $code;
     var $title;
     var $description;
     var $icon;
     var $enabled;
     //
     var $prods;       // Liste des produits (quantités éliminé)
     var $totalProds;  // Nombre total de produits (réel : sans les quantités)
     var $weightProds; // Poids total des produits (du panier) -> Poids au Kg
     //
     var $nbMax;       // Nombre total de model de lettre Max (checké ou pas)
     var $checkMax;    // Etat du model (true ou false) : Pour le proposer ou pas
     var $indiceMax;   // Indice (ou la clé) du format Lettre Max sélectionné
     //
     var $models;      // Les modèles de LettreMax
                       //   name : Model de lettre MAX (MAX20g, MAX50g, MAX1, MAX2, MAX3, MAX4)
                       // length : Longueur maxi du format lettre -> mm
                       //  width : Largeur maxi du format lettre -> mm
                       // height : Hauteur maxi du format lettre -> mm
                       // weight : (Poids maxi du format lettre - Poids de la tare d'emballage) -> Kg
                       //   cost : Tarif du format lettre
                       // Tarif de l'indemnisation (assurance) du format lettre
     //
    
     // class constructor
     function lettermax() {
         global $PHP_SELF;
        
         $this->code = 'lettermax';
         $this->title = MODULE_SHIPPING_LETTERMAX_TEXT_TITLE;
         $this->description = MODULE_SHIPPING_LETTERMAX_TEXT_DESCRIPTION;
         $this->sort_order = MODULE_SHIPPING_LETTERMAX_SORT_ORDER;
         $this->icon = 'lettermax.gif';
         $this->tax_class = MODULE_SHIPPING_LETTERMAX_TAX_CLASS;
         $this->enabled = ((MODULE_SHIPPING_LETTERMAX_STATUS == 'True') ? true : false);
         //
         $this->prods = array();
         $this->totalProds = 0;
         $this->weightProds = 0;
         $this->nbMax = 0;
         $this->indiceMax = null;
         $this->models = array();
         //
        
         if (basename($PHP_SELF) != FILENAME_MODULES) {
             global $order;
            
             if ($this->enabled == true && (int)MODULE_SHIPPING_LETTERMAX_ZONE > 0) {
                 $check_flag = false;
                 $check_query = tep_db_query("select zone_id from ".TABLE_ZONES_TO_GEO_ZONES." where geo_zone_id = '".MODULE_SHIPPING_LETTERMAX_ZONE."' and zone_country_id = '".$order->delivery['country']['id']."' order by zone_id");
                 while ($check = tep_db_fetch_array($check_query)) {
                     if ($check['zone_id'] < 1) {
                         $check_flag = true;
                         break;
                     }
                     elseif ($check['zone_id'] == $order->delivery['zone_id']) {
                         $check_flag = true;
                         break;
                     }
                 }
                
                 if ($check_flag == false) {
                     $this->enabled = false;
                 }
             }
            
             // Construction du tableau des produits
             $this->initLetterMax();
             //
             if ($this->enabled === true) {
                 // Calcul/vérifie le volume/les dimensions/le poids des produits
                 $this->enabled = $this->verifLettreMax();
             }
         }
     }
    
     // Construit le tableau des produits
     // Elimine les quantité de produits
     function initLetterMax() {
         global $cart, $order;
        
         // Récupère les modèles de LettreMax :
         // -> correspond à la zone de livraison
         // -> dont le statut est valide
         $letter_query = tep_db_query("SELECT COUNT(letter_id) AS total
             FROM ".TABLE_LETTERMAX."
             WHERE letter_zone_country_id = '".(int)$order->delivery['country']['id']."'
             AND letter_status = '1'");
         $total = tep_db_fetch_array($letter_query);
         //
         $letter_zone_country_id = 0;
         if ((int)$total['total'] > 0) {
             $letter_zone_country_id = (int)$order->delivery['country']['id'];
         }
         //
         $letter_query = tep_db_query("SELECT letter_name, letter_length, letter_width,
             letter_height, letter_max_weight, letter_empty_weight, letter_cost,
             (letter_length * letter_width * letter_height) AS volume
             FROM ".TABLE_LETTERMAX."
             WHERE letter_zone_country_id = '".(int)$letter_zone_country_id."'
             AND letter_status = '1'
             ORDER BY letter_max_weight, volume");
         $this->nbMax = tep_db_num_rows($letter_query);
         //
         if ((int)$this->nbMax > 0) {
             while ($model_max = tep_db_fetch_array($letter_query)) {
                 // Soustrait le poids maxi du poids de la tare d'emballage
                 // -> poids de la lettreMax + renforts éventuels
                 $this->models[] = array('name' => $model_max['letter_name'],
                                                 'length' => $model_max['letter_length'],
                                                 'width' => $model_max['letter_width'],
                                                 'height' => $model_max['letter_height'],
                                                 'weight' => $model_max['letter_max_weight'] - $model_max['letter_empty_weight'],
                                                 'cost' => $model_max['letter_cost']);
             }
             //
             $length = array();
             $width = array();
             $height = array();
             $prods = array();
             $cpt = 0;
             // Boucle sur les produits du panier pour obtenir les dimensions
             for ($i = 0, $n = count($order->products); $i < $n; $i++) {
                 $length[$i] = $order->products[$i]['length'];
                 $width[$i] = $order->products[$i]['width'];
                 $height[$i] = $order->products[$i]['height'];
                 //
                 if ((int)$order->products[$i]['qty'] > 1) {
                     // Elimine les quantités
                     // Rajoute autant de produits que de quantité
                     for ($q = 0; $q < $order->products[$i]['qty']; $q++) {
                         $prods[$cpt] = array($length[$i], $width[$i], $height[$i]);
                         asort($prods[$cpt], SORT_NUMERIC); // ordre décroissant
                         $this->prods[] = array('length' => $prods[$cpt][0], 'width' => $prods[$cpt][1], 'height' => $prods[$cpt][2]);
                         $cpt++;
                     }
                 }
                 else {
                     $prods[$cpt] = array($length[$i], $width[$i], $height[$i]);
                     asort($prods[$cpt], SORT_NUMERIC); // ordre décroissant
                     $this->prods[] = array('length' => $prods[$cpt][0], 'width' => $prods[$cpt][1], 'height' => $prods[$cpt][2]);
                     $cpt++;
                 }
             }
             //
             $this->totalProds = count($this->prods);
             //
             // Poids des produits (du panier)
             $weight = $cart->show_weight();
             if ($weight > 0) $this->weightProds = $weight;
         }
     }
    
     //
     function verifLettreMax() {
         $dimension = false;
         $volumeTotal = 0;
         for ($i = 0; $i < $this->totalProds; $i++) {
             $volumeTotal += $this->prods[$i]['length'] * $this->prods[$i]['width'] * $this->prods[$i]['height'];
         }
         //
         for ($ind=0; $ind < $this->nbMax; $ind++) {
             $this->indiceMax = null;
             // Vérifie les volumes des produits avec le modèle en court
             $verif_dimension = $this->verifDimensions($ind);
             // Vérifie le poids des produits avec le modèle en court
             $verif_weight = $this->verifWeight($ind);
             // Calcul du volume du modèle de LettreMax
             $volumeLettreMax = $this->models[$ind]['length'] * $this->models[$ind]['width'] * $this->models[$ind]['height'];
             //
             if ($volumeTotal > $volumeLettreMax || $verif_dimension == false || $verif_weight == false) continue;
             //
             $this->indiceMax = $ind;
             return true;
         }
         //
         return false;
     }
    
     function verifDimensions($ind) {
         for ($i = 0; $i < $this->totalProds; $i++) {
             if ($this->prods[$i]['length'] > $this->models[$ind]['length'] ||
                 $this->prods[$i]['width'] > $this->models[$ind]['width'] ||
                 $this->prods[$i]['height'] > $this->models[$ind]['height']) {
                 //
                 return false;
                 break;
             }
         }
         return true;
     }
    
     //
     function verifWeight($ind) {
         if ($this->weightProds > $this->models[$ind]['weight']) return false;
         return true;
     }
    
     // class methods
     function quote($method = '') {
         global $order, $shipping_weight;
        
         $shipping_weight = $this->weightProds;
// Délai_minimum BOC
         $delai = $this->getDelai();
         $this->quotes = array('id' => $this->code,
                                     'module' => MODULE_SHIPPING_LETTERMAX_TEXT_TITLE,
                                     'methods' => array());
        
         if ($this->enabled == true && is_null($this->indiceMax) === false) {
             $this->quotes['methods'][] = array('id' => $this->code,
                                                             'title' => MODULE_SHIPPING_LETTERMAX_TEXT_WAY,
                                                             'delai' => sprintf(MODULE_SHIPPING_LETTERMAX_DELAI, $delai['delai'], $delai['date_liv']),
                                                             'cost' => $this->models[$this->indiceMax]['cost'] + MODULE_SHIPPING_LETTERMAX_HANDLING);
// Délai_minimum EOC
             if ($this->tax_class > 0) {
                 $this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
             }
             //
         }
         else {
             $this->quotes['error'] = MODULE_SHIPPING_LETTERMAX_TOO_HEAVY;
         }
         //
         if (tep_not_null($this->icon)) $this->quotes['icon'] = tep_image(DIR_WS_ICONS.$this->icon, $this->title);
         return $this->quotes;
     }
    
     // delai_livraison BOC
     function getDelai() {
         global $order;
    
         $delai = array();
         $totOuvrables = 0;
         $delai_order = (int)$order->info['delaiMax'];
         // Le délai minimum remplace le délai max des produits si celui ci est plus grand
         if (MODULE_SHIPPING_LETTERMAX_DELAI_MINI > $delai_order) {
             $delai_order = MODULE_SHIPPING_LETTERMAX_DELAI_MINI;
         }
         $time = time();
         $heure = (int)date("H", $time);
         // Départ de la livraison le jour même ou le lendemain selon l'heure (12h00)
         $date_depart = ($heure > 12) ? $time + 86400: $time;
         $date_livraison = $date_depart + $delai_order;
         // Comptabilise le nombre de jours ouvrables entre la période de livraison
         $with_saterday = false; // Comptabilise pas les samedis
         $with_sunday = true; // Comptabilise les dimanches
         $verif_jour_livraison = true; // Vérifie si le jour de livraison est un jour ouvrable (si oui -> 1 jours de plus)
         $totOuvrables = get_jours_ouvrables($date_depart, $date_livraison, $with_saterday, $with_sunday, $verif_jour_livraison);
         // On ajoute les jour ouvrables : Timestamp du jour de livraison
         $date_livraison += $totOuvrables * 86400;
         //
         $delai['delai'] = $delai_order / 86400;
         $delai['date_liv'] = date(DATE_FORMAT, $date_livraison);
         return $delai;
     }
     //
     function confirmation() {
         $delai = $this->getDelai();
         $fields[] = array('title' => HEADING_SHIPPING_DATE, 'field' => sprintf(MODULE_SHIPPING_LETTERMAX_DELAI, $delai['delai'], $delai['date_liv']));
         return array('title' => HEADING_SHIPPING_INFORMATION,
                      'fields' => $fields);
     }
     // delai_livraison EOC

     function check() {
         if (!isset($this->_check)) {
             $check_query = tep_db_query("select configuration_value from ".TABLE_CONFIGURATION." where configuration_key = 'MODULE_SHIPPING_LETTERMAX_STATUS'");
             $this->_check = tep_db_num_rows($check_query);
         }
         return $this->_check;
     }
    
     function install() {
// Délai_minimum BOC (L'ordre des positions sont redéfini -> sort_order)
         tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Autoriser La gamme Lettre Max', 'MODULE_SHIPPING_LETTERMAX_STATUS', 'True', 'Voulez vous autoriser la gamme de la Lettre Max (format lettre) ?', '6', '1', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
// Ajout constante -> MODULE_SHIPPING_LETTERMAX_DELAI_MINI
         tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Délai minimum', 'MODULE_SHIPPING_LETTERMAX_DELAI_MINI', '172800', 'Délai minimum de jours ouvrés de livraison', '6', '2', 'tep_get_delai_title', 'tep_cfg_pull_down_delai(', now())");
         tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Frais fixes', 'MODULE_SHIPPING_LETTERMAX_HANDLING', '0', 'Frais fixes (emballage) de la lettreMax', '6', '3', now())");
         tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('TVA applicable', 'MODULE_SHIPPING_LETTERMAX_TAX_CLASS', '0', 'Sélectionnez la TVA applicable sur le montant de la livraison.', '6', '4', 'tep_get_tax_class_title', 'tep_cfg_pull_down_tax_classes(', now())");
         tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Zone de livraison', 'MODULE_SHIPPING_LETTERMAX_ZONE', '0', 'Permettre seulement cette méthode de livraison pour la zone choisie.', '6', '5', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
         tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Ordre de tri', 'MODULE_SHIPPING_LETTERMAX_SORT_ORDER', '0', 'Ordre d\'affichage du module de livraison', '6', '6', now())");
// Délai_minimum EOC
     }
    
     function remove() {
         tep_db_query("DELETE FROM ".TABLE_CONFIGURATION."
             WHERE configuration_key IN ('".implode("', '", $this->keys())."')");
     }
    
     function keys() {
         return array('MODULE_SHIPPING_LETTERMAX_STATUS',
                         'MODULE_SHIPPING_LETTERMAX_DELAI_MINI',    
                         'MODULE_SHIPPING_LETTERMAX_HANDLING',
                         'MODULE_SHIPPING_LETTERMAX_TAX_CLASS',
                         'MODULE_SHIPPING_LETTERMAX_ZONE',
                         'MODULE_SHIPPING_LETTERMAX_SORT_ORDER');
     }
}
?>

Écrit par : mistermmabner 5 Mar 2010, 23:49

Bonjour,
j'ai instalé cette contribution que je trouve super pratique. Mais j'ai un souci car j'aimerai indiqué que le samedi et le dimanche ne sont pas comptés mais impossible à chaque fois un des jours est comptabilisé. selon le délai j'ai des date prévu pour le dimanche !
comment faire pour fixer ça et faire en sorte que le samedi et le dimache soit exclue du calcule ?
merci d'avance pour votre aide

Écrit par : figaro 2 May 2011, 09:39

Bonjour Shoprun,

Merci pour cette contrib qui est vraiment pratique !!
Je l'ai installé et j'aimerais faire apparaitre l'estimation de la date de livraison des produits dans product_info.php, il y a un bout de code dans le fil de cette discussion, mais il n'est apparemment pas adapté a la contrib ?
Aurais tu déjà rajouté cette option ?

Merci pour ta réponse.

Figaro

Écrit par : dark perles 8 Jul 2011, 10:55

Bonjour,

Est-il possible de faire l'estimation de la date de livraison en fonction de l'heure ?
Car je livre en début d'après midi et les commande après 13 ou 14h sont pour le lendemain.

La question de Figaro m'interésse aussi pour mettre l'information de livraison dans la page product_info.php


Écrit par : mickael34 8 Jul 2011, 11:24

Je n'utilise pas la contrib mais dans mon product_info j'ai ça :

Code
<?php

$heure2 = date("H:i" ); //Heure actuelle du serveur
$heure = "12:00"; // Heure limite de commande pour une livraison sous 48h00
$jour=date("w"); // Variable du jour

//0 (pour dimanche) à 6 (pour samedi)

if ($jour == '0') // Si le jour est dimanche
{
echo date("d/m/Y", time()+72*3600); // le délai de livraison est de 72h00
}
else if ($jour == '6') // Si le jour est samedi
{
echo date("d/m/Y", time()+96*3600); // le délai de livraison est de 96h00
}
else if ($jour == '5' && ($heure2)<=($heure)) // Si le jour est vendredi avant 12h00
{
echo date("d/m/Y", time()+72*3600); // le délai de livraison est de 72h00
}
else if ($jour == '5' && ($heure2)>=($heure)) // Si le jour est vendredi et après 12h00
{
echo date("d/m/Y", time()+120*3600); // le délai de livraison est de 120h00
}
else if ($jour == '4' && ($heure2)<=($heure)) // Si le jour est jeudi avant 12h00
{
echo date("d/m/Y", time()+48*3600); // le délai de livraison est de 48h00
}
else if ($jour == '4' && ($heure2)>=($heure)) // Si le jour est jeudi et après 12h00
{
echo date("d/m/Y", time()+96*3600); // le délai de livraison est de 96h00
}

else if (($heure2)<=($heure)) //Pour les autres jours de la semaine, si la commande est passée avant 12h00
{
echo date("d/m/Y", time()+48*3600); // le délai de livraison est de 48h00
  
}
else
{
echo date("d/m/Y", time()+72*3600); // Pour les autres cas (commande passée après 12h00) le délai de livraison est de 72h00
}
?>


Code que j'avais trouvé un jour sur le forum et que j'ai bidouillé.
Pour commandes avant ou après 12h00 (on peut changer évidemment).

Selon le jour et l'heure, les délais sont ok. Testé et approuvé !
Par contre ça ne tient pas compte des jours fériés.

Si ça peut vous aider...

Écrit par : dark perles 8 Jul 2011, 17:31

Merci beaucoup mickael34, ton code est impeccable.
Juste quelques modification à faire mais super bien wub.gif

Écrit par : Juliettta 9 Jul 2011, 08:35

Chapeau!!

Cette installations semble pas mal du tout!!!
J'en aurait bien eu besoin l'année dernière.
Maintenant il calcule visiblement les jours ouvrables => pas mal, mais je n'ai rien vu en ce qui concerne les stocks.

Et bien oui le délai peut être différent après avoir épuisé le dernier produit en stock.
En exemple j'ai deux produits X ici et je peux donc expédier ces deux produits en 24H aujourd'hui, mais si hier il m'en a été commandé 3 je ne vois pas de distinction possible avec ce code pour le 3eme client qui aura commandé et qui devra attendre alors que je me réapprovisionne.


Pour ma part, j'ai plus besoin de cela=> une gestion par article en fonction du stock de ce délai.
J'ai installé le limited by article et un champs product_on-order qui se charge de dire quand le stock = 0 alors le délai du champs qui est libre (on rentre le chiffre) ce n'est pas un délai comme dans ce module...
Une petite modification du panier, du pad_multiple_dropdows et le tour est joué. Le champs d'indication est présent dans la fiche produit et dans le panier.
En gros quand le produits n'est plus en stock le client est averti.

La ce qui me dérange c'est qu'en fait cela ne répond au stock.... mais au module et au produit.
Je sais je viens comme un cheveux sur la soupe critiquer une contrib qui en soit n'est pas mal du tout et même génial soit pour les e commerces qui travaillent sans aucun stock, soit pour les structures qui ne travaillent uniquement sur stock. Et encore quand on travaille tout sur stock le délais est en fonction du module de paiement donc reste juste à ajouter une phrase bateau dans le chaque module expédition (livraison sous 2 jours ouvrables) Alors oui c'est plus chic quand ca indique une date mais ne répond pas aux problème de stock... Qui est primordial dans un éventuel délai de livraison.

Lol bon voilà je vous ai mis un bon travail supplémentaire de développement utile à la fin ce ne sera plus une contrib.... biggrin.gif . Mais une moitié de site à ajouter.... biggrin.gif

C'est déjà Super bien et Bravo pour toute cette technique de calcul savant de jours Férié.... MDR Euh dans cette contrib on peut y ajouter nos vacances quand on en prend??? MDR

Bon codage à tous.

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)