Allyta Posted June 3, 2021 Share Posted June 3, 2021 (edited) 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 June 4, 2021 by Allyta (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted June 3, 2021 Share Posted June 3, 2021 Quelle est la définition de la classe Reception ? Parce que c'est un objet Reception pas adminController^^ 1 Link to comment Share on other sites More sharing options...
Allyta Posted June 4, 2021 Author Share Posted June 4, 2021 (edited) 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 June 4, 2021 by Allyta Correction bêtise (see edit history) Link to comment Share on other sites More sharing options...
Allyta Posted June 4, 2021 Author Share Posted June 4, 2021 J'ai tenté en mettant des 'lang'=>false partout dans ma définition aussi... mais il réclame toujours la table _lang Link to comment Share on other sites More sharing options...
Eolia Posted June 4, 2021 Share Posted June 4, 2021 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); } Link to comment Share on other sites More sharing options...
Allyta Posted June 4, 2021 Author Share Posted June 4, 2021 Non, je suis en environnement de test donc pas de cache et recompilation à chaque appel. =/ Link to comment Share on other sites More sharing options...
Allyta Posted June 4, 2021 Author Share Posted June 4, 2021 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 😃 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now