Jump to content

[Résolu] RowAction('delete') qui ne fonctionne pas sans table_lang


Recommended Posts

Bonjour,

Je suis en train de faire un module avec formulaires CRUD, listes, etc...
Vu que c'est un module à destination de mon entreprise, je le fais en français donc je n'ai pas de table_lang.
Le souci c'est que mon bulk pour l'action delete cherche toujours la table_lang pour supprimer le contenu d'une ligne.

Est-ce je peux changer la requête DELETE dans une fonction dans mon controller où j'appelle mon RowAction('delete') ? (Si oui, quelle forme a-t-elle ? PostProcess ?)
ou sinon
Est-ce que je peux dupliquer le RowAction('delete') et changer sa requête DELETE dans son fichier d'initialisation ? (Si oui, quel est le nom du fichier où il est mis en place ? Mon IDE me propose 110 fichiers avec des RowActions...)

Si ma question n'était pas claire :
Erreur
La table 'bdd.ps_reception_lang' n'existe pas<br /><br /><pre>SELECT * FROM `ps_reception_lang` WHERE `id_reception` = 541</pre>
at line 769 in file classes/db/Db.php

<?php 
include '../modules/gestionProduction/classes/Ingredient.php';
include '../modules/gestionProduction/classes/Fournisseur.php';
include '../modules/gestionProduction/classes/Reception.php';
include '../modules/gestionProduction/classes/Transporteur.php';
include '../modules/gestionProduction/classes/Unite.php';


class AdminGestionReceptionController extends ModuleAdminController{
    
  // Instanciation de la classe
  public function __construct(){

    $this->bootstrap = true; //Gestion de l'affichage en mode bootstrap
    $this->table = 'gp_reception'; //Table de l'objet
    $this->identifier = 'id_reception'; //Clé primaire de l'objet
    $this->className = Reception::class; //Classe de l'objet
    $this->lang = false; // <= Je précise bien pas de lang

         
    //Liste des champs de l'objet à afficher dans la liste
    $this->fields_list = array(
      'date_reception' => array('title' => 'Date', 'width' => 'auto', 'remove_onclick' => true),
      'ingredient_reception' => array('title' => 'Ingrédient', 'width' => 'auto', 'remove_onclick' => true), 
      'fournisseur_reception' => array('title' => 'Fournisseur', 'width' => 'auto', 'remove_onclick' => true),
      'ingredient_quantite' => array('title' => 'Quantité', 'width' => 'auto', 'remove_onclick' => true),
      'num_lot_fournisseur_reception' => array('title' => 'Num lot fournisseur', 'width' => 'auto', 'remove_onclick' => true),
      'num_lot_reception' => array('title' => 'Num lot', 'width' => 'auto', 'remove_onclick' => true),
      'quantite_conforme_reception' => array('title' => 'Conformité', 'width' => 'auto', 'remove_onclick' => true),
      'integrite_reception' => array('title' => 'Intégrité', 'width' => 'auto', 'remove_onclick' => true),
    );

    //Ajout d'actions sur chaque ligne
    //$this->addRowAction('view');
    $this->addRowAction('edit');
    $this->addRowAction('delete');
        
    parent::__construct();
  }
 
  /** 
  * Récupération et stockage des données après validation du formulaire
  */
  public function postProcess(){
    if (Tools::isSubmit('validerAjoutReception')) {        
      //On récupère les données entrées dans le formulaire d'ajout
      //Insertion des données dans la BDD
 	 }
      //Redirection vers la liste 
      $this->redirect_after = Context::getContext()->link->getAdminLink('AdminGestionReception', true);

      parent::postProcess();
    } 
    elseif (Tools::isSubmit('delete' . $this->table)) {
      if (!($obj = $this->loadObject(true))) {
        return;
      } else {
        //Suppression de la réception
       Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'gp_reception` WHERE `id_reception`=' . (int) $obj->id);

        return parent::postProcess();
      }
    } else {
      return parent::postProcess();
    }
  }
}

Merci 😃

Edited by Allyta (see edit history)

Share this post


Link to post
Share on other sites

Merci pour ta réponse 😃 
Mon model Reception est le suivant

