Exemplo n.º 1
0
 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);
 }