add structure
This commit is contained in:
119
lib/model/product_model.dart
Normal file
119
lib/model/product_model.dart
Normal file
@@ -0,0 +1,119 @@
|
||||
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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user