first commit
This commit is contained in:
161
lib/Provider/add_to_cart_purchase.dart
Normal file
161
lib/Provider/add_to_cart_purchase.dart
Normal file
@@ -0,0 +1,161 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:nb_utils/nb_utils.dart';
|
||||
|
||||
import '../Screens/Purchase/Repo/purchase_repo.dart';
|
||||
import '../Screens/vat_&_tax/model/vat_model.dart';
|
||||
|
||||
final cartNotifierPurchaseNew = ChangeNotifierProvider((ref) => CartNotifierPurchase());
|
||||
|
||||
class CartNotifierPurchase extends ChangeNotifier {
|
||||
List<CartProductModelPurchase> cartItemList = [];
|
||||
TextEditingController discountTextControllerFlat = TextEditingController();
|
||||
TextEditingController vatAmountController = TextEditingController();
|
||||
TextEditingController shippingChargeController = TextEditingController();
|
||||
|
||||
///_________NEW_________________________________
|
||||
num totalAmount = 0;
|
||||
num discountAmount = 0;
|
||||
num discountPercent = 0;
|
||||
num totalPayableAmount = 0;
|
||||
VatModel? selectedVat;
|
||||
num vatAmount = 0;
|
||||
bool isFullPaid = false;
|
||||
num receiveAmount = 0;
|
||||
num changeAmount = 0;
|
||||
num dueAmount = 0;
|
||||
num finalShippingCharge = 0;
|
||||
|
||||
void changeSelectedVat({VatModel? data}) {
|
||||
if (data != null) {
|
||||
selectedVat = data;
|
||||
} else {
|
||||
selectedVat = null;
|
||||
vatAmount = 0;
|
||||
vatAmountController.clear();
|
||||
}
|
||||
|
||||
calculatePrice();
|
||||
}
|
||||
|
||||
void calculateDiscount({
|
||||
required String value,
|
||||
bool? rebuilding,
|
||||
String? selectedTaxType,
|
||||
}) {
|
||||
if (value.isEmpty) {
|
||||
discountAmount = 0;
|
||||
discountPercent = 0;
|
||||
discountTextControllerFlat.clear();
|
||||
} else {
|
||||
num discountValue = num.tryParse(value) ?? 0;
|
||||
|
||||
if (selectedTaxType == null) {
|
||||
EasyLoading.showError('Please select a discount type');
|
||||
discountAmount = 0;
|
||||
discountPercent = 0;
|
||||
} else if (selectedTaxType == "Flat") {
|
||||
discountAmount = discountValue;
|
||||
|
||||
if (discountAmount > totalAmount) {
|
||||
discountTextControllerFlat.clear();
|
||||
discountAmount = 0;
|
||||
EasyLoading.showError('Enter a valid discount');
|
||||
}
|
||||
} else if (selectedTaxType == "Percent") {
|
||||
discountPercent = discountValue;
|
||||
discountAmount = (totalAmount * discountPercent) / 100;
|
||||
|
||||
if (discountAmount > totalAmount) {
|
||||
discountAmount = totalAmount;
|
||||
}
|
||||
} else {
|
||||
EasyLoading.showError('Invalid discount type selected');
|
||||
discountAmount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (rebuilding == false) return;
|
||||
calculatePrice();
|
||||
}
|
||||
|
||||
void updateProduct({required int index, required CartProductModelPurchase newProduct}) {
|
||||
cartItemList[index] = newProduct;
|
||||
calculatePrice();
|
||||
}
|
||||
|
||||
void calculatePrice({String? receivedAmount, String? shippingCharge, bool? stopRebuild}) {
|
||||
totalAmount = 0;
|
||||
totalPayableAmount = 0;
|
||||
dueAmount = 0;
|
||||
for (var element in cartItemList) {
|
||||
totalAmount += (element.quantities ?? 0) * (element.productPurchasePrice ?? 0);
|
||||
}
|
||||
totalPayableAmount = totalAmount;
|
||||
|
||||
if (discountAmount > totalAmount) {
|
||||
calculateDiscount(value: discountAmount.toString(), rebuilding: false);
|
||||
}
|
||||
if (discountAmount >= 0) {
|
||||
totalPayableAmount -= discountAmount;
|
||||
}
|
||||
if (selectedVat?.rate != null) {
|
||||
vatAmount = (totalPayableAmount * selectedVat!.rate!) / 100;
|
||||
vatAmountController.text = vatAmount.toStringAsFixed(2);
|
||||
}
|
||||
|
||||
totalPayableAmount += vatAmount;
|
||||
if (shippingCharge != null) {
|
||||
finalShippingCharge = num.tryParse(shippingCharge) ?? 0;
|
||||
}
|
||||
totalPayableAmount += finalShippingCharge;
|
||||
if (receivedAmount != null) {
|
||||
receiveAmount = num.tryParse(receivedAmount) ?? 0;
|
||||
}
|
||||
changeAmount = totalPayableAmount < receiveAmount ? receiveAmount - totalPayableAmount : 0;
|
||||
dueAmount = totalPayableAmount < receiveAmount ? 0 : totalPayableAmount - receiveAmount;
|
||||
if (dueAmount <= 0) isFullPaid = true;
|
||||
if (stopRebuild ?? false) return;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
double getTotalAmount() {
|
||||
double totalAmountOfCart = 0;
|
||||
for (var element in cartItemList) {
|
||||
totalAmountOfCart = totalAmountOfCart + ((element.productPurchasePrice ?? 0) * (element.quantities ?? 0));
|
||||
}
|
||||
|
||||
return totalAmountOfCart;
|
||||
}
|
||||
|
||||
void quantityIncrease(int index) {
|
||||
cartItemList[index].quantities = (cartItemList[index].quantities ?? 0) + 1;
|
||||
calculatePrice();
|
||||
}
|
||||
|
||||
void quantityDecrease(int index) {
|
||||
if ((cartItemList[index].quantities ?? 0) > 1) {
|
||||
cartItemList[index].quantities = (cartItemList[index].quantities ?? 0) - 1;
|
||||
}
|
||||
calculatePrice();
|
||||
}
|
||||
|
||||
void addToCartRiverPod({required CartProductModelPurchase cartItem, bool? fromEditSales, required bool isVariation}) {
|
||||
if (!cartItemList
|
||||
.any((element) => isVariation ? (element.productId == cartItem.productId && element.batchNumber == cartItem.batchNumber) : element.productId == cartItem.productId)) {
|
||||
cartItemList.add(cartItem);
|
||||
} else {
|
||||
int index = cartItemList.indexWhere(
|
||||
(element) => isVariation ? (element.productId == cartItem.productId && element.batchNumber == cartItem.batchNumber) : element.productId == cartItem.productId,
|
||||
);
|
||||
cartItemList[index] = cartItem;
|
||||
}
|
||||
(fromEditSales ?? false) ? null : calculatePrice();
|
||||
}
|
||||
|
||||
void deleteToCart(int index) {
|
||||
cartItemList.removeAt(index);
|
||||
calculatePrice();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user