Product Discounts

### Index Up << >>

## Product Discounts

Product discounts can be set upon display of any page. The discounts apply only to the customer receiving them, and are of one of three types:

        1. A discount for one particular item code (key is the item-code)
        2. A discount applying to all item codes (key is ALL_ITEMS)
        3. A discount for an individual line item (set the mv_disount attribute
           with embedded Perl)
        4. A discount applied after all items are totaled
           (key is ENTIRE_ORDER)

The discounts are specified via a formula. The formula is scanned for the variables `$q` and $s, which are substituted for with the item quantity and subtotal respectively. The variable `$s` is saved between iterations, so the discounts are cumulative. In the case of the item and all items discount, the formula must evaluate to a new subtotal for all items of that code that are ordered. The discount for the entire order is applied to the entire order, and would normally be a monetary amount to subtract or a flat percentage discount.

Discounts are applied to the effective price of the product, including any quantity discounts or price adjustments.

To apply a straight 20% discount to all items:

        [discount ALL_ITEMS] $s * .8 [/discount]

or with named attributes:

        [discount code=ALL_ITEMS] $s * .8 [/discount]

To take 25% off of only item 00-342:

        [discount 00-342] $s * .75 [/discount]

To subtract $5.00 from the customer's order:

        [discount ENTIRE_ORDER] $s - 5 [/discount]

To reset a discount, set it to the empty string:

        [discount ALL_ITEMS][/discount]

Perl code can be used to apply the discounts, and variables are saved between items and are shared with the `[calc]` tag. This example gives 10% off if two items are ordered, with 5% more for each additional up to a maximum of 30% discount:

        [calc]
            [item-list]
                $totalq{"[item-code]"} += [item-quantity];
            [/item-list]
                return '';
        [/calc]

        [item-list]
            [discount code="[item-code]"]
                return ($s)       if $totalq{"[item-code]"} == 1;
                return ($s * .70) if $totalq{"[item-code]"} > 6;
                return ($s * ( 1 - 0.05 * $totalq{"[item-code]"} ));
            [/discount]
        [/item-list]

Here is an example of a special discount for item code 00-343 which prices the second one ordered at 1 cent:

        [discount 00-343]
        return $s if $q == 1;
        my $p = $s/$q;
        my $t = ($q - 1) * $p;
        $t .= 0.01;
        return $t;
        [/discount]

If you want to display the discount amount, use the `[item-discount]` tag.

        [item-list]
        Discount for [item-code]: [item-discount]
        [/item-list]

Finally, if you want to display the discounted subtotal, you need to use the `[calc]` capability:

        [item-list]
        Discounted subtotal for [item-code]: [currency][calc]
                                                [item-price] * [item-quantity]
                                                [/calc][/currency]
        [/item-list]

### Index Up << >>