Jump to content

Acquisti con IVA agevolata al 4% o al 10%. Come fare?


Recommended Posts

Buongiorno,

 

sto usando l'ultima versione di PrestaShop 1.6.0.6 e ho la necessità di permettere gli acquisti di uno stesso prodotto con differenti aliquote IVA: normale al 22% e due rate di IVA agevolata al 4% e al 10%.

 

Ho creato le mie 3 tasse.

Ho creato 3 nuovi gruppi di utenti.

 

E' possibile associare una tassa ad un gruppo di utenti? Quindi tutti gli utenti nel gruppo A avranno l'iva al 22%, quelli nel gruppo B al 10% e quelli nel gruppo C al 4%.

 

E possibile poi permettere agli utenti, in fase di registrazione, di scegliere a quale gruppo appartengono A, B o C tramite un dropdown?

 

 

Oppure esiste un'altra soluzione/plugin per poter gestire acquisti con iva agevolata? Nessuno ha mai avuto questa necessità?

 

Grazie mille

Stefano

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

Ho provato a prendere il file classes/tax/Tax.php

e copiarlo in override/classes/tax/Tax.php

quindi ho modificato la funzione
public static function getProductTaxRate($id_product, $id_address = null, Context $context = null)
{
 if ($context == null)
 $context = Context::getContext();

 $address = Address::initialize($id_address);
 $id_tax_rules = (int)Product::getIdTaxRulesGroupByIdProduct($id_product, $context);

 $tax_manager = TaxManagerFactory::getManager($address, $id_tax_rules);
 $tax_calculator = $tax_manager->getTaxCalculator();

 return $tax_calculator->getTotalRate();
} 

in questa versione 

 

public static function getProductTaxRate($id_product, $id_address = null, Context $context = null)
{
 if ($context == null)
  $context = Context::getContext();
 $address = Address::initialize($id_address);
 $groups = Customer::getGroupsStatic((int)($address->id_customer));
 $taxratenew = null;
 foreach ($groups as $g) {
  if ($g <= 4) {           //set the group you want here ( '>;' or '=') 
   $taxratenew = 1; //set the tax rate you want here (e.g. "0")
  } else if ($g == 5) {           //set the group you want here ( '>;' or '=') 
   $taxratenew = 2; //set the tax rate you want here (e.g. "0")
  } else if ($g == 6) {           //set the group you want here ( '>;' or '=') 
   $taxratenew = 4; //set the tax rate you want here (e.g. "0")
  }
 }

 if (!$taxratenew) {
  $id_tax_rules = (int)Product::getIdTaxRulesGroupByIdProduct($id_product, $context);
  $tax_manager = TaxManagerFactory::getManager($address, $id_tax_rules);
  $tax_calculator = $tax_manager->getTaxCalculator();
  $taxratenew = 22;
 }
return $taxratenew;
}

Il problema è che $g, che contiene il risultato di Customer::getGroupsStatic((int)($address->id_customer)); è sempre uguale a 1, indipendentemente dal gruppo a cui è assegnato l'utente.

 

Cosa sbaglio? Qual'è il modo corretto per ottenere l'id del gruppo a cui appartiene l'utente?

 

Link to comment
Share on other sites

Ora funziona! La funzione corretta è questa. Unico problema è che per cambiare le aliquote iva devo modificare questo file, le aliquote impostate nel pannello di controllo sono praticamente ignorate.

public static function getProductTaxRate($id_product, $id_address = null, Context $context = null)
	{
		if ($context == null)
			$context = Context::getContext();
							
		$groups = Customer::getGroupsStatic($context->cart->id_customer);
		$taxratenew = null;
		foreach ($groups as $g) {
			switch ($g) {
				case 1:
				case 2:
				case 3:
				case 4:
					$taxratenew = 22;
					break;
				case 5:
					$taxratenew = 10;
					break;
				case 6:
					$taxratenew = 4;
					break;
				default:
					$taxratenew = 10;
			}
		}
		
		if (!$taxratenew) {
			$id_tax_rules = (int)Product::getIdTaxRulesGroupByIdProduct($id_product, $context);
			$tax_manager = TaxManagerFactory::getManager($address, $id_tax_rules);
			$tax_calculator = $tax_manager->getTaxCalculator();
			$taxratenew = $tax_calculator->getTotalRate();
		}
		return $taxratenew;
	}
Link to comment
Share on other sites

  • 3 weeks later...

Per ora ho risolto con l'hack che ho scritto sopra, anche se un po' "sporco" mi fa ottenere il risultato voluto nel carrello.

Ancora non ho fatto una prova completando un acquisto fino in fondo, ma dovrebbe funzionare.

 

Ora, quando un utente manda al gestore del sito la documentazione per l'iva agevolata, bisogna solo assegnare il gruppo corretto all'utente.

Link to comment
Share on other sites

 

Ora funziona! La funzione corretta è questa. Unico problema è che per cambiare le aliquote iva devo modificare questo file, le aliquote impostate nel pannello di controllo sono praticamente ignorate.

Magari non è come dico, ma oltre alle aliquote, vanno applicati i regimi fiscali per ogni nazione (se vendi extra UE non devi applicare l'IVA), e forse è per questo motivo che ti sembra che le aliquote impostate vengono ignorate...

Comunque la tua soluzione è interessante, ma se non hai tenuto conto dei regimi, potresti avere qualche problema ad impostare le vendite extra UE (ammesso che ti interessi).

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