Files
app-hyggecraftery/lib/services/coupon_service.dart
2026-01-03 15:24:36 +01:00

83 lines
2.2 KiB
Dart

import 'dart:convert';
import 'package:http/http.dart' as http;
import '../models/coupon.dart';
import 'woocommerce_service.dart';
class CouponService {
/// Validiert einen Gutschein-Code
Future<Coupon> validateCoupon(String code) async {
try {
final queryParams = {
'code': code,
'status': 'publish',
'consumer_key': WooCommerceService.consumerKey,
'consumer_secret': WooCommerceService.consumerSecret,
};
final uri = Uri.parse('${WooCommerceService.baseUrl}/wp-json/wc/v3/coupons').replace(
queryParameters: queryParams,
);
final response = await http.get(uri);
if (response.statusCode == 200) {
final List<dynamic> data = json.decode(response.body);
if (data.isNotEmpty) {
final couponData = data[0];
return Coupon(
code: couponData['code'] ?? code,
description: couponData['description'],
discountType: couponData['discount_type'] ?? 'fixed_cart',
amount: couponData['amount'] ?? '0',
isValid: true,
);
} else {
return Coupon(
code: code,
discountType: 'fixed_cart',
amount: '0',
isValid: false,
errorMessage: 'Gutschein-Code nicht gefunden',
);
}
} else {
return Coupon(
code: code,
discountType: 'fixed_cart',
amount: '0',
isValid: false,
errorMessage: 'Fehler beim Validieren des Gutscheins',
);
}
} catch (e) {
return Coupon(
code: code,
discountType: 'fixed_cart',
amount: '0',
isValid: false,
errorMessage: 'Fehler: $e',
);
}
}
/// Berechnet den Rabatt für einen Warenkorb
double calculateDiscount(Coupon coupon, double cartTotal) {
if (!coupon.isValid) return 0.0;
final amount = double.tryParse(coupon.amount) ?? 0.0;
switch (coupon.discountType) {
case 'percent':
case 'percent_product':
return (cartTotal * amount) / 100;
case 'fixed_cart':
case 'fixed_product':
return amount;
default:
return 0.0;
}
}
}