Arrondi de TVA

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

Arrondi de TVA

Messagepar appli » 12 Oct 2011, 07:36

Toujours le même Pb récurent.

Fatigué d'avoir des centimes qui se promènent quand je passe les factures opencart en compta, j'ai essayé de regarder pourquoi.

Opencart tronque la TVA à 2 chiffres sans appliquer d'arrondi comptable.

Exemple je viens de recevoir une petite commande :
sous total : 13,55
port : 2,65
TVA : 3,17
Total : 19,37

Je passe en compta :
sous total : 13,55
port : 2,65
TVA : 3,18
Total : 19,38

Le logiciel compta a bien appliqué l'arrondi comptable Opencart NON.
Donc quelques centaines de factures plus loin, je vous laisse apprécié le bord...

Aussi j'ai fait une petite modif système>library>cart.php

Code: Tout sélectionner
     public function getSubTotal() {
      $total = 0;
      
      foreach ($this->getProducts() as $product) {
         $total += $product['total'];
      }

      return $total;
     }
   
   public function getTaxes() {
      $taxes = array();
      
      foreach ($this->getProducts() as $product) {
         if ($product['tax_class_id']) {
            if (!isset($taxes[$product['tax_class_id']])) {
               $taxes[$product['tax_class_id']] = round($product['total'] / 100 * $this->tax->getRate($product['tax_class_id']), 2);
            } else {
               $taxes[$product['tax_class_id']] += round($product['total'] / 100 * $this->tax->getRate($product['tax_class_id']), 2);
            }
         }
      }
      
      return $taxes;


La fonction "round" arrondi.
Il semble que cela fonctionne correctement, sans cette fonction, on voit bien que le chiffre est tronqué et non arrondi.

Je reçois maintenant
sous total : 13,55
port : 2,65
TVA : 3,18
Total : 19,38

Si cela peut servir.
Open cart 1.4.9 . Purchase order, Informations submenu, Options Plus Redux
Avatar de l’utilisateur
appli
 
Messages: 11
Inscrit le: 21 Août 2011, 09:28
Localisation: AIX en PROVENCE

Re: Arrondi de TVA

Messagepar appli » 03 Nov 2011, 18:43

Bonsoir,

Je ressort ce PB.

Qui pourrait m'aider.

Exemple je viens de recevoir une commande de 108,57 ht et OC me calcul 21,31 de TVA.

Si je prends ma calculette 108,57 x 0,196 = 21,279... donc 21,28.

Comment passer cela en compta ? Lors d'un contrôle ce qui est regardé en premier c'est la TVA. Et là si il y a plusieurs dizaines de factures de ce type avec des problèmes de TVA, c'est le début des vrais PB.

I need some body help
Open cart 1.4.9 . Purchase order, Informations submenu, Options Plus Redux
Avatar de l’utilisateur
appli
 
Messages: 11
Inscrit le: 21 Août 2011, 09:28
Localisation: AIX en PROVENCE

Re: Arrondi de TVA

Messagepar Imaxine » 05 Nov 2011, 11:56

Dans le fichier system/library/cart.php (même modif que citée plus haut)

Chercher :
Code: Tout sélectionner
      foreach ($this->getProducts() as $product) {
         if ($product['tax_class_id']) {
            if (!isset($taxes[$product['tax_class_id']])) {
               $taxes[$product['tax_class_id']] = $product['total'] / 100 * $this->tax->getRate($product['tax_class_id']);
            } else {
               $taxes[$product['tax_class_id']] += $product['total'] / 100 * $this->tax->getRate($product['tax_class_id']);
            }
         }
      }
Et remplacer par :
Code: Tout sélectionner
      foreach ($this->getProducts() as $product) {
         if ($product['tax_class_id']) {
            if (!isset($taxes[$product['tax_class_id']])) {
               $taxes[$product['tax_class_id']] = round($product['total'] / 100 * $this->tax->getRate($product['tax_class_id']),2);
            } else {
               $taxes[$product['tax_class_id']] += round($product['total'] / 100 * $this->tax->getRate($product['tax_class_id']),2);
            }
         }
      }

Dans le fichier system/library/tax.php

Chercher :
Code: Tout sélectionner
     public function calculate($value, $tax_class_id, $calculate = TRUE) {    
      if (($calculate) && (isset($this->taxes[$tax_class_id])))  {
         $rate = $this->getRate($tax_class_id);
         
            return $value + ($value * $rate / 100);
       } else {
            return $value;
       }
     }
Et remplacer par :
Code: Tout sélectionner
   public function calculate($value, $tax_class_id, $calculate = TRUE) {   
      if (($calculate) && (isset($this->taxes[$tax_class_id])))  {
         $rate = $this->getRate($tax_class_id);
         $value = $value + ($value * $rate / 100);
         $value = round($value,2);
         
            return $value + ($value * $rate / 100);
       } else {
            return $value;
       }
     }

NOTE : Ces modifications sont valables aussi pour les versions supérieures à la v1.4.9.
Imaxine
 
Messages: 3023
Inscrit le: 27 Juil 2009, 19:28


Retour vers Développement

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Bing [Bot] et 0 invité(s)

cron
Copyright © 2009-2013 OpenCart France - Tous droits réservés