<?php
/* 
Classe Reception.
Réalisé par : Allyta
*/
class Reception extends ObjectModel{
  public $id;
  public $id_reception; 
  public $id_ingredient;
  public $id_fournisseur;
  public $date_reception;
  public $ingredient_quantite_reception;
  public $id_unite;
  public $num_lot_fournisseur_reception;
  public $ddm_fournisseur_reception;
  public $num_lot_reception;
  public $ddm_reception;
  public $transporteur_reception;
  public $prix_ingredient_kg_reception;
  public $quantite_conforme_reception;
  public $integrite_reception;
  public $visa_reception;

  /**
   * @see ObjectModel::$definition
   */
  public static $definition = array(
    'table' => 'gp_reception',
    'primary' => 'id_reception',
    'multilang' => 'false',
    'fields' => array(
      'date_reception' => array('type'=>self::TYPE_DATE, 'validate'=> 'isDate', 'required' => true, 'size' =>255),
      'ingredient_quantite_reception' => array('type'=>self::TYPE_STRING, 'validate'=> 'isAnything', 'required' => true, 'size' =>255),
      'num_lot_fournisseur_reception' => array('type'=>self::TYPE_STRING, 'validate'=> 'isAnything', 'required' => true, 'size' =>255),
      'ddm_fournisseur_reception' => array('type'=>self::TYPE_DATE, 'validate'=> 'isDate', 'size' =>255),
      'num_lot_reception' => array('type'=>self::TYPE_STRING, 'validate'=> 'isAnything', 'required' => true, 'size' =>255),
      'ddm_reception' => array('type'=>self::TYPE_DATE, 'validate'=> 'isDate', 'size' =>255),
      'transporteur_reception' => array('type'=>self::TYPE_STRING, 'validate'=> 'isAnything', 'required' => true, 'size' =>255),
      'prix_ingredient_kg_reception' => array('type'=>self::TYPE_STRING, 'validate'=> 'isAnything', 'required' => true, 'size' =>255),
      'quantite_conforme_reception' => array('type'=>self::TYPE_BOOL, 'validate'=> 'isAnything', 'required' => true, 'size' =>1),
      'integrite_reception' => array('type'=>self::TYPE_BOOL, 'validate'=> 'isAnything', 'required' => true, 'size' =>1),
      'visa_reception' => array('type'=>self::TYPE_STRING, 'validate'=> 'isAnything', 'required' => true, 'size' =>255),
    )
  );

  /**
  * Reception constructor.
  * @param null $id
  */
  public function __construct($id = null)
  {
    parent::__construct($id);
  }

  /**
   * Return receptions.
   *
   * @return array Receptions
   */
  public static function getReceptions()
  {
    $query = new DbQuery();
    $query->select('s.*');
    $query->from('gp_reception', 's');
    $query->join(Shop::addSqlAssociation('reception', 's'));
    $query->orderBy(' s.`date_recetpion` DESC');
    $query->groupBy('s.id_reception');

    $receptions = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
    if ($receptions === false) {
      return false;
    }
    return $receptions;
  }

  /**
  * Delete reception
  */
  public function delete()
  {
    Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'gp_reception` WHERE `id_reception`=' . (int) $this->id);
    return false;
  }
}

 

Edited by Allyta
Correction bêtise (see edit history)

Share this post


Link to post
Share on other sites

Vous n'auriez pas du cache serveur ou autre ? Parce que le code est clair dans ObjectModel:

function delete() {

...
        // Database deletion for multilingual fields related to the object
        if (!empty($this->def['multilang']) && !$has_multishop_entries) {
            $result &= Db::getInstance()->delete($this->def['table'].'_lang', '`'.bqSQL($this->def['primary']).'` = '.(int)$this->id);
        }

 

Share this post


Link to post
Share on other sites

J'ai trouvé ! 
C'est tellement c*n que je m'excuse de t'avoir fais perdre du temps...
J'avais écris 'multilang' => 'false' au lieu de 'multilang' => false

Du coup le delete fonctionne mais me mets une petite erreur quand même.
C'est pas un bug bloquant donc je vais fermer le topic sur ça. 

Merci de ton aide 😃

1.JPG

Share this post


Link to post
Share on other sites

  • Allyta changed the title to [Résolu] RowAction('delete') qui ne fonctionne pas sans table_lang

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More