Files
enaklo-flutter/lib/sample/promo_sample_data.dart
T

210 lines
6.5 KiB
Dart
Raw Normal View History

2026-10-01 02:17:54 +07:00
// Models
//
// Mengikuti bentuk campaign di backend: tipe hadiah (POINTS / COINS / REWARD)
// dengan satu aturan (min. belanja, menu, hari, atau outlet) dan periode.
/// Hadiah yang didapat customer dari promo.
enum PromoType { point, coin, reward }
class Promo {
final String id;
final String title;
/// Satu kalimat pendek untuk kartu.
final String subtitle;
final PromoType type;
/// Hadiah dalam bentuk ringkas, mis. "2x EnakPoint" atau "+3 EnakCoin".
final String rewardLabel;
final String description;
final List<String> steps;
final List<String> terms;
/// Kosong berarti berlaku di semua outlet.
final List<String> outlets;
final DateTime startDate;
final DateTime endDate;
final bool isFeatured;
const Promo({
required this.id,
required this.title,
required this.subtitle,
required this.type,
required this.rewardLabel,
required this.description,
required this.steps,
required this.terms,
required this.startDate,
required this.endDate,
this.outlets = const [],
this.isFeatured = false,
});
}
// Sample Data
//
// 1 EnakPoint = potongan Rp 1. Belanja biasa memberi sekitar 1% EnakPoint.
DateTime _daysAgo(int days) => DateTime.now().subtract(Duration(days: days));
DateTime _daysFromNow(int days) => DateTime.now().add(Duration(days: days));
const String _stepLinkPhone =
'Sebutkan nomor HP akunmu ke kasir sebelum membayar.';
/// Getter, bukan `final`, supaya perubahan data langsung terbaca saat hot
/// reload (variabel global yang sudah terisi tidak diisi ulang).
List<Promo> get promoSamples => [
Promo(
id: 'p1',
title: 'Double EnakPoint Akhir Pekan',
subtitle: 'Semua belanja Sabtu & Minggu dapat EnakPoint 2x lipat',
type: PromoType.point,
rewardLabel: '2x EnakPoint',
description:
'Belanja di akhir pekan jadi lebih untung. Setiap transaksi pada hari '
'Sabtu dan Minggu mendapat EnakPoint dua kali lipat dari biasanya.',
steps: [
'Belanja di outlet mana pun pada hari Sabtu atau Minggu.',
_stepLinkPhone,
'EnakPoint 2x otomatis masuk setelah pesanan lunas.',
],
terms: [
'Berlaku untuk semua menu, kecuali pembelian EnakCoin.',
'Bonus dihitung dari total belanja setelah diskon.',
'Maksimal bonus 5.000 EnakPoint per transaksi.',
],
startDate: _daysAgo(6),
endDate: _daysFromNow(24),
isFeatured: true,
),
Promo(
id: 'p2',
title: 'Ngopi Dapat EnakCoin',
subtitle: 'Setiap Kopi Susu di Tumulu Coffee dapat +3 EnakCoin',
type: PromoType.coin,
rewardLabel: '+3 EnakCoin',
description:
'Kopi pagi sekaligus modal main EnakGame. Setiap pembelian Kopi Susu '
'di Tumulu Coffee memberi 3 EnakCoin tambahan.',
steps: [
'Pesan Kopi Susu ukuran apa pun di Tumulu Coffee.',
_stepLinkPhone,
'EnakCoin masuk otomatis setelah pesanan lunas.',
],
terms: [
'Berlaku kelipatan: 2 Kopi Susu = +6 EnakCoin.',
'Maksimal 15 EnakCoin per hari.',
],
outlets: ['Tumulu Coffee'],
startDate: _daysAgo(4),
endDate: _daysFromNow(10),
isFeatured: true,
),
Promo(
id: 'p3',
title: 'Belanja Rp 100 Ribu, Bonus 2.000 EnakPoint',
subtitle: 'Bonus langsung untuk belanja minimal Rp 100.000',
type: PromoType.point,
rewardLabel: '+2.000 EnakPoint',
description:
'Dapatkan bonus 2.000 EnakPoint, setara potongan Rp 2.000 di belanja '
'berikutnya, untuk setiap transaksi minimal Rp 100.000.',
steps: [
'Belanja minimal Rp 100.000 dalam satu transaksi.',
_stepLinkPhone,
'Bonus masuk otomatis, di luar EnakPoint belanja biasa.',
],
terms: [
'Minimum belanja dihitung sebelum pajak.',
'Berlaku 1 kali per customer per hari.',
],
startDate: _daysAgo(12),
endDate: _daysFromNow(2),
),
Promo(
id: 'p4',
title: 'Gratis Es Teh Manis',
subtitle: 'Belanja Rp 50.000 di Bakso 343, dapat reward Es Teh Manis',
type: PromoType.reward,
rewardLabel: 'Gratis Es Teh',
description:
'Makan bakso makin segar. Belanja minimal Rp 50.000 di Bakso 343 dan '
'dapatkan reward 1 Es Teh Manis untuk kunjungan berikutnya.',
steps: [
'Belanja minimal Rp 50.000 di Bakso 343.',
_stepLinkPhone,
'Reward masuk ke Reward Saya dan berlaku 14 hari.',
],
terms: [
'Reward hanya bisa dipakai di Bakso 343.',
'Maksimal 1 reward per customer per hari.',
],
outlets: ['Bakso 343'],
startDate: _daysAgo(2),
endDate: _daysFromNow(14),
isFeatured: true,
),
Promo(
id: 'p5',
title: 'Rabu Ramen',
subtitle: 'Setiap Rabu, tiap porsi ramen dapat +1.500 EnakPoint',
type: PromoType.point,
rewardLabel: '+1.500 EnakPoint',
description:
'Hari Rabu jadi hari ramen. Setiap porsi ramen di Ramenmulu pada hari '
'Rabu memberi bonus 1.500 EnakPoint.',
steps: [
'Pesan ramen di Ramenmulu pada hari Rabu.',
_stepLinkPhone,
'Bonus masuk otomatis setelah pesanan lunas.',
],
terms: [
'Berlaku untuk semua varian ramen, tidak termasuk topping.',
'Maksimal 3 porsi per transaksi.',
],
outlets: ['Ramenmulu'],
startDate: _daysAgo(20),
endDate: _daysFromNow(21),
),
Promo(
id: 'p6',
title: 'Modal Main EnakGame',
subtitle: 'Belanja Rp 75.000 dapat +5 EnakCoin',
type: PromoType.coin,
rewardLabel: '+5 EnakCoin',
description:
'Tambah kesempatan menang hadiah di EnakGame. Setiap belanja minimal '
'Rp 75.000 memberi 5 EnakCoin tambahan.',
steps: [
'Belanja minimal Rp 75.000 di outlet mana pun.',
_stepLinkPhone,
'Pakai EnakCoin untuk main EnakGame.',
],
terms: [
'Berlaku 1 kali per customer per hari.',
'EnakCoin mengikuti masa berlaku yang diatur outlet.',
],
startDate: _daysAgo(1),
endDate: _daysFromNow(7),
),
Promo(
id: 'p7',
title: 'Pekan Woku Pedas',
subtitle: 'Menu apa pun di Woku Pedas dapat EnakPoint 3x lipat',
type: PromoType.point,
rewardLabel: '3x EnakPoint',
description:
'Rayakan pembukaan menu baru Woku Pedas. Selama sepekan, semua '
'belanja di Woku Pedas mendapat EnakPoint tiga kali lipat.',
steps: [
'Belanja di Woku Pedas selama periode promo.',
_stepLinkPhone,
'EnakPoint 3x otomatis masuk setelah pesanan lunas.',
],
terms: ['Maksimal bonus 10.000 EnakPoint per transaksi.'],
outlets: ['Woku Pedas'],
startDate: _daysFromNow(3),
endDate: _daysFromNow(10),
),
];