first commit

This commit is contained in:
Aditya Siregar
2025-07-30 22:38:44 +07:00
commit 73320561b0
444 changed files with 64633 additions and 0 deletions
@@ -0,0 +1,97 @@
import 'dart:developer';
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:enaklo_pos/core/extensions/string_ext.dart';
import 'package:enaklo_pos/data/datasources/auth_local_datasource.dart';
import 'package:enaklo_pos/data/datasources/order_remote_datasource.dart';
import 'package:enaklo_pos/data/datasources/product_local_datasource.dart';
import '../../models/order_model.dart';
import '../../models/product_quantity.dart';
import '../../models/order_type.dart';
part 'order_bloc.freezed.dart';
part 'order_event.dart';
part 'order_state.dart';
class OrderBloc extends Bloc<OrderEvent, OrderState> {
final OrderRemoteDatasource orderRemoteDatasource;
OrderBloc(
this.orderRemoteDatasource,
) : super(const _Initial()) {
log("🔧 OrderBloc: Constructor called");
log("🔧 OrderBloc: OrderRemoteDatasource instance: $orderRemoteDatasource");
on<_Order>((event, emit) async {
log("🎯 OrderBloc: Event handler triggered!");
emit(const _Loading());
log("🚀 OrderBloc: Starting order process");
log("📋 Order event received: ${event.toString()}");
log("Start 1");
final subTotal = event.items.fold<int>(
0,
(previousValue, element) =>
previousValue +
(element.product.price!.toIntegerFromText * element.quantity));
// final total = subTotal + event.tax + event.serviceCharge - event.discount;
final totalItem = event.items.fold<int>(
0, (previousValue, element) => previousValue + element.quantity);
final userData = await AuthLocalDataSource().getAuthData();
final dataInput = OrderModel(
subTotal: subTotal,
paymentAmount: event.paymentAmount,
tax: event.tax,
discount: event.discount,
discountAmount: event.discountAmount,
serviceCharge: event.serviceCharge,
total: event.totalPriceFinal,
paymentMethod: event.paymentMethod,
totalItem: totalItem,
idKasir: userData.user?.id ?? 1,
namaKasir: userData.user?.name ?? 'Kasir A',
transactionTime: DateTime.now().toIso8601String(),
customerName: event.customerName,
tableNumber: event.tableNumber,
status: event.status,
paymentStatus: event.paymentStatus,
isSync: 0,
orderItems: event.items,
orderType: event.orderType,
);
log("Start 2");
//check state online or offline
log("🔄 About to call API to save order...");
log("📤 Order data being sent to API: ${dataInput.toServerMap()}");
log("🌐 OrderRemoteDatasource instance: $orderRemoteDatasource");
bool value = false;
try {
value = await orderRemoteDatasource.saveOrder(dataInput);
log("📥 API response received: $value");
} catch (e) {
log("💥 Error calling API: $e");
value = false;
}
int id = 0;
if (value) {
id = await ProductLocalDatasource.instance
.saveOrder(dataInput.copyWith(isSync: 1));
} else {
id = await ProductLocalDatasource.instance
.saveOrder(dataInput.copyWith(isSync: 1));
}
emit(_Loaded(
dataInput,
id,
));
});
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,21 @@
part of 'order_bloc.dart';
@freezed
class OrderEvent with _$OrderEvent {
const factory OrderEvent.started() = _Started;
const factory OrderEvent.order(
List<ProductQuantity> items,
int discount,
int discountAmount,
int tax,
int serviceCharge,
int paymentAmount,
String customerName,
int tableNumber,
String status,
String paymentStatus,
String paymentMethod,
int totalPriceFinal,
OrderType orderType,
) = _Order;
}
@@ -0,0 +1,9 @@
part of 'order_bloc.dart';
@freezed
class OrderState with _$OrderState {
const factory OrderState.initial() = _Initial;
const factory OrderState.loading() = _Loading;
const factory OrderState.loaded(OrderModel orderModel, int orderId) = _Loaded;
const factory OrderState.error(String message) = _Error;
}