Index: /mods/wpsg_mod_paypalapi.class.php
===================================================================
--- /mods/wpsg_mod_paypalapi.class.php	(revision 7928)
+++ /mods/wpsg_mod_paypalapi.class.php	(revision 7929)
@@ -323,5 +323,5 @@
 			// Wenn 0,- dann nix machen
 			$arBasket = $this->shop->basket->toArray();
-			if ($arBasket['sum']['preis_gesamt_brutto'] <= 0) return false;
+			if ($arBasket['arCalculation']['sum']['topay_brutto'] <= 0) return false;
 			
 			// Wenn PayPal nicht drin ist, dann nichts machen
@@ -1428,5 +1428,5 @@
                 array(
                     'amount' => array(
-                        'total' => number_format($arBasket['sum']['preis_gesamt_brutto'], 2, '.', ''),
+                        'total' => number_format($arBasket['arCalculation']['sum']['topay_brutto'], 2, '.', ''),
                         'currency' => $this->currency
                     ),
@@ -1460,6 +1460,24 @@
             }
 
+			// Wertgutschein - funktioniert von PayPal Seite her aus nicht, siehe Kommentar weiter unten
+			/*
+				if (isset($arBasket['arCalculation']['coupon'])) {
+
+						$item_list['items'][] = array(
+							'quantity' => '1',
+							'name' => __('Wertgutschein', 'wpsg'),
+							'description' => wpsg_translate(__('EingelÃ¶ster Gutschein Code:#1#', 'wpsg'), $arBasket[arCalculation]['coupon']['code']),
+							'sku' => $sku,
+							//'price' => -number_format($arBasket['arCalculation']['coupon']['netto'], 2, '.', ''),
+							'currency' => $this->currency,
+						);
+
+						$subTotal += -$arBasket['arCalculation']['coupon']['brutto'];
+
+					} 
+			*/
+
             // Gutschein
-            if (isset($arBasket['sum']['gs_brutto']))
+            if (isset($arBasket['arCalculation']['voucher']['brutto']))
             {
 
@@ -1467,26 +1485,28 @@
                     'quantity' => '1',
                     'name' => __('Gutschein', 'wpsg'),
-                    'description' => wpsg_translate(__('EingelÃ¶ster Gutschein Code:#1#', 'wpsg'), $arBasket['gs']['code']),
-                    'price' => number_format(-1 * $arBasket['sum']['gs_brutto'], 2, '.', ''),
+                    'description' => wpsg_translate(__('EingelÃ¶ster Gutschein Code:#1#', 'wpsg'), $arBasket['arCalculation']['voucher']['code']),
+                    //'price' => number_format(-1 * $arBasket['sum']['gs_brutto'], 2, '.', ''),
+                    'discount' => $arBasket['arCalculation']['voucher']['brutto'],
+					'currency' => $this->currency
+                );
+
+                $subTotal += -1 * $arBasket['arCalculation']['voucher']['brutto'];
+
+            }
+			
+
+            // Zahlungskosten/VergÃŒnstigungen
+            if (isset($arBasket['arCalculation']['sum']['brutto']) && $arBasket['arCalculation']['sum']['brutto'] != 0)
+            {
+
+                $item_list['items'][] = array(
+                    'quantity' => '1',
+                    'name' => (($arBasket['arCalculation']['sum']['brutto'] > 0)?__('GebÃŒhr fÃŒr Zahlungsart', 'wpsg'):__('Rabatt durch Zahlungsart', 'wpsg')),
+                    'description' => __('Rabatt, der Aufgrund der gewÃ€hlten Zahlungsart entstanden ist.', 'wpsg'),
+                    'price' => number_format($arBasket['arCalculation']['sum']['brutto'], 2, '.', ''),
                     'currency' => $this->currency
                 );
 
-                $subTotal += -1 * $arBasket['sum']['gs_brutto'];
-
-            }
-
-            // Zahlungskosten/VergÃŒnstigungen
-            if (isset($arBasket['sum']['preis_payment_brutto']) && $arBasket['sum']['preis_payment_brutto'] != 0)
-            {
-
-                $item_list['items'][] = array(
-                    'quantity' => '1',
-                    'name' => (($arBasket['sum']['preis_payment_brutto'] > 0)?__('GebÃŒhr fÃŒr Zahlungsart', 'wpsg'):__('Rabatt durch Zahlungsart', 'wpsg')),
-                    'description' => __('Rabatt, der Aufgrund der gewÃ€hlten Zahlungsart entstanden ist.', 'wpsg'),
-                    'price' => number_format($arBasket['sum']['preis_payment_brutto'], 2, '.', ''),
-                    'currency' => $this->currency
-                );
-
-                $subTotal += $arBasket['sum']['preis_payment_brutto'];
+                $subTotal += $arBasket['arCalculation']['sum']['brutto'];
 
             }
