TIF_E41211491/lib/app/modules/pesanan/controllers/pesanan_controller.dart

187 lines
5.0 KiB
Dart

import 'package:dikantin/app/modules/utils/belumbayar.dart';
import 'package:get/get.dart';
import 'package:flutter/material.dart';
import '../../../data/models/belumbayar_model.dart';
import '../../../data/models/pesanan_model.dart';
import '../../../data/providers/pesanan_provider.dart';
class PesananController extends GetxController
with GetTickerProviderStateMixin {
//TODO: Implement PesananController
late AnimationController _controller;
late TabController tabController; // Tambahkan variabel TabController
final count = 0.obs;
final isLoading = true.obs; // Define RxBool for loading state
final pesananProvider = PesananProvider().obs; // Instantiate your provider
late Pesanan pesananProses = Pesanan();
late Pesanan pesananDikirim = Pesanan();
late Pesanan pesananDiterima = Pesanan();
late Pesanan belumbayar = Pesanan();
var orderProses = <DataPesanan>[].obs;
var orderDikirim = <DataPesanan>[].obs;
var orderDiterima = <DataPesanan>[].obs;
var belumBayar = <DataPesanan>[].obs;
@override
void onInit() {
super.onInit();
_controller = AnimationController(
vsync: this,
duration: Duration(seconds: 1),
);
tabController = TabController(length: 3, vsync: this);
tabController.addListener(_handleTabSelection);
loadProses();
loadDikirim();
loadDiterima();
loadBelumbayar();
}
@override
void onReady() {
super.onReady();
}
@override
void onClose() {
_controller.dispose();
tabController.dispose(); // Hapus TabController saat controller ditutup
super.onClose();
}
Future<void> refreshPesanan() async {
await loadProses();
await loadDikirim();
await loadDiterima();
await loadBelumbayar();
}
void _handleTabSelection() async {
// Handle perubahan tab di sini
switch (tabController.index) {
case 0:
loadProses();
break;
case 1:
loadDikirim();
break;
case 2:
loadDiterima();
break;
case 3:
loadBelumbayar();
break;
}
}
void increment() => count.value++;
void startAnimation() {
_controller.forward();
}
DataPesanan? findOrderById(String orderId) {
// Cari pesanan di setiap kategori (proses, dikirim, diterima)
final orderProsesById = orderProses
.firstWhereOrNull((order) => order.transaksi?.kodeTr == orderId);
if (orderProsesById != null) {
return orderProsesById;
}
final orderDikirimById = orderDikirim
.firstWhereOrNull((order) => order.transaksi?.kodeTr == orderId);
if (orderDikirimById != null) {
return orderDikirimById;
}
final orderDiterimaById = orderDiterima
.firstWhereOrNull((order) => order.transaksi?.kodeTr == orderId);
if (orderDiterimaById != null) {
return orderDiterimaById;
}
final belumbayarById = belumBayar
.firstWhereOrNull((order) => order.transaksi?.kodeTr == orderId);
if (belumbayarById != null) {
return belumbayarById;
}
return null; // Return null jika pesanan tidak ditemukan
}
Future<void> loadProses() async {
try {
isLoading(true);
final result = await pesananProvider.value.proses();
pesananProses = result;
orderProses.assignAll(result.data!);
update(); // Memanggil update() untuk memperbarui widget
isLoading(false);
} catch (error) {
isLoading(false);
print('Error fetching data: $error');
}
}
Future<void> loadDikirim() async {
try {
isLoading(true);
final result = await pesananProvider.value.dikirim();
pesananDikirim = result;
orderDikirim.assignAll(result.data!);
update(); // Memanggil update() untuk memperbarui widget
isLoading(false);
} catch (error) {
isLoading(false);
print('Error fetching data: $error');
}
}
Future<void> loadDiterima() async {
try {
isLoading(true);
final result = await pesananProvider.value.diterima();
pesananDiterima = result;
orderDiterima.assignAll(result.data!);
update(); // Memanggil update() untuk memperbarui widget
isLoading(false);
} catch (error) {
isLoading(false);
print('Error fetching data: $error');
}
}
Future<void> loadBelumbayar() async {
try {
isLoading(true);
final result = await pesananProvider.value.belumbayar();
belumbayar = result;
belumBayar.assignAll(result.data!);
update(); // Memanggil update() untuk memperbarui widget
isLoading(false);
} catch (error) {
isLoading(false);
print('Error fetching data: $error');
}
}
Future<void> batalkanPesanan(String kodeTr) async {
try {
isLoading(true);
await pesananProvider.value.batalkanPesanan(kodeTr);
// Refresh data setelah pembatalan pesanan berhasil
await loadProses();
update();
// loadDikirim();
// loadDiterima();
isLoading(false);
} catch (error) {
isLoading(false);
print('Error saat membatalkan pesanan: $error');
}
}
}