Jump to content

Modification d'une date dans order


Recommended Posts

Bonjour, 

Dans commande ou il y'a la liste des produits , j'ai rajouté l'affichage d'une date qui correspond à une date de livraison du produit (sachant que les produit n'ont pas la même date de livraison pour une commande).

J'ai un bouton pour modifier un produit ( sa quantité , son prix ) et quand je clique sur mettre à jour, ça le met à jour. J'aimerais faire de même avec la date que j'affiche toujours avec le même bouton qui marche pour le reste . La date vient d'une table que j'ai crée.  Auriez vous une idée pour que je puisse du coup modifier ma date via ce bouton ? . J'ai une fonction dans product afin de faire un update: qui se trouve dans classes/product.php

 

    static public function update_date_Liv_Prod($newDate ,$id_order_detail)
        {
          
                return Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'order_date_liv` odl
                SET odl.Date = '.$newDate .'
                WHERE `id_order_detail` = '. (int) $id_order_detail) ;
          
            }

Dois-je mettre ma date dans un formulaire et récupérer avec un $_Post ? et à la place de $newDate mettre $_POST["date"] ? ou bien autrement ? Et ou dois-je appeler ma fonction  ? 

Le code d'un élément que le bouton modifie qui se trouve dans la template/controler/_product_line_.tpl

{if $can_edit}
		<span class="product_quantity_edit" style="display:none;">
			<input type="text" name="product_quantity" class="edit_product_quantity" value="{$product['product_quantity']|htmlentities}"/>
		</span>
		{/if}

Le bouton en question qui se trouve dans la template/controler/_product_line_.tpl

	{* Update controls *}
		<button type="button" class="btn btn-default submitProductChange" style="display: none;">
			<i class="icon-ok"></i>
			{l s='Update' d='Admin.Actions'}
		</button>

Ma version PS: 1.7.6.9

Merci de votre aide d'avance 

Link to comment
Share on other sites

Salut 

Ce code est dans la classe product.php donc je ne touche qu'au a la classe product et après au tpl

 static public function update_date_Liv_Prod($newDate ,$id_order_detail)
        {
          
                return Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'order_date_liv` odl
                SET odl.Date = '.$newDate .'
                WHERE `id_order_detail` = '. (int) $id_order_detail) ;
          
            }

 

Link to comment
Share on other sites

De ce que je comprend ton objectif est de mettre une date de livraison dans le detail de la commande (pour chaque produit commandé) à partir d'une date donnée dans le produit, donc a un moment il faut que la donnée se transfert dans OrderDetail.php soit en ajoutant un nouveau champs dans Order detail soit en injectant dans product_name (la ou y a le nom du produit et les declinaisons) est ce bien cela ? ou alors plus simple a partir de l id_product de la commande tu va aller chercher la date de livraison juste pour l afficher

 

Edited by Alexandre Carette (see edit history)
Link to comment
Share on other sites

En gros j'ai crée une table ou dedans il y'a une clé etrangère de order_detail, et la date de livraison du produit. J'arrive à l'afficher 

image.thumb.png.4fbb9d8ca2da35b55f7b3bbd56a1dd4a.png

Je souhaiterai enfaite les incrémenté à la création de la commande + 2 jours et quand je clique sur modifier pour pouvoir modifier la date de livraison du produit je souhaiterai que elle se mette à jour.

image.thumb.png.57c014b1345f2caabda4f1a8aff79ccd.png

Je ne sais pas si c'est plus compréhensible comme ça ? 

 

Link to comment
Share on other sites

ok donc faudrait que ton bouton soit

<button type="submit" name="updateDate" class="btn btn-default submitProductChange">
			<i class="icon-ok"></i>
			{l s='Update' d='Admin.Actions'}
		</button>

dans le post Process du controller (AdminOrdersController.php):

public function postProcess()
{

... code...

 if (Tools::isSubmit('updateDate') {
  var_dump('ok');
  die();
 }

... code...


}

voir deja si le boutton entre dans la fonction...

Edited by Alexandre Carette (see edit history)
Link to comment
Share on other sites

Du coup j'ai essayé ce que tu as fait , et je rencontre quelques soucis...

 

<td><input type="text" name="dateLiv" class="dateLiv" id="dateLiv" value="testDateLiv_{$product.product_reference}" /></td>

le input ne s'affiche pas 

et de plus mon bouton Modifier( qui était de base) ne fait plus rien.. aurais-tu une idée ? 

Link to comment
Share on other sites

Problème résolu pour le input il s'affiche 

image.thumb.png.077e0737d756fe9a02ecb9946b6ccc34.png

Mais cependant quand je clique sur Modifier ou ModifDateLiv rien ne se passe..  

Et ce qui est du code je n'ai rien changé mis a part ce que j'ai rajouté 

Les boutons

	{* Modif dateLiv *}
		<button type="button" class="btn btn-default submitChangeDateLiv" style="display : block;">
			<i class="icon-ok"></i>
			{l s='ModifDateLiv' d='Admin.Actions'}
		</button>
		
		{* Modif dateLiv *}
		<button type="button" class="btn btn-default submitProductChange" style="display: none;">
			<i class="icon-ok"></i>
			{l s='Update' d='Admin.Actions'}	
		</button>
		<button type="button" class="btn btn-default cancel_product_change_link" style="display: none;">
			<i class="icon-remove"></i>
			{l s='Cancel' d='Admin.Actions'}
		</button>

Dans adminOrdersController.php

   public function ajaxProcessupdateDateLivProd(){
        $id_order_detail = Tools::getValue('id_order_detail'); 
        $date_liv =Tools::getValue('date_liv'); 
        $var_dump($date_liv) ; 
        die();
    }

dans order.js 

	$('button.submitChageDateLiv').unbind('click').click(function(e){
		e.preventDefault();
		
		var DateLiv = $(this).closest('tr.product-line-row').find('td.dateLiv').val();
		var id_order_detail = $(this).closest('tr.product-line-row').find('td.edit_product_id_order_detail').val();

		query = 'ajax=1&token='+token+&'action=updateDateLivProd&id_order_detail='+id_order_detail+'&date_liv='+DateLiv+'&';


		$.ajax({
			type:'POST',
			url: admin_order_tab_link,
			cache:false,
			dataType: 'json',
			data : query,
			success: function(data)
			{
				if (data.result)
				{
					console.log('ok');
				}
				else	
					jAlert(data.error);
			}
		});

	}

Et pour le reste je n'ai rien changé 

Link to comment
Share on other sites

Hop parfait, désolé encore.. je vais devoir apprendre à copier 😅

 image.png.498ab788d1804fe4d48236fafaa73235.png

 

Du coup maintenant si j'ai bien compris, je peux faire appel dans cette même fonction  à ma fonction update_date_Liv_Prod() dans la classe product ? 

 

 

dans ajaxProcessupdateDateLivProd() je récupère mes 2 variables, et je peux faire appel a ma fonction qui donnera ça du coup ? 

 static public function update_date_Liv_Prod($date_liv,$id_order_detail)
        {
          
                return Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'order_date_liv` odl
                SET odl.Date = '.$date_liv .'
                WHERE `id_order_detail` = '.$id_order_detail ;
          
            }
Link to comment
Share on other sites

ok donc la on est dans le controller AdminOrdersController on a recup les deux variables donc on peux faire la requete d'update comme ceci

 /* Modif Alex */
    public function ajaxProcessupdateDateLivProd()
    {
        $id_order_detail = Tools::getValue('id_order_detail');

        $date_liv = Tools::getValue('date_liv');

        $sql= Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'order_date_liv` odl
                SET odl.Date = '.$date_liv .'
                WHERE `id_order_detail` = '.$id_order_detail ;

       return $sql;

    }
    /* Modif Alex */

cdt

Edited by Alexandre Carette (see edit history)
Link to comment
Share on other sites

Super merci

Cependant quand je clique sur le bouton ça devrait modifier la date, 

 

image.thumb.png.e11e39eef9c41e959e634f22fe0c2ddb.png

 

Mais ça ne fait rien et il récupère pas de valeur sur la variable... 


UPDATE: ça marche 1x sur 3  , faut juste attendre un peu de temps et f5 après !!!!!! Merci beaucoup de ton aide et ta patience ! 

 

Edited by Bllidz (see edit history)
Link to comment
Share on other sites

Et au final bizarre j'ai tapé 1999-12-28 et ça m'a affiché 1959.. mais si je tape juste un nombre cela fonctionne (fin ca me fait une soustraction ) 

image.thumb.png.72dac1bf717d9c2a60cc2b294da8b401.png

 

il a pas l'air d'aimer les lettres mais les chiffres il aime bien 

image.png.4ad7d34823a247ab5ed3f8add8759c0f.png

et avec un chiffre (qui passe en string) 

image.png.d1ccdafec34f0ade7b83acc9a20654d6.png

Edited by Bllidz (see edit history)
Link to comment
Share on other sites

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
×
×
  • Create New...