@@ -1570,11 +1590,11 @@
 
             // Versandkosten/VergÃŒnstigungen
-            if (isset($arBasket['sum']['preis_shipping_brutto']) && $arBasket['sum']['preis_shipping_brutto'] > 0)
+            if (isset($arBasket['arCalculation']['shipping']['brutto']) && $arBasket['arCalculation']['shipping']['brutto'] > 0)
             {
 
-                $details['shipping'] = number_format($arBasket['sum']['preis_shipping_brutto'], 2, '.', '');
-
-            }
-            else if (isset($arBasket['sum']['preis_shipping_brutto']) && $arBasket['sum']['preis_shipping_brutto'] < 0)
+                $details['shipping'] = number_format($arBasket['arCalculation']['shipping']['brutto'], 2, '.', '');
+
+            }
+            else if (isset($arBasket['arCalculation']['shipping']['brutto']) && $arBasket['arCalculation']['shipping']['brutto'] < 0)
             {
 
@@ -1582,9 +1602,9 @@
                     'quantity' => '1',
                     'name' => __('Rabatt aufgrund Versandart', 'wpsg'),
-                    'price' => number_format($arBasket['sum']['preis_shipping_brutto'], 2, '.', ''),
+                    'price' => number_format($arBasket['arCalculation']['shipping']['brutto'], 2, '.', ''),
                     'currency' => $this->currency
                 );
 
-                $subTotal += $arBasket['sum']['preis_shipping_brutto'];
+                $subTotal += $arBasket['arCalculation']['shipping']['brutto'];
 
             }
@@ -1636,5 +1656,5 @@
             }
 
-            if (wpsg_isSizedInt($this->shop->get_option('wpsg_mod_paypalapi_paypalexpress_details')) && floatval($subTotal) === floatval($arBasket['sum']['preis_gesamt_brutto']))
+            if (wpsg_isSizedInt($this->shop->get_option('wpsg_mod_paypalapi_paypalexpress_details')) && floatval($subTotal) === floatval($arBasket['arCalculation']['sum']['topay_brutto']))
             {
 
@@ -1657,5 +1677,5 @@
                             'quantity' => '1',
                             'name' => $this->shop->replaceUniversalPlatzhalter(__($this->shop->get_option('wpsg_mod_paypalapi_paypalexpress_subject'), 'wpsg'), $order_id),
-                            'price' => number_format($arBasket['sum']['preis_gesamt_brutto'], 2, '.', ''),
+                            'price' => number_format($arBasket['arCalculation']['sum']['topay_brutto'], 2, '.', ''),
                             'currency' => $this->currency
                         )
@@ -1731,5 +1751,5 @@
                     'amount' => [
                         'currency_code' => $this->currency,
-                        'value' => number_format($arBasket['sum']['preis_gesamt_brutto'], 2, '.', '')
+                        'value' => number_format($arBasket['arCalculation']['sum']['topay_brutto'], 2, '.', '')
                     ]
                 ]],
@@ -1767,6 +1787,35 @@
 
             }
