Magento 1 offre la possibilità di definire delle regole di carrello. Con una regola di carrello possiamo concedere al cliente le spedizioni gratuite se ad esempio l’importo del carrello supera un certo ammontare. Supponiamo di aver impostato una regola per la quale se il subtotale supera 50 euro le spese di spedizione sono gratuite.

Mettendo un prodotto nel carrello che supera i 50 euro vediamo apparire nel checkout il freeshipping. (costi di spedizione uguali a zero). Ora supponiamo di voler concedere un coupon di sconto al cliente di 10 euro.

Il cliente aggiunge al carrello un prodotto di 59 euro. Il sistema imposta le spese di spedizione a zero. Successivamente il cliente aggiunge il coupon di sconto. Ora il totale del carrello è di 49 euro (59 -10) ma le spese di spedizione restano sempre gratuite!

Per ovviare a questo comportamento abbiamo sviluppato un semplice modulo che aggiunge alle regole di carrello il controllo sul Subtotale meno gli sconti.

Per fare questo è necessario estendere una classe di magento e aggiungere sia la definizione che il controllo. La classe da estendere è la : Mage_SalesRule_Model_Rule_Condition_Address

Dobbiamo come prima cosa eseguire un override del metodo:

 public function loadAttributeOptions()
    {
        parent::loadAttributeOptions();

        $attributes = $this->getAttributeOption();

        $attributes['base_subtotal_with_discount'] = Mage::helper('salesrule')->__('Subtotal with discount');

        $this->setAttributeOption($attributes);

        return $this;
    }

In questo modo aggiungiamo alle opzioni il nostro Subtotale con sconto.

Poi è necessario definire il tipo di dato per il nostro nuovo parametro. Lo possiamo fare eseguendo un override del metodo:

public function getInputType()
    {
        if ($this->getAttribute() == 'base_subtotal_with_discount')
            return 'numeric';

        return parent::getInputType();
    }

Infine possiamo procedere alla validazione della nostra nuova opzione:

public function validate(Varien_Object $address)
    {
        $address->setBaseSubtotalWithDiscount($address->getBaseSubtotal() + $address->getDiscountAmount());

        return parent::validate($address);
    }

Ora nelle regole di carrello possiamo mettere una condizione di controllo non più sul subtotale ma sul subtotale più lo sconto. Lo sconto ha un valore negativo per questo abbiamo:

$address->setBaseSubtotalWithDiscount($address->getBaseSubtotal() + $address->getDiscountAmount());

Questo semplice modulo ci risparmia parecchi rompicapo e spese inutili. Se vi servono maggiori informazioni potete contattarci a questo form.

Summary
Article Name
Magento 1 spedizioni gratuite e coupon sconto
Description
In questo articolo spieghiamo come utilizzare il subototale più lo sconto per fare il calcolo delle spedizioni gratuite nelle regole di carrello.
Author