osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

2 Pages V   1 2 >  
Reply to this topicStart new topic
> [Contrib] Proposer une date de livraison selon un produit ou/et le module de livraison, Loi Chatel. Afficher la date de livraison dans modules de livraisons
shoprun
posté 27 Sep 2008, 13:25
Message #1


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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 -> Loi Châtel
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).


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
shoprun
posté 27 Sep 2008, 19:24
Message #2


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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 ...
}


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
shoprun
posté 27 Sep 2008, 21:00
Message #3


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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 ...


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
shoprun
posté 27 Sep 2008, 21:05
Message #4


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
cocomino
posté 28 Sep 2008, 08:29
Message #5


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



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


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
shoprun
posté 28 Sep 2008, 09:11
Message #6


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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 Annonce officiel (uk)

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


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
shoprun
posté 28 Sep 2008, 12:05
Message #7


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
shoprun
posté 30 Sep 2008, 08:03
Message #8


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
cocomino
posté 30 Sep 2008, 08:07
Message #9


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



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 )


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
shoprun
posté 30 Sep 2008, 08:19
Message #10


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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)



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)





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



arrow.gif La partie admin : fiche produit



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)


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
nixo
posté 16 Apr 2009, 17:40
Message #11


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 54
Inscrit : 14-January 08
Lieu : Anglet - Pays Basque
Membre no 20387



Bonjour,

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

J'ai eu le même problème que Fredo42

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
Go to the top of the page
 
shoprun
posté 16 Apr 2009, 18:57
Message #12


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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);
    }


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
Gnidhal
posté 16 Apr 2009, 21:16
Message #13


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



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!


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
shoprun
posté 17 Apr 2009, 07:10
Message #14


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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 ...


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
rico76
posté 17 Apr 2009, 11:41
Message #15


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 94
Inscrit : 19-August 08
Lieu : Saint Valery en Caux
Membre no 22745



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


--------------------
oscommerce-2.2ms2-FR - Auto Remove Button in Shopping Cart - Agree2Terms v1.6.7 - CCGV v5.201 - colissimo pour oscommerce v 1.7 - country state selector ajax v1.5.5 - dhtml categories v111 - dynamic sitemap v3.5.5 - ecotax v1.3 - Fancier Invoice v6.2 - fckeditor-oscommerce v2 - Featured Products v1.61 - HeaderTags SEO v3.0.412 - Local Delivery v1.7 - Loginbox v5.7 - Main Categories v1.0c1 - Monthly Installment Payments Layby v2.0 - MostPopular v1 - New products glide - Product Name in navigation bar (selectable) v1.00 - Product Quantity Drop Down Box in Product Info v1.1 - Quick Update v2.90 - Review Approval System v1.31 - RMA Returns v2.6 - Search TagCloud v2.2 - StarProduct Pimped based on v1.6 - Stock Status in Product Listing v1.01 - Ultimate Seo Urls v2.5 - Ultra Pics 2.07.01 + LightBox - Virement bancaire v1.4 - Your Recent History v3.0
Go to the top of the page
 
shoprun
posté 19 Apr 2009, 09:18
Message #16


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Aussitôt dit, aussitôt fait, la contribution est dispo sur le site US : Delivery Date V1

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


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
audioshop
posté 22 May 2009, 11:46
Message #17


Ceinture bleue OSC
Icône de groupe

Groupe : Membres
Messages : 983
Inscrit : 8-April 08
Lieu : strasbourg
Membre no 21429



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 ?
Go to the top of the page
 
shoprun
posté 22 May 2009, 15:50
Message #18


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
audioshop
posté 23 May 2009, 08:58
Message #19


Ceinture bleue OSC
Icône de groupe

Groupe : Membres
Messages : 983
Inscrit : 8-April 08
Lieu : strasbourg
Membre no 21429



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:



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

colissimo.php

Go to the top of the page
 
shoprun
posté 23 May 2009, 14:23
Message #20


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
audioshop
posté 23 May 2009, 15:14
Message #21


Ceinture bleue OSC
Icône de groupe

Groupe : Membres
Messages : 983
Inscrit : 8-April 08
Lieu : strasbourg
Membre no 21429



effectivement une petite erreur de manip sorry blush.gif

colissimo.php

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

colissimo_2.php
Go to the top of the page
 
shoprun
posté 23 May 2009, 15:32
Message #22


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



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 ...


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
audioshop
posté 24 May 2009, 20:08
Message #23


Ceinture bleue OSC
Icône de groupe

Groupe : Membres
Messages : 983
Inscrit : 8-April 08
Lieu : strasbourg
Membre no 21429



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

Ce message a été modifié par audioshop55 - 24 May 2009, 20:14.
Go to the top of the page
 
AlexKid
posté 11 Dec 2009, 13:31
Message #24


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 8
Inscrit : 10-December 09
Membre no 26688



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
Go to the top of the page
 
AlexKid
posté 19 Dec 2009, 23:19
Message #25


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 8
Inscrit : 10-December 09
Membre no 26688



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

Ce message a été modifié par AlexKid - 19 Dec 2009, 23:27.
Go to the top of the page
 

2 Pages V   1 2 >
Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 29th March 2024 - 12:08
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)