-
-            if (isset($arBasket['sum']['preis_shipping_brutto']) && $arBasket['sum']['preis_shipping_brutto'] > 0) {
+		
+		// PayPal kann noch keine Negativen "Items" anlegen
+		// Must be greater than or equal to 0. If the currency supports decimals, only two decimal place precision is supported.
+		/*
+			if (isset($arBasket['arCalculation']['coupon'])) {
+				foreach ($arBasket['arCalculation']['coupon'] as $k => $c) {
+
+					$items[] = [
+						'quantity' => '1',
+						'name' => 'Wertgutschein',
+						'description' => $c['code'],
+						'sku' => $sku,
+						'unit_amount' => [
+                        	'currency_code' => $this->currency,
+                        	'value' => number_format($c['netto'], 2, '.', '')
+						],
+						'tax' => [
+                        	'currency_code' => $this->currency,
+                        	'value' => $c['tax']
+                    	]
+						];
+
+					$item_total += -$c['netto'];
+					$subTotal += -$c['brutto'];
+					$tax_total += -$c['tax'];
+
+				} 
+			}
+		*/
+
+            if (isset($arBasket['arCalculation']['shipping']['brutto']) && $arBasket['arCalculation']['shipping']['brutto'] > 0) {
 
                 $items[] = [
@@ -1777,19 +1826,19 @@
                     'unit_amount' => [
                         'currency_code' => $this->currency,
-                        'value' => number_format($arBasket['sum']['preis_shipping_netto'], 2, '.', '')
+                        'value' => number_format($arBasket['arCalculation']['shipping']['netto'], 2, '.', '')
                     ],
                     'tax' => [
                         'currency_code' => $this->currency,
-                        'value' => number_format($arBasket['sum']['preis_shipping_brutto'] - $arBasket['sum']['preis_shipping_netto'], 2, '.', '')
+                        'value' => number_format($arBasket['arCalculation']['shipping']['brutto'] - $arBasket['arCalculation']['shipping']['netto'], 2, '.', '')
                     ]
                 ];
 
-                $item_total += $arBasket['sum']['preis_shipping_netto'];
-                $subTotal += $arBasket['sum']['preis_shipping_brutto'];
-                $tax_total += ($arBasket['sum']['preis_shipping_brutto'] - $arBasket['sum']['preis_shipping_netto']);
-
-            }
-
-            if (isset($arBasket['sum']['preis_payment_brutto']) && $arBasket['sum']['preis_payment_brutto'] > 0) {
+                $item_total += $arBasket['arCalculation']['shipping']['netto'];
+                $subTotal += $arBasket['arCalculation']['shipping']['brutto'];
+                $tax_total += ($arBasket['arCalculation']['shipping']['brutto'] - $arBasket['arCalculation']['shipping']['netto']);
+
+            }
+
+            if (isset($arBasket['arCalculation']['sum']['payment_brutto']) && $arBasket['arCalculation']['sum']['payment_brutto'] > 0) {
 
                 $items[] = [
@@ -1800,29 +1849,42 @@
                     'unit_amount' => [
                         'currency_code' => $this->currency,
-                        'value' => number_format($arBasket['sum']['preis_payment_netto'], 2, '.', '')
+                        'value' => number_format($arBasket['arCalculation']['sum']['payment_netto'], 2, '.', '')
                     ],
                     'tax' => [
                         'currency_code' => $this->currency,
-                        'value' => number_format($arBasket['sum']['preis_payment_brutto'] - $arBasket['sum']['preis_payment_netto'], 2, '.', '')
+                        'value' => number_format($arBasket['arCalculation']['sum']['payment_brutto'] - $arBasket['arCalculation']['sum']['payment_netto'], 2, '.', '')
                     ]
                 ];
 
-                $item_total += $arBasket['sum']['preis_payment_netto'];
-                $subTotal += $arBasket['sum']['preis_payment_brutto'];
-                $tax_total += ($arBasket['sum']['preis_payment_brutto'] - $arBasket['sum']['preis_payment_netto']);
-
-            }
-
-            if (isset($arBasket['arCalculation']['voucher'])) {
-
-                foreach ($arBasket['arCalculation']['voucher'] as $v) {
-
-                    $subTotal += $v['brutto'];
-
-                    $discounts += abs($v['brutto']);
-
-                }
-
-            }
+                $item_total += $arBasket['arCalculation']['sum']['payment_netto'];
+                $subTotal += $arBasket['arCalculation']['sum']['payment_brutto'];
+                $tax_total += ($arBasket['arCalculation']['sum']['payment_brutto'] - $arBasket['arCalculation']['sum']['payment_netto']);
+
+            }
+
+			if (isset($arBasket['arCalculation']['voucher'])) {
+
+				foreach ($arBasket['arCalculation']['voucher'] as $v) {
+
+					$subTotal += $v['brutto'];
+
+					$discounts += abs($v['brutto']);
+
+				}
+
+			}
+			
+			if (isset($arBasket['arCalculation']['coupon'])) {
+
+				foreach ($arBasket['arCalculation']['coupon'] as $v) {
+
+					$subTotal += $v['brutto'];
+
+					$discounts += abs($v['brutto']);
+
+				}
+
+			}
+			
 
             if (isset($arBasket['arCalculation']['discount'])) {
@@ -1841,8 +1903,13 @@
             // Should equal item_total + tax_total + shipping + handling + insurance - shipping_discount - discount.
 
-            //wpsg_debug($arBasket);
-            //wpsg_debug(floatval($subTotal).'==='.floatval($arBasket['sum']['preis_gesamt_brutto']));
-
-            if (wpsg_isSizedInt($this->shop->get_option('wpsg_mod_paypalapi_paypalexpress_details')) && floatval($subTotal) === floatval($arBasket['sum']['preis_gesamt_brutto'])) {
+			//wpsg_debug($arBasket);
+            //wpsg_debug($arBasket['arCalculation']['sum']);
+        	//wpsg_debug($items);
+			wpsg_debug(floatval($subTotal));
+			wpsg_debug(floatval($arBasket['arCalculation']['sum']['brutto']));
+			//wpsg_debug(floatval($subTotal) === floatval($arBasket['arCalculation']['sum']['brutto']));
+			//die;
+
+            if (wpsg_isSizedInt($this->shop->get_option('wpsg_mod_paypalapi_paypalexpress_details')) && floatval($subTotal) === floatval($arBasket['arCalculation']['sum']['brutto'])) {
 
                 $request->body['purchase_units'][0]['items'] = $items;
@@ -1886,6 +1953,6 @@
 
                 $request->body['purchase_units'][0]['amount']['breakdown']['discount']['value'] =
-                    number_format($discounts, 2, '.', '');
-
+                    number_format($discounts, 2, '.', '');			
+					
             }
 
