Files
fcs/lib/model/product_model.dart

120 lines
3.2 KiB
Dart
Raw Normal View History

2020-05-29 07:45:27 +06:30
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:logging/logging.dart';
import 'package:fcs/vo/product.dart';
import 'package:fcs/vo/setting.dart';
import 'base_model.dart';
import 'constants.dart';
import 'firebase_helper.dart';
class ProductModel extends BaseModel {
final log = Logger('ProductModel');
List<Product> products = [];
List<Product> tempProducts = [];
List<ProductPrice> get getPrices {
List<ProductPrice> productPrices = [];
this.products.forEach((p) => productPrices.addAll(p.getPrices));
productPrices.sort((p1, p2) => p1.compareTo(p2));
return productPrices;
}
String getProductName(String productID) {
return products.firstWhere((p) => p.id == productID).name;
}
Product getProduct(String productID) {
return products.firstWhere((p) => p.id == productID);
}
List<Product> get productsToEdit {
// clone products
tempProducts = products.map((p) => Product.clone(p)).toList();
tempProducts.sort((p1, p2) => p1.displayOrder.compareTo(p2.displayOrder));
// set old price with price
tempProducts.forEach((p) {
p.oldPirce = p.price;
p.action = "update";
});
return tempProducts;
}
void saveProduct(Product product, String name, price, displayOrder, int color,
bool isDisable) {
if (product == null) {
tempProducts.add(Product(
action: "create",
name: name,
price: int.parse(price),
color: color,
displayOrder: int.parse(displayOrder),
isDisable: isDisable));
} else {
Product _product = product;
_product.name = name;
_product.price = int.parse(price);
_product.color = color;
_product.displayOrder = int.parse(displayOrder);
_product.isDisable = isDisable;
if (_product.id == null) {
_product.action = "create";
} else {
_product.action = "update";
}
}
notifyListeners();
}
void deleteProduct(Product product) {
if (product == null) {
return;
}
if (product.id == null) {
tempProducts.remove(product);
} else {
Product _product = tempProducts.firstWhere((p) => p.id == product.id);
_product.action = "delete";
}
notifyListeners();
}
@override
void initSetting(Setting setting) {
super.initSetting(setting);
try {
getQuerySnapshot(
"/$biz_collection/${setting.okEnergyId}/$product_collection")
.listen((QuerySnapshot snapshot) {
products.clear();
products = snapshot.documents.map((documentSnapshot) {
var data = Product.fromMap(
documentSnapshot.data, documentSnapshot.documentID);
return data;
}).toList();
products.sort((p1, p2) => p1.displayOrder.compareTo(p2.displayOrder));
notifyListeners();
}).onError((e) {
log.warning("Error! $e");
});
} catch (e) {
log.warning("Error!! $e");
}
}
@override
logout() async {
tempProducts = [];
}
updateProducts(List<Product> products) async {
var items = [];
products.forEach((p) {
if (p.action != null) items.add(p.toMap());
});
await request("/products", "PUT", payload: items, token: await getToken());
}
}