private function discounts($item, $cartItem, $commission, $presenter_market_id, $market_id) { $this->orderObject->discount = Money::fromFloat(0); if (!empty($cartItem['coupons'])) { foreach ($cartItem['coupons'] as $couponId => $coupon) { if ($couponId == 0) { continue; } if ($item['type'] == 5 && $coupon['discount_percentage'] == 50) { continue; } //supply items cannot have half off coupons if ($item['item_type_id'] == Item::TYPE_CONVENTION_TICKET) { continue; } // convention tickets cannot have coupons if (count($this->orderObject->discounts) >= $cartItem['qty']) { continue; } // $this->orderObject->commissionSubtotal = $commission->copy()->times($cartItem['qty']); if (!empty($coupon['discount_percentage'])) { $discountAmount = $item['price']->copy()->times($coupon['discount_percentage'] / 100); $this->orderObject->vattotal -= $item['price_supplement']->display * ($coupon['discount_percentage'] / 100); $this->orderObject->base_price->subtract($this->orderObject->price_net->copy()->times($coupon['discount_percentage'] / 100)); } else { if (!empty($coupon['discount_flat'])) { $discountAmount = Money::fromString($coupon['discount_flat']); } else { $discountAmount = Money::fromFloat(0); } } $discountAmount = Money::min($discountAmount, $item['price']); $this->orderObject->itemSubtotal->subtract($discountAmount); $this->orderObject->discount->add($discountAmount); $this->orderObject->discount_remainder->add($item['price']->copy()->subtract($discountAmount)); $this->orderObject->commissionable->subtract($commission); $this->orderObject->commissionSubtotal->subtract($commission); if ($commission->isGreaterThanZero()) { $this->orderObject->marketCommissionable->subtract($this->orderObject->price_net); if ($this->orderObject->in_market === TRUE) { $this->orderObject->presenterCommissionable->subtract($this->orderObject->price_net); } else { $this->orderObject->presenterCommissionable->subtract($commission->copy()->times($this->orderObject->payPegRate)); } } // added this make sure that the market_commissionable_total value is correct. // if it's not, the front end will allow too much ycash to be applied to an order // potentially allowing negative prs and commission calculations $order_presenter_id = Configure::read("order_presenter_id"); // if (empty($order_presenter_id)) // { $this->orderObject->marketCommissionable->subtract($this->orderObject->price_supplement); // } //No points for discounted items $this->orderObject->totalPoints -= $this->orderObject->points; $this->orderObject->discounts[$couponId] = array("name" => $coupon['name'], "amount" => $discountAmount); } } else { $commission = Money::fromFloat(0); } if (in_array($item['sku'], ProductGlobal::halfPriceExcluded()) || $item['item_type_id'] == Item::TYPE_CONVENTION_TICKET || $item['item_type_id'] == Item::TYPE_SUPPLIES || $item['item_type_id'] == Item::TYPE_SUPPLIES_SETS) { $hpDisabled = true; } else { $hpDisabled = false; } return array('hpDisabled' => $hpDisabled, 'commission' => $commission); }