diff --git a/src/components/CartDropdown.js b/src/components/CartDropdown.js
index a4c9c6c..64b5471 100644
--- a/src/components/CartDropdown.js
+++ b/src/components/CartDropdown.js
@@ -53,8 +53,8 @@ class CartDropdown extends Component {
currency: 'EUR'
});
- const shippingNetPrice = deliveryCost / (1 + 19 / 100);
- const shippingVat = deliveryCost - shippingNetPrice;
+ const shippingNetPrice = deliveryCost > 0 ? deliveryCost / (1 + 19 / 100) : 0;
+ const shippingVat = deliveryCost > 0 ? deliveryCost - shippingNetPrice : 0;
const totalVat7 = priceCalculations.vat7;
const totalVat19 = priceCalculations.vat19 + shippingVat;
const totalGross = priceCalculations.totalGross + deliveryCost;
@@ -139,14 +139,23 @@ class CartDropdown extends Component {
{currencyFormatter.format(priceCalculations.totalGross)}
- {deliveryCost > 0 && (
-
- Versandkosten:
-
- {currencyFormatter.format(deliveryCost)}
-
-
- )}
+
+
+ Versandkosten:
+ {deliveryCost === 0 && priceCalculations.totalGross < 100 && (
+
+ (kostenlos ab 100€)
+
+ )}
+
+
+ {deliveryCost === 0 ? (
+ kostenlos
+ ) : (
+ currencyFormatter.format(deliveryCost)
+ )}
+
+
Gesamtsumme:
diff --git a/src/components/profile/CheckoutForm.js b/src/components/profile/CheckoutForm.js
index 7159b8a..2ee8e78 100644
--- a/src/components/profile/CheckoutForm.js
+++ b/src/components/profile/CheckoutForm.js
@@ -93,6 +93,7 @@ class CheckoutForm extends Component {
deliveryMethod={deliveryMethod}
onChange={onDeliveryMethodChange}
isPickupOnly={isPickupOnly || hasStecklinge}
+ cartItems={cartItems}
/>
{(deliveryMethod === "DHL" || deliveryMethod === "DPD") && (
diff --git a/src/components/profile/DeliveryMethodSelector.js b/src/components/profile/DeliveryMethodSelector.js
index 48a6405..c03fa46 100644
--- a/src/components/profile/DeliveryMethodSelector.js
+++ b/src/components/profile/DeliveryMethodSelector.js
@@ -4,20 +4,27 @@ import Typography from '@mui/material/Typography';
import Radio from '@mui/material/Radio';
import Checkbox from '@mui/material/Checkbox';
-const DeliveryMethodSelector = ({ deliveryMethod, onChange, isPickupOnly }) => {
+const DeliveryMethodSelector = ({ deliveryMethod, onChange, isPickupOnly, cartItems = [] }) => {
+ // Calculate cart value for free shipping threshold
+ const cartValue = cartItems.reduce((total, item) => total + item.price * item.quantity, 0);
+ const isFreeShipping = cartValue >= 100;
+ const remainingForFreeShipping = Math.max(0, 100 - cartValue);
+
const deliveryOptions = [
{
id: 'DHL',
name: 'DHL',
- description: isPickupOnly ? "nicht auswählbar weil ein oder mehrere Artikel nur abgeholt werden können" : 'Standardversand',
- price: '6,99 €',
+ description: isPickupOnly ? "nicht auswählbar weil ein oder mehrere Artikel nur abgeholt werden können" :
+ isFreeShipping ? 'Standardversand - KOSTENLOS ab 100€ Warenwert!' : 'Standardversand',
+ price: isFreeShipping ? 'kostenlos' : '6,99 €',
disabled: isPickupOnly
},
{
id: 'DPD',
name: 'DPD',
- description: isPickupOnly ? "nicht auswählbar weil ein oder mehrere Artikel nur abgeholt werden können" : 'Standardversand',
- price: '4,90 €',
+ description: isPickupOnly ? "nicht auswählbar weil ein oder mehrere Artikel nur abgeholt werden können" :
+ isFreeShipping ? 'Standardversand - KOSTENLOS ab 100€ Warenwert!' : 'Standardversand',
+ price: isFreeShipping ? 'kostenlos' : '4,90 €',
disabled: isPickupOnly
},
{
@@ -114,6 +121,41 @@ const DeliveryMethodSelector = ({ deliveryMethod, onChange, isPickupOnly }) => {
))}
+
+ {/* Free shipping information */}
+ {!isFreeShipping && remainingForFreeShipping > 0 && (
+
+
+ 💡 Versandkostenfrei ab 100€ Warenwert!
+
+
+ Noch {remainingForFreeShipping.toFixed(2).replace('.', ',')}€ für kostenlosen Versand hinzufügen.
+
+
+ )}
+
+ {isFreeShipping && (
+
+
+ 🎉 Glückwunsch! Sie erhalten kostenlosen Versand!
+
+
+ Ihr Warenkorb von {cartValue.toFixed(2).replace('.', ',')}€ qualifiziert sich für kostenlosen Versand.
+
+
+ )}
>
);
diff --git a/src/components/profile/OrderProcessingService.js b/src/components/profile/OrderProcessingService.js
index 3ee8e7f..248cc7b 100644
--- a/src/components/profile/OrderProcessingService.js
+++ b/src/components/profile/OrderProcessingService.js
@@ -347,7 +347,7 @@ class OrderProcessingService {
// Calculate delivery cost
getDeliveryCost() {
- const { deliveryMethod, paymentMethod } = this.getState();
+ const { deliveryMethod, paymentMethod, cartItems } = this.getState();
let cost = 0;
switch (deliveryMethod) {
@@ -367,7 +367,16 @@ class OrderProcessingService {
cost = 6.99;
}
- // Add onDelivery surcharge if selected
+ // Check for free shipping threshold (>= 100€ cart value)
+ // Free shipping applies to DHL, DPD, and Sperrgut deliveries when cart value >= 100€
+ if (cartItems && Array.isArray(cartItems) && deliveryMethod !== "Abholung") {
+ const cartValue = cartItems.reduce((total, item) => total + item.price * item.quantity, 0);
+ if (cartValue >= 100) {
+ cost = 0; // Free shipping for orders >= 100€
+ }
+ }
+
+ // Add onDelivery surcharge if selected (still applies even with free shipping)
if (paymentMethod === "onDelivery") {
cost += 8.99;
}
diff --git a/src/components/profile/OrderSummary.js b/src/components/profile/OrderSummary.js
index 3ba49d0..97080e4 100644
--- a/src/components/profile/OrderSummary.js
+++ b/src/components/profile/OrderSummary.js
@@ -30,9 +30,9 @@ const OrderSummary = ({ deliveryCost, cartItems = [] }) => {
return acc;
}, { totalGross: 0, totalNet: 0, vat7: 0, vat19: 0 });
- // Calculate shipping VAT (19% VAT for shipping costs)
- const shippingNetPrice = deliveryCost / (1 + 19 / 100);
- const shippingVat = deliveryCost - shippingNetPrice;
+ // Calculate shipping VAT (19% VAT for shipping costs) - only if there are shipping costs
+ const shippingNetPrice = deliveryCost > 0 ? deliveryCost / (1 + 19 / 100) : 0;
+ const shippingVat = deliveryCost > 0 ? deliveryCost - shippingNetPrice : 0;
// Combine totals - add shipping VAT to the 19% VAT total
const totalVat7 = cartVatCalculations.vat7;
@@ -83,14 +83,23 @@ const OrderSummary = ({ deliveryCost, cartItems = [] }) => {
{currencyFormatter.format(cartVatCalculations.totalGross)}
- {deliveryCost > 0 && (
-
- Versandkosten:
-
- {currencyFormatter.format(deliveryCost)}
-
-
- )}
+
+
+ Versandkosten:
+ {deliveryCost === 0 && cartVatCalculations.totalGross < 100 && (
+
+ (kostenlos ab 100€)
+
+ )}
+
+
+ {deliveryCost === 0 ? (
+ kostenlos
+ ) : (
+ currencyFormatter.format(deliveryCost)
+ )}
+
+
Gesamtsumme: