Nous ne répondons seulement qu'aux sujets dont l'auteur a complété sa signature [Lire]


Promotion pour catégorie produits/clients

Programmation, discussions et suggestions pour l'amélioration de OpenCart

Promotion pour catégorie produits/clients

Messagepar Chris » 25 Mar 2012, 11:33

Bonjour,

Je suis un grand débutant en php et opencart, et j'ai un problème avec un module que j'essaie de faire.

Mon idée : faire un module qui permette de mettre une promotion pour une série de produits pour une catégorie de client.
Si ça peut être plus clair, voici un aperçu de l'écran :
module.jpg
module.jpg (114.25 Kio) Vu 2466 fois


Comme c'est du paramétrage de boutique, j'ai juste la partie "admin" ; j'ai donc fait
.tpl pour l'affichage dans admin\view\template\module
.php pour les langages dans admin\language\french\module
.php pour la gestions des données dans admin\controller\module

Je pense que c'est dans ce dernier fichier (celui de controller) qu'il faut faire la mise à jour de la base de données (suite au clic du bouton "sauvegarder").
Je sais quel ordre insert appliquer
MAIS je ne sais pas comment récupérer une valeur saisie par l'utilisateur dans un champ !!!

Du coup, je suis un peu bloqué.

Merci d'avance pour votre aide.

PS : Il est bien entendu qu'une fois ce module fait, il sera mis à dispo pour la communauté.
Dernière édition par Chris le 25 Mar 2012, 16:35, édité 1 fois.
OpenCart Version = 1.5.1.1_FR
Hébergeur = O2Switch
Module installé = Tous ceux par défaut sauf affiliation
Template Installé = Green 2 modifié (image, couleur, disposition colonne bas de page)
Chris
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 24
Inscription: 29 Fév 2012, 21:29
Localisation: Nîmes

Re: Promotion pour catégorie produits/clients

Messagepar Chris » 25 Mar 2012, 16:34

Comme j'ai fini par trouver, voici ma solution :P
En php on récupère la donnée par $_post[variable] détail ici

J'ai fait l'appel de la fonction de mise à jour comme suit :
Code: Tout sélectionner
$this->customer_special_update_database($this->request->post);

Et dans la fonction, j'ai récupéré le montant par :
Code: Tout sélectionner
$this->request->post['montant']

