assets/s2dipayment.php /// Art: Shop Business Logic /// Inhalt: Klasse payment_method, Klasse payment /// Beschreibung: Business Logic für die Bezahlung /// Benötigt: config.php /// CCML-Parsing: nein /// ////////////////////////////////////////////////////////////////////////////////////////// /// /// Letzte Änderungen: /// 23.07.2008 Anpassung für neuen Merkzettel /// shop to date 7 /// 09.12.2009 Nationale Versandarten hinzugefügt /// 25.01.2010 Bezahlart Kosten und Rabatte % und absolut /// 06.02.2010 Parameter für Bezahlmethoden erweitert /// 22.02.2010 PDF Erstellungvariablen hinzugefügt /// 10.03.2010 Emty delimiter strstr /// ////////////////////////////////////////////////////////////////////////////////////////// ///<10.03.2010/7.0.0.11/> if (!defined('SHOP_TO_DATE')) die('Forbidden'); // Klasse Bezahl-Methode class payment_method { var $uid = ""; var $caption = ""; var $info = ""; var $postgateway = ""; var $email = ""; var $amount = 0; var $absolute = 0; var $rebate_amount = 0; var $rebate_absolute = 0; var $vat = 0; var $free = 0; var $actualprice = 0; var $noship = 0; var $parameter = array(); var $version = 0; var $minimum; var $maximum; var $reliability; var $esdenabled; var $esautocharge; var $pageout_filename; var $total = null; function payment_method() { for ($i = 0; $i <= 5; $i++) $this->parameter[$i] = ''; } // Versandkostenfreiheit prüfen function calc_price($subtotal, $rebate) { // Kosten if ($this->amount) { if ($this->absolute) $this->actualprice = $this->amount; else $this->actualprice = round($subtotal * ($this->amount / 100), 2); // Rabatte } else if ($this->rebate_amount) $this->actualprice = 0; // Versandkostenfrei? if ($subtotal - $rebate >= $this->free && $this->free != 0) $this->actualprice = 0; } } // Klasse Bezahlung class payment { var $paymentmethods = array(); // Konstruktor Bezahl-Methoden definieren function payment() { global $pmethods; foreach ($pmethods as $p) { $pm = new payment_method(); $pm->caption = $p['caption']; $pm->info = $p['info']; $pm->postgateway = $p['postgateway']; $pm->email = $p['email']; $pm->noship = $p['noship']; $pm->uid = $p['uid']; $pm->amount = $p['amount']; $pm->absolute = $p['absolute']; $pm->rebate_amount = $p['rebate_amount']; $pm->rebate_absolute = $p['rebate_absolute']; $pm->vat = $p['vat']; $pm->free = $p['free']; $pm->parameter[0] = $p['parameter0']; $pm->parameter[1] = $p['parameter1']; $pm->parameter[2] = $p['parameter2']; $pm->parameter[3] = $p['parameter3']; $pm->parameter[4] = $p['parameter4']; $pm->parameter[5] = $p['parameter5']; $pm->parameter[6] = $p['parameter6']; $pm->parameter[7] = $p['parameter7']; $pm->parameter[8] = $p['parameter8']; $pm->parameter[9] = $p['parameter9']; $pm->version = $p['version']; $pm->minimum = $p['minimum']; $pm->maximum = $p['maximum']; $pm->reliability = $p['reliability']; $pm->esdenabled = $p['esdenabled']; $pm->autocharge = floor($p['autocharge']); $pm->pdf_creation = floor($p['pdfcreation']); $pm->pdf_creation_esd = floor($p['pdfcreation_esd']); $pm->autocharge = floor($p['autocharge']); $pm->pageout_filename = isset($p['pageoutfilename']) ? $p['pageoutfilename'] : null; $pm->countries = $p['countries']; array_push($this->paymentmethods, $pm); } } // Preise und nicht erlaubte Methoden kontrollieren für Auswahl function calc_prices(&$order) { $found = false; // Auf ESD Artikel prüfen $esd = false; foreach ($order->items as $item) if ($item->download_uid && !$item->memo) $esd = true; foreach (array_keys($this->paymentmethods) as $k) { $pm = &$this->paymentmethods[$k]; $pm->calc_price($order->get_subtotal(), $order->get_rebate()); // ESD Artikel und nicht ESD geeignete Bezahlmethode? if ($esd && !$pm->esdenabled) $pm->actualprice = -1; // Nicht erlaubte Methode? if ($order->client->shipping_uid && strstr($pm->noship, $order->client->shipping_uid)) $pm->actualprice = -1; // Bezahlung für dieses Land möglich? if ($pm->countries) { $country_found = false; $this_cc2 = substr($order->client->country, 0, 2); foreach (explode(',', $pm->countries) as $cc2) if ($this_cc2 == $cc2) $country_found = true; if (!$country_found) $pm->actualprice = -1; } // Minimum oder Maximum überschritten? if ($pm->minimum > $order->get_subtotal() - $order->get_rebate() && $pm->minimum || $pm->maximum < $order->get_subtotal() - $order->get_rebate() && $pm->maximum) $pm->actualprice = -1; // Kundenbonität if ($pm->reliability > $order->client->reliability) $pm->actualprice = -1; // Ggf. Auswahl löschen if ($pm->actualprice == -1 && $pm->uid == $order->client->payment_uid) $order->client->payment_uid = null; if ($pm->uid == $order->client->payment_uid) $found = true; } if (!$found) $order->client->payment_uid = null; } // Gewählte Bezahl-Methode auslesen function get($uid) { foreach ($this->paymentmethods as $pm) { if ($pm->uid == $uid) return $pm; } return false; } } ?>