Jump to content

Mise à jour TVA 19.6% vers 20% TTC Inchangé ps1.3


Recommended Posts

Bonjour,

 

un client sous ps1.3 voulait changer la tva mais garder ses prix ttc.

N'ayant pas trouvé de module payant pour la 1.3, j'ai développé un petit bout de code php qui permet de mettre à jour les champs "price" de la table ps_product afin que le prix HT soit recalculé et que le TTC ne bouge pas.
J'ai donc développé un peu dans l'urgence, et je partage ce bout de code si ça peut permettre à certains développeurs de gagner du temps.

 

Voici la page mais attention, ça fonctionne seulement si votre taxe 19.6% est l'Id taxe 1 (celle par défaut), dans l'onglet paiement puis taxes, de la version 1.3 de prestashop. ( Ne pas utiliser cette page pour une autre version, car je n'ai pas testé et ça ne fonctionnera certainement pas comme il faut )

Vous êtes libre de modifier le code afin de l'adapter à votre besoin, l'adaptation du code devrait être simple même pour un débutant en php.

 

Attention,

Avant d'utiliser cette page, veillez à sauvegarder votre base de donnée (ou au moins la table ps_product..).
Si vous n'avez pas accès au phpmyadmin et si vous n'avez pas sauvegardé votre base de donnée (ou la table ps_product), alors je vous déconseille d'utiliser ce code.

Ceci n'est pas un module, mais une page php "sur mesure" qui permet de mettre à jour le prix HT des produits de la taxe #1 qui est généralement celle de 19.6%.

 

Désolé d'insister mais je ne serais pas responsable en cas de soucis, et je ne pourrais pas vous aider (avec une mauvaise version, ou si l'id taxe n'est pas bonne, etc..) :

Si vous ne savez pas utiliser le phpmyadmin pour faire un export/import de table, mieux vaut ne pas aller plus loin (désolé mais encore une fois, ce n'est pas un module tout prêt, juste un gain de temps pour les développeurs).
 

http://www.too-web.fr/MajTVA.zip

 

Ou voici le code :

 

 

<?php
include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/init.php');
$result = Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'product` ADD `newTVA20` TINYINT( 1 ) NOT NULL');
    $result = Db::getInstance()->ExecuteS('
    SELECT id_product,price
    FROM  '._DB_PREFIX_.'product
    where id_tax=1 and newTVA20!=1
    order by id_product desc'
    );
    if(count($result)>0){
    for($i=0;$i<count($result);$i++){    
        $id_product=$result[$i]['id_product'];
        $price=$result[$i]['price'];
        $prixTTC=$price*1.196;
        $newHT_20pourcent=$prixTTC/1.2;
        $expl=explode(".",$newHT_20pourcent);
        $prix1=$expl[0];
        $prix2=$expl[1];
        $prixArrondit=str_split($prix2,6);
        $HT=$prix1.".".$prixArrondit[0];
        $newTTC=$HT*1.2;
        // echo $id_product." _ OLD HT : ".$price." _ OLD TTC 19.6% : ".$prixTTC." _ NEW HT : ".$HT." _ NEW TTC 20% : ".$newTTC."<br/>";
        if($majPrix = Db::getInstance()->Execute("
        update "._DB_PREFIX_."product
        set newTVA=1,
        price='".$HT."'
        where id_product=".$id_product
        ))
            echo "MAJ #".$id_product." OK : prix=".$HT."<br/>";
        else
            echo "MAJ #".$id_product." NON OK<br/>";
    }
    }else{
        echo "Aucun produit trouvé avec la taxe 19.6% ( id_tax = 1 )<br/><br/>La mise à jour du prix 19.6% vers 20% a déjà été effectuée";
    }
// $result = Db::getInstance()->Execute('ALTER TABLE `'._DB_PREFIX_.'product` DROP `newTVA20`');
?>

 

Pour info :

Je sais que certaines lignes peuvent être optimisées mais dans l'urgence, j'ai utilisé un code qui fonctionne, un str_split par exemple alors qu'il y avait d'autres solutions.

 

Pour info :

Il existe un super module (payant) pour les versions 1.4 et 1.5 ( http://www.prestashop.com/forums/topic/293323-module-certifi%C3%A9-prestashop-changement-de-tva-au-01012014/ ), et si ce module est compatible en version 1.3 un jour, je supprimerai surement ce sujet.

Link to comment
Share on other sites

Si le traitement est interrompu en plein millieu pour X raison, ça permet de ne pas rechanger un prix qui a été déjà changé.

 

Quand je fais l' update de la table product, je rajoute 1 à la colonne newTVA, afin de ne pas remettre à jour un prix qui a déjà été mis à jour.

J'ai commenté la ligne pour ceux qui veulent drop la colonne (qui ne sert qu'à éviter de mettre à jour plusieurs fois le prix).

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