Back to PhocacartCalculation class

Method calculateDiscountFixedAmount

public static
calculateDiscountFixedAmount
(mixed $ratio, mixed $quantity, mixed &$priceItems, mixed &$total, mixed $taxKey = '')

Method calculateDiscountFixedAmount - Source code

public static function calculateDiscountFixedAmount($ratio, $quantity, &$priceItems, &$total, $taxKey = '')
{
    $price = new PhocacartPrice();
    // $taxCalcType type 1 ... percentage, 2 ... fixed amount (be aware it is not the tax calculation set in options: brutto, netto, none)
    $taxCalcType = $priceItems['taxcalctype'];
    // Reset info about discount for each step (reward points, product discount, cart discount, coupon)
    $priceItems['bruttodiscount'] = 0;
    $priceItems['nettodiscount'] = 0;
    $priceItems['taxdiscount'] = 0;
    $dB = $price->roundPrice($priceItems['brutto'] * $ratio / 100);
    $dN = $price->roundPrice($priceItems['netto'] * $ratio / 100);
    $dT = $price->roundPrice($priceItems['tax'] * $ratio / 100);
    // Price before discount
    $pbD = array();
    $pbD['brutto'] = $priceItems['brutto'];
    $pbD['netto'] = $priceItems['netto'];
    $pbD['tax'] = $priceItems['tax'];
    // Brutto If fixed VAT ($taxCalcType  == 2) then we cannot reduce the VAT, so we cannot reduce BRUTTO
    if ($priceItems['brutto'] < $dB) {
        $priceItems['bruttodiscount'] = $priceItems['brutto'];
        $priceItems['brutto'] = 0;
    } else {
        $priceItems['bruttodiscount'] = $taxCalcType == 2 ? $dN : $dB;
        $priceItems['brutto'] -= $priceItems['bruttodiscount'];
    }
    // Netto
    if ($priceItems['netto'] < $dN) {
        $priceItems['nettodiscount'] = $priceItems['netto'];
        $priceItems['netto'] = 0;
    } else {
        $priceItems['nettodiscount'] = $dN;
        $priceItems['netto'] -= $priceItems['nettodiscount'];
    }
    // Tax
    if ($priceItems['tax'] < $dT) {
        $priceItems['taxdiscount'] = $priceItems['tax'];
        $priceItems['tax'] = 0;
    } else {
        $priceItems['taxdiscount'] = $taxCalcType == 2 ? 0 : $dT;
        $priceItems['tax'] -= $priceItems['taxdiscount'];
    }
    if (!empty($total)) {
        // Possible TO DO - add different condition for netto and brutto
        /*
         * if ($taxCalcType == 2) {
        	if ($pbD['netto'] < $dB) {
        } else {
        	if ($pbD['brutto'] < $dB) {
        }
        */
        // Brutto
        if ($pbD['brutto'] < $dB) {
            $total['brutto'] -= $taxCalcType == 2 ? $pbD['netto'] * $quantity : $pbD['brutto'] * $quantity;
            $total['tax'][$taxKey]['brutto'] -= $taxCalcType == 2 ? $pbD['netto'] * $quantity : $pbD['brutto'] * $quantity;
        } else {
            $total['brutto'] -= $taxCalcType == 2 ? $dN * $quantity : $dB * $quantity;
            $total['tax'][$taxKey]['brutto'] -= $taxCalcType == 2 ? $dN * $quantity : $dB * $quantity;
        }
        // Netto
        if ($pbD['netto'] < $dN) {
            $total['netto'] -= $pbD['netto'] * $quantity;
            $total['tax'][$taxKey]['netto'] -= $pbD['netto'] * $quantity;
        } else {
            $total['netto'] -= $dN * $quantity;
            $total['tax'][$taxKey]['netto'] -= $dN * $quantity;
        }
        // Tax
        if ($pbD['tax'] < $dT) {
            $total['tax'][$taxKey]['tax'] -= $taxCalcType == 2 ? 0 : $pbD['tax'] * $quantity;
        } else {
            $total['tax'][$taxKey]['tax'] -= $taxCalcType == 2 ? 0 : $dT * $quantity;
        }
    }
    return true;
}