12 include_once
'./Services/Payment/classes/class.ilPaymentPrices.php';
13 include_once
'./Services/Payment/classes/class.ilPaymentObject.php';
14 include_once
'./Services/Payment/classes/class.ilPaymentCoupons.php';
43 $this->session_id = session_id();
52 $this->session_id = $a_session_id;
62 $this->pobject_id = $a_pobject_id;
70 $this->price_id = $a_price_id;
79 if ($a_pay_method == 0)
81 return $this->sc_entries ? $this->sc_entries : array();
85 $tmp_entries = array();
86 foreach($this->sc_entries as $entry)
88 if ($entry[
'pay_method'] == $a_pay_method)
90 $tmp_entries[$entry[
'psc_id']] = $entry;
98 $this->total_amount = $a_total_amount;
111 $ilDB->update(
'payment_shopping_cart',
112 array(
'customer_id' => array(
'integer', (
int) $a_user_id)),
122 $ilDB->update(
'payment_shopping_cart',
123 array(
'session_id' => array(
'text', $a_new_sessid)),
124 array(
'session_id'=> array(
'text', $a_old_sessid)));
134 if(ANONYMOUS_USER_ID == $ilUser->getId())
136 $res = $this->db->queryf(
'
137 SELECT * FROM payment_shopping_cart
138 WHERE session_id = %s
139 AND pobject_id = %s',
140 array(
'text',
'integer'),
145 $res = $this->db->queryf(
'
146 SELECT * FROM payment_shopping_cart
147 WHERE customer_id = %s
148 AND pobject_id = %s',
149 array(
'integer',
'integer'),
150 array($this->user_obj->getId(), $a_pobject_id));
152 return $res->numRows() ?
true :
false;
159 if(ANONYMOUS_USER_ID == $ilUser->getId())
161 $res = $this->db->queryf(
'
162 SELECT * FROM payment_shopping_cart
163 WHERE session_id = %s
164 AND pobject_id = %s',
165 array(
'text',
'integer'),
170 $res = $this->db->queryf(
'
171 SELECT * FROM payment_shopping_cart
172 WHERE customer_id = %s
173 AND pobject_id = %s',
174 array(
'integer',
'integer'),
175 array($this->user_obj->getId(), $a_pobject_id));
179 return $this->db->fetchAssoc(
$res);
188 if(ANONYMOUS_USER_ID == $ilUser->getId())
191 $statement = $this->db->manipulateF(
'
192 DELETE FROM payment_shopping_cart
193 WHERE session_id = %s
194 AND pobject_id = %s',
195 array(
'integer',
'integer'),
202 $statement = $this->db->manipulateF(
'
203 DELETE FROM payment_shopping_cart
204 WHERE customer_id = %s
205 AND pobject_id = %s',
206 array(
'integer',
'integer'),
207 array($this->user_obj->getId(), $this->
getPobjectId()));
210 $next_id = $this->db->nextId(
'payment_shopping_cart');
212 $this->db->insert(
'payment_shopping_cart',
213 array(
'psc_id' => array(
'integer', $next_id),
214 'customer_id'=> array(
'integer', $this->user_obj->getId()),
215 'pobject_id' => array(
'integer', $this->
getPobjectId()),
216 'price_id' => array(
'integer', $this->
getPriceId()),
228 if(ANONYMOUS_USER_ID == $ilUser->getId())
230 $this->db->update(
'payment_shopping_cart',
231 array(
'pobject_id'=> array(
'integer', $this->
getPobjectId()),
232 'price_id' => array(
'integer', $this->
getPriceId()),
234 array(
'psc_id' => array(
'integer', (
int)$a_psc_id)));
239 $this->db->update(
'payment_shopping_cart',
240 array(
'customer_id' => array(
'integer', $this->user_obj->getId()),
241 'pobject_id' => array(
'integer', $this->
getPobjectId()),
242 'price_id' => array(
'integer', $this->
getPriceId()),
244 array(
'psc_id' => array(
'integer', (
int)$a_psc_id)));
251 public function delete($a_psc_id)
253 $statement = $this->db->manipulateF(
'
254 DELETE FROM payment_shopping_cart
256 array(
'integer'), array($a_psc_id));
264 if(ANONYMOUS_USER_ID == $ilUser->getId())
266 $statement = $this->db->manipulateF(
'
267 DELETE FROM payment_shopping_cart
268 WHERE session_id = %s',
274 $statement = $this->db->manipulateF(
'
275 DELETE FROM payment_shopping_cart
276 WHERE customer_id = %s',
277 array(
'integer'), array($this->user_obj->getId())
290 if(ANONYMOUS_USER_ID == $ilUser->getId())
292 $res = $ilDB->queryf(
'
293 SELECT * FROM payment_shopping_cart
294 WHERE session_id = %s',
295 array(
'text'), array(self::getSessionId()));
299 $res = $ilDB->queryf(
'
300 SELECT * FROM payment_shopping_cart
301 WHERE customer_id = %s',
302 array(
'integer'), array($a_user_id));
305 return $ilDB->numRows(
$res) ?
true :
false;
313 if(ANONYMOUS_USER_ID != $ilUser->getId())
315 $res = $this->db->queryf(
'
316 SELECT pobject_id, count(pobject_id) count FROM payment_shopping_cart
317 WHERE customer_id = %s
318 GROUP BY pobject_id',
319 array(
'integer'), array($this->user_obj->getId()));
321 while(
$row = $this->db->fetchAssoc(
$res))
323 if(
$row[
'count'] > 1)
325 $this->db->setLimit(1);
326 $this->db->manipulateF(
'
327 DELETE FROM payment_shopping_cart
328 WHERE customer_id = %s
329 AND pobject_id = %s',
330 array(
'integer',
'integer'),
331 array($this->user_obj->getId(),
$row[
'pobject_id']));
341 include_once
'./Services/Payment/classes/class.ilPaymentPrices.php';
343 $this->sc_entries = array();
346 if(ANONYMOUS_USER_ID == $ilUser->getId())
348 $res = $this->db->queryf(
'
349 SELECT * FROM payment_shopping_cart
350 WHERE session_id = %s',
355 $res = $this->db->queryf(
'
356 SELECT * FROM payment_shopping_cart
357 WHERE customer_id = %s',
358 array(
'integer'), array($this->user_obj->getId()));
361 while(
$row = $this->db->fetchObject(
$res))
363 $this->sc_entries[
$row->psc_id][
"psc_id"] =
$row->psc_id;
364 $this->sc_entries[
$row->psc_id][
"customer_id"] =
$row->customer_id;
365 $this->sc_entries[
$row->psc_id][
"pobject_id"] =
$row->pobject_id;
366 $this->sc_entries[
$row->psc_id][
"price_id"] =
$row->price_id;
367 $this->sc_entries[
$row->psc_id][
'session_id'] =
$row->session_id;
373 foreach($this->sc_entries as $entry)
378 $this->
delete($entry[
'psc_id']);
383 $tmp_pobj =
new ilPaymentObject($this->user_obj, $entry[
'pobject_id']);
386 if(
$pay_method == $tmp_pobj->PAY_METHOD_NOT_SPECIFIED)
388 $this->
delete($entry[
'psc_id']);
393 if($tmp_pobj->getStatus() == $tmp_pobj->STATUS_EXPIRES)
395 $this->
delete($entry[
'psc_id']);
401 $this->sc_entries[$entry[
'psc_id']][
'pay_method'] =
$pay_method;
404 'id' => $entry[
'price_id'],
421 if(!count($items = $this->
getEntries($a_pay_method)))
428 foreach($items as $item)
430 $tmp_pobject =
new ilPaymentObject($this->user_obj,$item[
'pobject_id']);
434 $f_result[$counter][
"psc_id"] = $item[
'psc_id'];
435 $f_result[$counter][
"pobject_id"] = $item[
'pobject_id'];
438 $f_result[$counter][
"obj_id"] = $tmp_obj->getId();
439 $f_result[$counter][
"type"] = $tmp_obj->getType();
440 $f_result[$counter][
"object_title"] = $tmp_obj->getTitle();
445 $f_result[$counter][
"obj_id"] =
'';
446 $f_result[$counter][
"type"] =
'';
447 $f_result[$counter][
"object_title"] = $lng->txt(
'object_deleted');
453 $price = number_format($price_data[
'price'], 2,
'.',
'');
455 $f_result[$counter][
"price"] = $price;
456 $f_result[$counter][
"price_string"] = $price_string;
457 $f_result[$counter][
'extension'] = $price_data[
'extension'];
459 require_once
'./Services/Payment/classes/class.ilShopVats.php';
460 $oVAT =
new ilShopVats((
int)$tmp_pobject->getVatId());
461 $f_result[$counter][
'vat_rate'] = $oVAT->
getRate();
462 $f_result[$counter][
'vat_unit'] = $tmp_pobject->getVat($price);
464 $f_result[$counter][
"duration"] = $price_data[
"duration"];
465 $f_result[$counter][
'unlimited_duration'] = $price_data[
'unlimited_duration'];
467 $f_result[$counter][
"price_type"] = $price_data[
"price_type"];
468 $f_result[$counter][
"duration_from"] = $price_data[
"duration_from"];
469 $f_result[$counter][
"duration_until"] = $price_data[
"duration_until"];
470 $f_result[$counter][
"description"] = $price_data[
"description"];
485 for ($i = 0; $i < count(
$result); $i++)
487 $amount +=
$result[$i][
"price"];
490 return (
float) $amount;
493 function getVat($a_amount = 0, $a_pobject_id = 0)
497 include_once
'./Services/Payment/classes/class.ilShopVats.php';
499 $res = $ilDB->queryF(
'
500 SELECT * FROM payment_objects WHERE pobject_id = %s',
501 array(
'integer'), array($a_pobject_id));
503 while(
$row = $ilDB->fetchObject(
$res))
505 $this->vat_id =
$row->vat_id;
508 $res = $ilDB->queryF(
'
509 SELECT * FROM payment_vats WHERE vat_id = %s',
510 array(
'integer'),array($this->vat_id));
512 while(
$row = $ilDB->fetchObject(
$res))
514 $this->vat_rate =
$row->vat_rate;
516 return (
float) ($a_amount - (round(($a_amount / (1 + ($this->vat_rate / 100.0))) * 100) / 100));
523 foreach (
$_SESSION[
'coupons'] as $payment_type => $coupons_array)
525 if (is_array($coupons_array))
527 foreach ($coupons_array as $coupon_key => $coupon)
529 $_SESSION[
'coupons'][$payment_type][$coupon_key][
'total_objects_coupon_price'] = 0.0;
530 $_SESSION[
'coupons'][$payment_type][$coupon_key][
'items'] = array();
539 if (is_array($coupons))
543 foreach ($coupons as $coupon)
545 $this->coupon_obj->setId($coupon[
'pc_pk']);
546 $this->coupon_obj->setCurrentCoupon($coupon);
548 if (is_array($coupon[
'items']) && $coupon[
'total_objects_coupon_price'] > 0)
550 $bonus = ($this->coupon_obj->getCouponBonus($coupon[
'total_objects_coupon_price']));
552 foreach ($coupon[
'items'] as $item)
554 if (!array_key_exists($item[
'pobject_id'], $r_items))
556 $r_items[$item[
'pobject_id']] = $item;
557 $r_items[$item[
'pobject_id']][
'discount_price'] = (float) $item[
'math_price'];
560 $ratio = (float) $item[
'math_price'] / $coupon[
'total_objects_coupon_price'];
561 $r_items[$item[
'pobject_id']][
'discount_price'] += ($ratio * $bonus * (-1));
576 $query =
"DELETE FROM payment_shopping_cart "
578 .
" (SELECT psc_id FROM payment_shopping_cart "
579 .
" LEFT JOIN usr_session ON usr_session.session_id = payment_shopping_cart.session_id "
580 .
" WHERE customer_id = %s AND usr_session.session_id IS NULL)";
581 $ilDB->manipulateF(
$query, array(
'integer'), array(ANONYMOUS_USER_ID));
590 DELETE FROM payment_shopping_cart
591 WHERE pobject_id = %s',
592 array(
'integer'), array($a_pobject_id));
604 $user_id = $ilUser->getId();
606 if($user_id == ANONYMOUS_USER_ID)
612 if($a_paymethod != null)
614 $res = $ilDB->queryF(
'
615 SELECT psc_id, ref_id, vat_rate, duration, currency, price, unlimited_duration, extension, duration_from, duration_until, description,price_type, pay_method
616 FROM payment_shopping_cart psc
617 LEFT JOIN payment_prices pp ON psc.price_id
618 LEFT JOIN payment_objects po ON psc.pobject_id
619 LEFT JOIN payment_vats pv ON po.vat_id
620 WHERE customer_id = %s
622 AND pay_method = %s',
623 array(
'integer',
'integer',
'integer'), array($user_id, 1, $a_paymethod));
628 $res = $ilDB->queryF(
'
629 SELECT psc_id, ref_id, vat_rate, duration, currency, price, unlimited_duration, extension, duration_from, duration_until, description, price_type, pay_method
630 FROM payment_shopping_cart psc
631 LEFT JOIN payment_prices pp ON psc.price_id
632 LEFT JOIN payment_objects po ON psc.pobject_id
633 LEFT JOIN payment_vats pv ON po.vat_id
634 WHERE customer_id = %s
636 array(
'integer',
'integer'), array($user_id, 1));
640 while(
$row = $ilDB->fetchAssoc(
$res))