public function __addBookings($external_data = null) { global $ilUser, $ilObjDataCache; $sc = $this->psc_obj->getShoppingCart($this->pm_id); $total = 0; $total_vat = 0; $total_discount = 0; # $this->psc_obj->clearCouponItemsSession(); if (is_array($sc) && count($sc) > 0) { include_once './Services/Payment/classes/class.ilPaymentBookings.php'; //@todo check $this->usr_obj $book_obj = new ilPaymentBookings($this->usr_obj); for ($i = 0; $i < count($sc); $i++) { if (!empty($_SESSION['coupons'][$this->session_var])) { $sc[$i]['math_price'] = (double) $sc[$i]['price']; $tmp_pobject = new ilPaymentObject($this->user_obj, $sc[$i]['pobject_id']); foreach ($_SESSION['coupons'][$this->session_var] as $key => $coupon) { $this->coupon_obj->setId($coupon['pc_pk']); $this->coupon_obj->setCurrentCoupon($coupon); if ($this->coupon_obj->isObjectAssignedToCoupon($tmp_pobject->getRefId())) { $_SESSION['coupons'][$this->session_var][$key]['total_objects_coupon_price'] += (double) $sc[$i]['price']; $_SESSION['coupons'][$this->session_var][$key]['items'][] = $sc[$i]; } } unset($tmp_pobject); } } $coupon_discount_items = $this->psc_obj->calcDiscountPrices($_SESSION['coupons'][$this->session_var]); $transaction = ilInvoiceNumberPlaceholdersPropertyGUI::_generateInvoiceNumber($ilUser->getId()); for ($i = 0; $i < count($sc); $i++) { $pobjectData = ilPaymentObject::_getObjectData($sc[$i]['pobject_id']); $pobject = new ilPaymentObject($this->user_obj, $sc[$i]['pobject_id']); $price = $sc[$i]['price']; $bonus = 0.0; if (array_key_exists($sc[$i]['pobject_id'], $coupon_discount_items)) { $bonus = $coupon_discount_items[$sc[$i]['pobject_id']]['math_price'] - $coupon_discount_items[$sc[$i]['pobject_id']]['discount_price']; if ($bonus > 0) { $discount = round($bonus, 2) * -1; } else { $discount = round($bonus, 2); } } $book_obj->setTransaction($transaction); $book_obj->setPobjectId($sc[$i]['pobject_id']); $book_obj->setCustomerId($this->user_obj->getId()); $book_obj->setVendorId($pobjectData['vendor_id']); $book_obj->setPayMethod($pobjectData['pay_method']); $book_obj->setOrderDate(time()); $book_obj->setPrice($sc[$i]['price_string']); //$book_obj->setDiscount($bonus > 0 ? ilPaymentPrices::_getPriceStringFromAmount($bonus * (-1)) : ''); $book_obj->setDiscount($discount); $book_obj->setPayed($this->getPayed()); $book_obj->setAccess($this->getAccess()); $book_obj->setVoucher(''); // bmf $book_obj->setTransactionExtern(''); // bmf , paypal $book_obj->setVatRate($sc[$i]['vat_rate']); $book_obj->setVatUnit($sc[$i]['vat_unit']); $book_obj->setObjectTitle(strip_tags($sc[$i]['object_title'])); $book_obj->setAccessExtension($sc[$i]['extension']); switch ($sc[$i]["price_type"]) { case ilPaymentPrices::TYPE_DURATION_MONTH: $book_obj->setDuration($sc[$i]['duration']); break; case ilPaymentPrices::TYPE_DURATION_DATE: $book_obj->setDuration(0); $book_obj->setAccessStartdate($sc[$i]['duration_from']); $book_obj->setAccessEnddate($sc[$i]['duration_until']); break; case ilPaymentPrices::TYPE_UNLIMITED_DURATION: $book_obj->setDuration(0); $book_obj->setAccessEnddate(NULL); $book_obj->setUnlimitedDuration($sc[$i]['unlimited_duration']); break; } $book_obj->setPriceType($sc[$i]["price_type"]); // if ($external_data) { $book_obj->setVoucher($external_data['voucher']); // bmf $book_obj->setTransactionExtern($external_data['transaction_extern']); // bmf, paypal $book_obj->setStreet($external_data['street'], ''); $book_obj->setZipcode($external_data['zipcode']); $book_obj->setCity($external_data['city']); $book_obj->setCountry($external_data['country']); } else { if (isset($_SESSION[$this->session_var]['personal_data'])) { $book_obj->setStreet($_SESSION[$this->session_var]['personal_data']['street'], $_SESSION[$this->session_var]['personal_data']['house_number']); $book_obj->setPoBox($_SESSION[$this->session_var]['personal_data']['po_box']); $book_obj->setZipcode($_SESSION[$this->session_var]['personal_data']['zipcode']); $book_obj->setCity($_SESSION[$this->session_var]['personal_data']['city']); $book_obj->setCountry($_SESSION[$this->session_var]['personal_data']['country']); } else { $book_obj->setStreet($this->user_obj->getStreet(), ''); $book_obj->setPoBox($this->user_obj->getPoBox()); $book_obj->setZipcode($this->user_obj->getZipCode()); $book_obj->setCity($this->user_obj->getCity()); $book_obj->setCountry($this->user_obj->getCountry()); } } $booking_id = $book_obj->add(); // add purchased item to desktop ilShopUtils::_addPurchasedObjToDesktop($pobject); // autosubscribe user if purchased object is a course $obj_type = ilObject::_lookupType((int) $pobject->getRefId(), true); if ($obj_type == 'crs') { ilShopUtils::_assignPurchasedCourseMemberRole($pobject); } if (!empty($_SESSION['coupons'][$this->session_var]) && $booking_id) { foreach ($_SESSION['coupons'][$this->session_var] as $coupon) { $this->coupon_obj->setId($coupon['pc_pk']); $this->coupon_obj->setCurrentCoupon($coupon); if ($this->coupon_obj->isObjectAssignedToCoupon($pobject->getRefId())) { $this->coupon_obj->addCouponForBookingId($booking_id); } } } $obj_id = $ilObjDataCache->lookupObjId($pobjectData['ref_id']); $obj_type = $ilObjDataCache->lookupType($obj_id); $obj_title = $ilObjDataCache->lookupTitle($obj_id); $bookings['list'][] = array('pobject_id' => $sc[$i]['pobject_id'], 'type' => $obj_type, 'title' => '[' . $obj_id . ']: ' . $obj_title, 'duration' => $sc[$i]['duration'], 'vat_rate' => $sc[$i]['vat_rate'], 'vat_unit' => $sc[$i]['vat_unit'], 'price_string' => $sc[$i]['price_string'], 'price' => $sc[$i]['price'], "price_type" => $sc[$i]["price_type"], "duration_from" => $sc[$i]["duration_from"], "duration_until" => $sc[$i]["duration_until"], "b_pay_method" => $pobjectData["pay_method"], 'discount' => $discount, 'access_startdate' => $book_obj->getAccessStartdate(), 'access_enddate' => $book_obj->getAccessEnddate()); $total += $sc[$i]['price']; $total_vat += $sc[$i]['vat_unit']; $total_discount += $discount; if ($sc[$i]['psc_id']) { $this->psc_obj->delete($sc[$i]['psc_id']); } } if (!empty($_SESSION['coupons'][$this->session_var])) { foreach ($_SESSION['coupons'][$this->session_var] as $coupon) { $this->coupon_obj->setId($coupon['pc_pk']); $this->coupon_obj->setCurrentCoupon($coupon); $this->coupon_obj->addTracking(); } } } $bookings['total'] = $total; $bookings['total_vat'] = $total_vat; $bookings['total_discount'] = $total_discount; $bookings['transaction'] = $transaction; $bookings['street'] = $book_obj->getStreet(); $bookings['zipcode'] = $book_obj->getZipCode(); $bookings['city'] = $book_obj->getCity(); if (2 == strlen($book_obj->getCountry())) { $bookings['country'] = $this->__getCountryName(strtoupper($book_obj->getCountry())); } else { $bookings['country'] = $book_obj->getCountry(); } $bookings['transaction_extern'] = $book_obj->getTransactionExtern(); $this->user_obj->_toggleActiveStatusOfUsers(array($this->user_obj->getId()), 1); $_SESSION['forceRedirectToShoppingcart'] = 1; $this->__sendBill($bookings); }