Reste à faire les autres champs, mais je pense que ça va être plus simple (enfin j'espère ;) )

Même si pour le moment, cela ne me gène pas, je me demande si je ne devrais pas faire la mise à jour de la base de données dans admin\model\module\nom_de_mon_module.php

PS : si des experts en php veulent faire des remarques, n'hésitez pas, j'apprendrais comment faire "plus propre"
OpenCart Version = 1.5.1.1_FR
Hébergeur = O2Switch
Module installé = Tous ceux par défaut sauf affiliation
Template Installé = Green 2 modifié (image, couleur, disposition colonne bas de page)
Chris
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 24
Inscription: 29 Fév 2012, 21:29
Localisation: Nîmes

Re: Promotion pour catégorie produits/clients

Messagepar LeorLindel » 25 Mar 2012, 18:56

Il te faut créer la(es) table(s) de la base de données qui va contenir les éléments (variables) de ton(es) fichier(s)

Peux-tu poster ici, tes fichiers dans les balises prévues à cet effet (bien entendu) ?
Image
1 - A lire avant de poster un sujet
2 - Politique sur la signature.

Quand le sujet est résolu, pensez à ajouter la petite coche verte Image dans le titre initial en éditant votre premier message et non dans votre dernière réponse.
Merci


Toutes les extensions commerciales (templates ou modules payants) ne peuvent pas faire l'objet d'ouverture de sujet, prière de bien vouloir s'adresser au concepteur en cas de problème ou demande de renseignements.

Seul, on avance plus vite, à plusieurs on avance plus loin.
Avatar de l’utilisateur
LeorLindel
Administrateur
Administrateur
 
Messages: 4229
Inscription: 19 Fév 2010, 13:44
Localisation: Lutéce

Re: Promotion pour catégorie produits/clients

Messagepar Chris » 25 Mar 2012, 20:54

Bonsoir et merci d'avance pour tes conseils.

Actuellement, ce n'est pas encore tout à fait fini il manque :
- les contrôles sur les champs obligatoires (j'ai testé que le montant) pour voir comment faire.
- le calcul du montant à mettre en base
- La mise à jour de la base de données (j'ai testé et fait un insert dans une table pour voir si j'avais les bonnes valeurs)
Vu que j'ai récupéré les valeurs des champs et que je sais faire un insert, c'est quasiment réglé de ce côté.
(les contrôles, je ne pense pas encore avoir bien compris)

J'ai recopié des morceaux à droite et à gauche (vqmod, coupons, produit) il me reste surement des trucs à épurer.
Je pense toutefois que tu peux me donner des conseils sur cette version.
Je reprendrai mon code suite aux conseils.

Fichier customer_special.php dans admin\controller\module
Code: Tout sélectionner
<?php
class ControllerModuleCustomerSpecial extends Controller {
   private $error = array();
   
    public function customer_special_update_database() {
      $this->load->language('module/customer_special');
      $montant = $this->request->post['montant'];
      $groupe_client = $this->request->post['customer_group'];
      $pourcentage = $this->request->post['percent'];
      $montant = $this->request->post['montant'];
      $date_debut = $this->request->post['date_start'];
      $date_fin = $this->request->post['date_end'];
      
      if ($montant == "") {return false;}
      
      $this->load->model('catalog/product');
      foreach ($this->request->post['product'] as $key => $product_id) {
         $valeurp = $this->model_catalog_product->getProduct($product_id);
         $valeur=$valeurp['price'];
         
         $this->db->query("INSERT INTO " . DB_PREFIX . "coupon_product SET coupon_id = '" . $valeur . "', product_id = '" . $valeur . "'");
         }   
        return true;
      } 
   public function index() {
      // Chargement du fichier de langue associé au module
      $this->load->language('module/customer_special');
     
      $this->document->setTitle($this->language->get('heading_title'));
      $this->load->model('setting/setting');

      if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) {
       
        // Appelle la fonction de mise à jour de la base de données
        if ($this->customer_special_update_database($this->request->post)) {
           //pour afficher le message de succes au dessus du nom du module
           $this->session->data['success'] = $this->language->get('text_success');
        }
       
      }

      // Language
      $this->data = array_merge($this->data, $this->load->language('module/customer_special'));

      // Warning
      if (isset($this->session->data['error'])) {
         $this->data['error_warning'] = $this->session->data['error'];
         unset($this->session->data['error']);
      } else {
         $this->data['error_warning'] = '';
      }

      // Success
      if (isset($this->session->data['success'])) {
         $this->data['success'] = $this->session->data['success'];
         unset($this->session->data['success']);
      } else {
         $this->data['success'] = '';
      }

      // Breadcrumbs - Navigation
      $this->data['breadcrumbs'] = array();
      $this->data['breadcrumbs'][] = array(
         'href'      => $this->url->link('common/home', 'token=' . $this->session->data['token'], 'SSL'),
         'text'      => $this->language->get('text_home'),
         'separator' => FALSE
      );

      $this->data['breadcrumbs'][] = array(
         'href'      => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'),
         'text'      => $this->language->get('text_module'),
         'separator' => ' :: '
      );

      $this->data['breadcrumbs'][] = array(
         'href'      => $this->url->link('module/customer_special', 'token=' . $this->session->data['token'], 'SSL'),
         'text'      => $this->language->get('heading_title'),
         'separator' => ' :: '
      );

      // Affichage des boutons
      $this->data['action'] = $this->url->link('module/customer_special', 'token=' . $this->session->data['token'], 'SSL');
      $this->data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');

      // Initialisation des groupes clients
      $this->load->model('sale/customer_group');
      $this->data['customer_groups'] = $this->model_sale_customer_group->getCustomerGroups();

      
      // Initialisation des categories
      $this->load->model('catalog/category');
      $this->data['categories'] = $this->model_catalog_category->getCategories(0);
      if (isset($this->request->post['product_category'])) {
         $this->data['product_category'] = $this->request->post['product_category'];
      } elseif (isset($product_info)) {
         $this->data['product_category'] = $this->model_catalog_product->getProductCategories($this->request->get['product_id']);
      } else {
         $this->data['product_category'] = array();
      }
      
      //Initialisation des produits
        $this->load->model('catalog/product');
      $this->data['products'] = $this->model_catalog_product->getProducts(0);
      if (isset($this->request->post['product'])) {
         $this->data['product'] = $this->request->post['product'];
      } elseif (isset($product_info)) {
         $this->data['product'] = $this->model_catalog_product->getProductCategories($this->request->get['product_id']);
      } else {
         $this->data['product'] = array();
      }
     
       if (isset($this->request->post['montant'])) {
         $this->data['montant'] = $this->request->post['montant'];
      } else {
         $this->data['montant'] = '';
      }

      // Template
      $this->template = 'module/customer_special.tpl';
      $this->children = array(
         'common/header',
         'common/footer'
      );

      $this->response->setOutput($this->render());
   }


   
   public function customer_special_uninstall() {
      $this->load->language('module/customer_special');

      if (!$this->user->hasPermission('modify', 'module/customer_special')) {
         $this->session->data['error'] = $this->language->get('error_permission');
      } else {
            $this->clear_cache($return = true);
            $this->session->data['success'] = $this->language->get('success_uninstall');
                  }
      }

    // Pour savoir si l'utlisateur a les droits de modifs du module
   // Ajout de mes controles des zones obligatoires
   private function validate() {
      if (!$this->user->hasPermission('modify', 'module/customer_special')) {
         $this->session->data['error'] = $this->language->get('error_permission');
      }

      // Le montant doit etre renseigne
      if ($this->request->post['montant'] == "") {
         $this->session->data['error'] = $this->language->get('error_montant');
      }
            
            
      if (!$this->error) {
         return TRUE;
      } else {
         return FALSE;
      }
   }
}
?>



Fichier customer_special.php dans admin\language\french\module
Code: Tout sélectionner
<?php
// Heading
$_['heading_error_log']    = 'Error Log';
$_['heading_settings']     = 'Maintenance et parametrage';
$_['heading_title']        = 'Promotions par groupe client';   // Au niveau du logo module
$_['heading_customer_special']  = 'Promotions Groupe client';  //Entete suivante

// Columns
$_['column_action']        = 'Installer / D&eacute;sinstaller';
$_['column_author']        = 'Auteur';
$_['column_delete']        = 'Supprimer';
$_['column_file_name']     = 'File Name';
$_['column_id']            = 'Nom / Description';
$_['column_status']        = 'Statut';
$_['column_version']       = 'Version';

// Entry
$_['entry_customer_group']   = 'Groupe client :';
$_['entry_category']        = 'Choisir une categorie :';
$_['entry_product']        = 'Produits impact&eacute;s :';
$_['entry_date_start']      = 'Date de d&eacute;but :';
$_['entry_date_end']      = 'Date de fin :';
$_['entry_value']      = 'Montant fixe';
$_['entry_percent']      = 'Poucentage';


// Text
$_['text_advice']      = ' (Mettre 0 pour annuler une promotion)';
$_['text_install']         = 'Installer';
$_['text_module']          = 'Module';
$_['text_success']         = 'Succes: Les promotions ont &eacute;t&eacute; correctement affect&eacute;es.';
$_['text_uninstall']       = 'D&eacute;sinstaller';

// Button
$_['button_cancel']        = 'Annuler';
$_['button_save']          = 'Sauvegarder';

// Error
$_['error_permission']     = 'Warning: Vous n&acute;avez pas la permission de modifier ce module!';
$_['error_montant']         = 'Warning: Le montant ou le poucentage doit &ecirc;tre renseign&eacute; !';

// Version
$_['customer_special_manager_version']      = '0.0.2';
?>



Fichier customer_special.tpl dans admin\view\template\module
Code: Tout sélectionner
<?php echo $header; ?>
<div id="content">
  <div class="breadcrumb">
    <?php foreach ($breadcrumbs as $breadcrumb) { ?>
    <?php echo $breadcrumb['separator']; ?><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a>
    <?php } ?>
  </div>
  <?php if ($error_warning) { ?>
  <div class="warning"><?php echo $error_warning; ?></div>
  <?php } ?>
  <?php if ($success) { ?>
   <div class="success"><?php echo $success; ?></div>
  <?php } ?>
   
  <div class="box">
    <div class="left"></div>
    <div class="right"></div>
    <div class="heading">
      <h1><img src="view/image/module.png" alt="<?php echo $heading_title; ?>" /> <?php echo $heading_title; ?></h1>
      <div class="buttons">
        <a onclick="$('#form').submit();" class="button"><span><?php echo $button_save; ?></span></a>
        <a onclick="location = '<?php echo $cancel; ?>';" class="button"><span><?php echo $button_cancel; ?></span></a>
      </div>
    </div>
    <div class="content">
      <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form">
        <h4 style="font-size:15px; background-color:#EEEEEE; padding:9px 0px 9px 40px; border:solid 1px #B6B8D3; background-image:url('view/image/product.png'); background-repeat:no-repeat; background-position:1% 50%;"><?php echo $heading_customer_special; ?></h4>
        <div>
          <table class="form">
             <!-- la premiere ligne : groupe client, Valeur -->
            <tr>
            <!-- Groupe client -->
              <td> <?php echo $entry_customer_group; ?> </td>
              <td class="left">
             <select name="customer_group">
                  <?php foreach ($customer_groups as $customer_group) { ?>
                  <option value="<?php echo $customer_group['customer_group_id']; ?>"><?php echo $customer_group['name']; ?></option>';
                  <?php } ?>
                </select>
              </td>
            </tr>
            <!-- Choix entre pourcentage ou valeur  -->
           
            <tr>
                <td>
                   <input type="radio" name="percent" value="1" />
                   <?php echo $entry_percent; ?>
                   <input type="radio" name="percent" value="0" checked="checked" />
                   <?php echo $entry_value; ?>
                </td>
           
                <!-- Valeur ou pourcentage -->
               
                <td class="right">  <input type="text" name="montant" value="" /> <?php echo $text_advice; ?> </td>
             </tr> 

            <!-- Deuxieme ligne : Les dates de debut et de fin -->         
            <tr>
                <td> <?php echo $entry_date_start; ?> </td>
                <td class="left"><input type="text" name="date_start" class="date" id="date-start"/></td>
                <td> <?php echo $entry_date_end; ?> </td>
                <td class="left"><input type="text" name="date_end" class="date" id="date-end"/></td>
            </tr>
           
            <!-- Affiche la liste des catégories (avec case à cocher) -->         
         <!-- Pour plus tard sélectionner les produits à afficher selon la catégorie
         <tr>
              <td><?php echo $entry_category; ?></td>
              <td><div class="scrollbox">
                  <?php $class = 'odd'; ?>
                  <?php foreach ($categories as $category) { ?>
                  <?php $class = ($class == 'even' ? 'odd' : 'even'); ?>
                  <div class="<?php echo $class; ?>">
                    <?php if (in_array($category['category_id'], $product_category)) { ?>
                    <input type="checkbox" name="product_category[]" value="<?php echo $category['category_id']; ?>" checked="checked" />
                    <?php echo $category['name']; ?>
                    <?php } else { ?>
                    <input type="checkbox" name="product_category[]" value="<?php echo $category['category_id']; ?>" />
                    <?php echo $category['name']; ?>
                    <?php } ?>
                  </div>
                  <?php } ?>
                </div>
                <a onclick="$(this).parent().find(':checkbox').attr('checked', true);"><?php echo $text_select_all; ?></a> / <a onclick="$(this).parent().find(':checkbox').attr('checked', false);"><?php echo $text_unselect_all; ?></a></td>
            </tr>
            -->
         
         <!-- Affiche la liste des produits qui seront impactés (avec case à cocher) -->         
            <tr>
              <td><?php echo $entry_product; ?></td>
              <td><div class="scrollbox">
                  <?php $class = 'odd'; ?>
                  <?php foreach ($products as $product) { ?>
                  <?php $class = ($class == 'even' ? 'odd' : 'even'); ?>
                  <div class="<?php echo $class; ?>">
                    <?php if (in_array($product['product_id'], $product)) { ?>
                    <input type="checkbox" name="product[]" value="<?php echo $product['product_id']; ?>" checked="checked" />
                    <?php echo $product['name']; ?>
                    <?php } else { ?>
                    <input type="checkbox" name="product[]" value="<?php echo $product['product_id']; ?>" />
                    <?php echo $product['name']; ?>
                    <?php } ?>
                  </div>
                  <?php } ?>
                </div>
                <a onclick="$(this).parent().find(':checkbox').attr('checked', true);"><?php echo $text_select_all; ?></a> / <a onclick="$(this).parent().find(':checkbox').attr('checked', false);"><?php echo $text_unselect_all; ?></a></td>
            </tr>
       
           </table>
         </div>
      </form>
    </div>
  </div>
</div>

<!-- Pour que quand on clique sur le champ, on affiche le calendrier pour la saisie-->
<script type="text/javascript"><!--
$('#date-start').datepicker({dateFormat: 'yy-mm-dd'});
$('#date-end').datepicker({dateFormat: 'yy-mm-dd'});
//--></script>



<?php echo $footer; ?>



Petite remarque : je fais mes tests sous EasyPhp 5.3.9 et Opencart 5.1.1_FR (version directement issue de l'install)

Merci d'avance, et bon courage pour étudier mon "fatras".

Chris.
OpenCart Version = 1.5.1.1_FR
Hébergeur = O2Switch
Module installé = Tous ceux par défaut sauf affiliation
Template Installé = Green 2 modifié (image, couleur, disposition colonne bas de page)
Chris
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 24
Inscription: 29 Fév 2012, 21:29
Localisation: Nîmes

Re: Promotion pour catégorie produits/clients

Messagepar Chris » 26 Mar 2012, 13:27

Pour ceux qui me lisent, voici les fichiers mis à jour ce soir (j'ai édité mon post de ce midi ).
Ça pourrait presque servir comme ça (truc non testé, les droits d'accès au module)
Le problème est que j'aimerai en cas d'erreur que l'utilisateur ne perde pas les valeurs qu'il a renseignées.
Là j'ai pas vraiment d'idée.

Fichier customer_special.php dans admin/controller/module
Code: Tout sélectionner
<?php
class ControllerModuleCustomerSpecial extends Controller {
   private $error = array();
   
    public function customer_special_update_database() {
    // mise à jour de la base de données suite activation bouton 'sauveagrder'
    // Suppression des lignes associées au produit si montant = 0
    // affetation des promotions si montant différent de 0
      $this->load->language('module/customer_special');
      $groupe_client = $this->request->post['customer_group'];
      $pourcentage = $this->request->post['percent'];
      $montant = $this->request->post['montant'];
      $date_debut = $this->request->post['date_start'];
      $date_fin = $this->request->post['date_end'];
      
      // Si l'un des champs obligatoires n'est pas rempli, il faut sortir en ano
      if ($montant == "" || ($montant > 0 && ($date_fin == "" || $date_debut = "") ) ) {return false;}           
      
      $this->load->model('catalog/product');
      foreach ($this->request->post['product'] as $key => $product_id) {
         if ($montant == 0) {
            // faire la supression des lignes dans la table
            $this->db->query("DELETE FROM " . DB_PREFIX . "product_special WHERE customer_group_id = '" . $groupe_client . "' AND product_id = '" . $product_id . "'");
            return true;
         } else {
            // recup du prix du produit
            $valeurp = $this->model_catalog_product->getProduct($product_id);
            $prixProduit=$valeurp['price'];

            // Calcul du nouveau prix
            if ($pourcentage == 1) {   // C'est un pourcentage, il faut appliquer la baisse au prix du produit
               $nouveauPrix = $prixProduit - $prixProduit * $montant / 100 ;
            } else {                   // C'est un montant, on baisse les prix de la valeur saisie
               $nouveauPrix = $prixProduit - $montant;
            }
            $nouveauPrix = round($nouveauPrix, 2);   // pour arrondir à deux décimales
            if ($nouveauPrix < 0) {
               $nouveauPrix = 0;
               }
           
            // affetation de la valeur en base si le nouveau prix n'est pas nul
            if ($nouveauPrix > 0) {
               $this->db->query("INSERT INTO " . DB_PREFIX . "product_special SET product_id = '" . $product_id . "', customer_group_id = '" . $groupe_client . "', price = '" . $nouveauPrix . "', date_start = '" . $date_debut . "', date_end = '" . $date_fin . "'");
               }
         }
      }   
      return true;
   }


     
   public function index() {
      // Chargement du fichier de langue associé au module
      $this->load->language('module/customer_special');
     
      $this->document->setTitle($this->language->get('heading_title'));
      $this->load->model('setting/setting');

      if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) {
       
        // Appelle la fonction de mise à jour de la base de données
        if ($this->customer_special_update_database($this->request->post)) {
           //pour afficher le message de succes au dessus du nom du module
           $this->session->data['success'] = $this->language->get('text_success');
        }
       
      }

      // Language
      $this->data = array_merge($this->data, $this->load->language('module/customer_special'));

      // Warning
      if (isset($this->session->data['error'])) {
         $this->data['error_warning'] = $this->session->data['error'];
         unset($this->session->data['error']);
      } else {
         $this->data['error_warning'] = '';
      }

      // Success
      if (isset($this->session->data['success'])) {
         $this->data['success'] = $this->session->data['success'];
         unset($this->session->data['success']);
      } else {
         $this->data['success'] = '';
      }

      // Breadcrumbs - Navigation
      $this->data['breadcrumbs'] = array();
      $this->data['breadcrumbs'][] = array(
         'href'      => $this->url->link('common/home', 'token=' . $this->session->data['token'], 'SSL'),
         'text'      => $this->language->get('text_home'),
         'separator' => FALSE
      );

      $this->data['breadcrumbs'][] = array(
         'href'      => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'),
         'text'      => $this->language->get('text_module'),
         'separator' => ' :: '
      );

      $this->data['breadcrumbs'][] = array(
         'href'      => $this->url->link('module/customer_special', 'token=' . $this->session->data['token'], 'SSL'),
         'text'      => $this->language->get('heading_title'),
         'separator' => ' :: '
      );

      // Affichage des boutons
      $this->data['action'] = $this->url->link('module/customer_special', 'token=' . $this->session->data['token'], 'SSL');
      $this->data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');

      // Initialisation des groupes clients
      $this->load->model('sale/customer_group');
      $this->data['customer_groups'] = $this->model_sale_customer_group->getCustomerGroups();

      
      // Initialisation des categories
      $this->load->model('catalog/category');
      $this->data['categories'] = $this->model_catalog_category->getCategories(0);
      if (isset($this->request->post['product_category'])) {
         $this->data['product_category'] = $this->request->post['product_category'];
      } elseif (isset($product_info)) {
         $this->data['product_category'] = $this->model_catalog_product->getProductCategories($this->request->get['product_id']);
      } else {
         $this->data['product_category'] = array();
      }
      
      //Initialisation des produits
        $this->load->model('catalog/product');
      $this->data['products'] = $this->model_catalog_product->getProducts(0);
      if (isset($this->request->post['product'])) {
         $this->data['product'] = $this->request->post['product'];
      } elseif (isset($product_info)) {
         $this->data['product'] = $this->model_catalog_product->getProductCategories($this->request->get['product_id']);
      } else {
         $this->data['product'] = array();
      }
     
       if (isset($this->request->post['montant'])) {
         $this->data['montant'] = $this->request->post['montant'];
      } else {
         $this->data['montant'] = '';
      }

      // Template
      $this->template = 'module/customer_special.tpl';
      $this->children = array(
         'common/header',
         'common/footer'
      );

      $this->response->setOutput($this->render());
   }


   
   public function customer_special_uninstall() {
      $this->load->language('module/customer_special');

      if (!$this->user->hasPermission('modify', 'module/customer_special')) {
         $this->session->data['error'] = $this->language->get('error_permission');
      } else {
            $this->clear_cache($return = true);
            $this->session->data['success'] = $this->language->get('success_uninstall');
                  }
      }

    // Pour savoir si l'utlisateur a les droits de modifs du module
   // Ajout de mes controles des zones obligatoires
   private function validate() {
      if (!$this->user->hasPermission('modify', 'module/customer_special')) {
         $this->session->data['error'] = $this->language->get('error_permission');
      }

      // Le montant doit etre renseigne
      if ($this->request->post['montant'] == "") {
         $this->session->data['error'] = $this->language->get('error_montant');
      } else { // si le montant n'est pas nul, on affecte une valeur. Les dates sont obligatoires
         if ($this->request->post['montant'] > 0) {
         
            if ($this->request->post['date_start'] == "") {
               $this->session->data['error'] = $this->language->get('error_date_start');
            }
            if ($this->request->post['date_end'] == "") {
               $this->session->data['error'] = $this->language->get('error_date_end');
            }
         }   
      }      
            
      if (!$this->error) {
         return TRUE;
      } else {
         return FALSE;
      }
   }
}
?>


Fichier customer_special.php dans admin/language/french/module
Code: Tout sélectionner
<?php
// Heading
$_['heading_error_log']    = 'Error Log';
$_['heading_settings']     = 'Maintenance et parametrage';
$_['heading_title']        = 'Promotions par groupe client';   // Au niveau du logo module
$_['heading_customer_special']  = 'Promotions Groupe client';  //Entete suivante

// Entry
$_['entry_customer_group']   = 'Groupe client :';
$_['entry_category']        = 'Choisir une categorie :';
$_['entry_product']        = 'Produits impact&eacute;s :';
$_['entry_date_start']      = 'Date de d&eacute;but :';
$_['entry_date_end']      = 'Date de fin :';
$_['entry_value']      = 'Montant fixe';
$_['entry_percent']      = 'Poucentage';


// Text
$_['text_advice']      = ' (Mettre 0 pour annuler une promotion)';
$_['text_install']         = 'Installer';
$_['text_module']          = 'Module';
$_['text_success']         = 'Succes: Les promotions ont &eacute;t&eacute; mises &agrave jour.';
$_['text_uninstall']       = 'D&eacute;sinstaller';

// Button
$_['button_cancel']        = 'Annuler';
$_['button_save']          = 'Sauvegarder';

// Error
$_['error_permission']     = 'Avertissement : Vous n&acute;avez pas la permission de modifier ce module!';
$_['error_montant']         = 'Avertissement : Le montant ou le poucentage doit &ecirc;tre renseign&eacute; !';
$_['error_product']         = 'Avertissement : Il faut s&eacute;lectionner au moins un produit !';
$_['error_date_end']         = 'Avertissement : Il faut saisir une date de fin !';

// Version
$_['customer_special_manager_version']      = '0.0.2';
?>



Rappel du fonctionnement :
Si on met pourcentage, et 5 dans dans la zone associée : on diminue les prix des produits sélectionnés de 5 %
Si on met montant fixe et 5 dans la zone associé : on diminue les prix des produits sélectionnés de 5€
Évidemment, cela est fait pour le groupe client sélectionné.

Remarque : Si le nouveau prix calculé est inférieur ou égal à 0, la promo n'est pas faite pour ce produit.


Merci de vos remarques sur mon code.

Chris
OpenCart Version = 1.5.1.1_FR
Hébergeur = O2Switch
Module installé = Tous ceux par défaut sauf affiliation
Template Installé = Green 2 modifié (image, couleur, disposition colonne bas de page)
Chris
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 24
Inscription: 29 Fév 2012, 21:29
Localisation: Nîmes

Re: Promotion pour catégorie produits/clients

Messagepar Chris » 28 Mar 2012, 22:49

Vu que ça semble fonctionner correctement, je vous livre le module en zip.
customer_special.zip
Le module en format zip
(6.43 Kio) Téléchargé 129 fois

J'espère qu'il vous sera utile.

Tout est expliqué dans le lisezmoi.txt

Chris
PS : N'hésitez pas sur les conseils de codage
OpenCart Version = 1.5.1.1_FR
Hébergeur = O2Switch
Module installé = Tous ceux par défaut sauf affiliation
Template Installé = Green 2 modifié (image, couleur, disposition colonne bas de page)
Chris
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 24
Inscription: 29 Fév 2012, 21:29
Localisation: Nîmes

Re: Promotion pour catégorie produits/clients

Messagepar LeorLindel » 29 Mar 2012, 06:48

Bonjour,

Je n'ai pas testé dans le fond ce module, mais d'entrée, je constate qu'il n'y a pas de récapitulation (list) sur les promotions accordées aux groupes de clients, tel que l'on pourrait voir avec les bons de réductions, ce qui fait que l'on ne sait pas si la création fonctionne.

Ensuite, je n'ai pas l'impression que les valeurs soient entrés en base de données et conservées, mais comme je dis plus haut, je n'ai pas du tout regardé dans le détail.

As-tu fait des tests et ceux-ci sont-ils concluants et visibles dans la boutique ?

Je voulais te montrer ce module très complet qui gère parfaitement les promotions.

En tous cas, je te félicite de mettre les mains dans le cambouis sans trop connaître la mécanique, je trouve cela très volontaire de ta part.

Courage.
Image
1 - A lire avant de poster un sujet
2 - Politique sur la signature.

Quand le sujet est résolu, pensez à ajouter la petite coche verte Image dans le titre initial en éditant votre premier message et non dans votre dernière réponse.
Merci


Toutes les extensions commerciales (templates ou modules payants) ne peuvent pas faire l'objet d'ouverture de sujet, prière de bien vouloir s'adresser au concepteur en cas de problème ou demande de renseignements.

Seul, on avance plus vite, à plusieurs on avance plus loin.
Avatar de l’utilisateur
LeorLindel
Administrateur
Administrateur
 
Messages: 4229
Inscription: 19 Fév 2010, 13:44
Localisation: Lutéce

Re: Promotion pour catégorie produits/clients

Messagepar Chris » 29 Mar 2012, 13:03

Bonjour,

Effectivement le module que tu indiques est superbe.
Je n'avais pas la prétention de faire aussi bien (mais j'aimerai bien en être capable ;) )

Mon but était simplement d'éviter de passer sur chaque produit pour faire la saisie d'une promotion.
En effet, j'ajoute une promotion comme si elle était faite a partir de la page produit sans mettre de classement.
Ainsi, pour un groupe "clients faisant beaucoup d'achat" je peux accorder très rapidement une réduction de 5% sur les produits (je n'ai pas de table particulière pour ce module, j'ai essayé de faire ce qui était fait sur le produit)

Concernant le retour utilisateur, c'est vrai qu'il pourrait être plus net. J'ai juste fait apparaitre en haut du module "Succès, les promotions ont été mises à jour". après la sauvegarde.

Questions tests, voici ce que j'ai vérifié (et qui fonctionne) :
- Installer / désinstaller
- Table product_special était actualisée (ajout ou suppression de données)
- Quand on va sur le produit et que l'on regarde les promotions : on voit celle ajoutée (ou non si suppression)
- Dans la boutique : La promo est bien prise en compte
- le prix prix en compte pour le calcul est celui initial du produit, on ne tient pas compte des promo en cours pour calculer celle que l'on pose.

Et ce que je n'ai pas testé (car peu utile pour moi) :
- Habilitation sur le module
- Saisie de n'importe quoi dans un champ (contrôle de zone)

Mais c'est vrai qu'il serait bon :
- D'avoir une visualisation des promo existantes
- de pouvoir mettre des critères de sélection sur les produits (catégories par exemple) pour que la liste ne soit pas trop longue.

J'ai bien conscience que ce n'est pas suffisant pour faire un module digne de ce nom, mais ça peut quand même être utile et les fonctions essentielles sont opérationnelles.

Je te remercie pour tes encouragements (et le temps pris pour regarder les fichiers)

Chris.
OpenCart Version = 1.5.1.1_FR
Hébergeur = O2Switch
Module installé = Tous ceux par défaut sauf affiliation
Template Installé = Green 2 modifié (image, couleur, disposition colonne bas de page)
Chris
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 24
Inscription: 29 Fév 2012, 21:29
Localisation: Nîmes


Retourner vers Développement

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron