From 37289e42c0daeec558e0072445a82cb1970f54c8 Mon Sep 17 00:00:00 2001 From: Sai Naw Wun Date: Thu, 15 Oct 2020 10:53:41 +0630 Subject: [PATCH] add discount api --- lib/data/provider/common_data_provider.dart | 16 ++++ lib/data/services/common_imp.dart | 17 +++- lib/data/services/common_service.dart | 6 ++ lib/domain/entities/discount.dart | 42 +++++++--- lib/pages/discount/discount_list.dart | 3 +- lib/pages/discount/model/discount_model.dart | 84 +++++++++---------- .../rates/discount_by_weight_editor.dart | 18 ++-- 7 files changed, 122 insertions(+), 64 deletions(-) diff --git a/lib/data/provider/common_data_provider.dart b/lib/data/provider/common_data_provider.dart index 9ee4034..5ca1f08 100644 --- a/lib/data/provider/common_data_provider.dart +++ b/lib/data/provider/common_data_provider.dart @@ -1,3 +1,4 @@ +import 'package:fcs/domain/entities/discount.dart'; import 'package:fcs/domain/entities/payment_method.dart'; import 'package:fcs/domain/vo/message.dart'; import 'package:fcs/helpers/api_helper.dart'; @@ -32,4 +33,19 @@ class CommonDataProvider { payload: {"owner_id": ownerID, "seen_by_owner": seenByOwner}, token: await getToken()); } + + Future createDiscount(Discount discount) async { + return await requestAPI("/discounts", "POST", + payload: discount.toMap(), token: await getToken()); + } + + Future updateDiscount(Discount discount) async { + return await requestAPI("/discounts", "PUT", + payload: discount.toMap(), token: await getToken()); + } + + Future deleteDiscount(String id) async { + return await requestAPI("/discounts", "DELETE", + payload: {"id": id}, token: await getToken()); + } } diff --git a/lib/data/services/common_imp.dart b/lib/data/services/common_imp.dart index 1d76410..74e0654 100644 --- a/lib/data/services/common_imp.dart +++ b/lib/data/services/common_imp.dart @@ -1,5 +1,5 @@ import 'package:fcs/data/provider/common_data_provider.dart'; -import 'package:fcs/data/provider/user_data_provider.dart'; +import 'package:fcs/domain/entities/discount.dart'; import 'package:fcs/domain/entities/payment_method.dart'; import 'package:fcs/domain/vo/message.dart'; import 'package:flutter/material.dart'; @@ -37,4 +37,19 @@ class CommonServiceImp implements CommonService { Future seenMessage(String ownerID, bool seenByOwner) { return commonDataProvider.seenMessage(ownerID, seenByOwner); } + + @override + Future createDiscount(Discount discount) { + return commonDataProvider.createDiscount(discount); + } + + @override + Future deleteDiscount(String id) { + return commonDataProvider.deleteDiscount(id); + } + + @override + Future updateDiscount(Discount discount) { + return commonDataProvider.updateDiscount(discount); + } } diff --git a/lib/data/services/common_service.dart b/lib/data/services/common_service.dart index 8bfca86..9fe75e9 100644 --- a/lib/data/services/common_service.dart +++ b/lib/data/services/common_service.dart @@ -1,3 +1,4 @@ +import 'package:fcs/domain/entities/discount.dart'; import 'package:fcs/domain/entities/payment_method.dart'; import 'package:fcs/domain/vo/message.dart'; @@ -10,4 +11,9 @@ abstract class CommonService { // Messaging Future sendMessage(Message message); Future seenMessage(String ownerID, bool seenByOwner); + + // Payment + Future createDiscount(Discount discount); + Future updateDiscount(Discount discount); + Future deleteDiscount(String id); } diff --git a/lib/domain/entities/discount.dart b/lib/domain/entities/discount.dart index b673807..1815a72 100644 --- a/lib/domain/entities/discount.dart +++ b/lib/domain/entities/discount.dart @@ -1,16 +1,38 @@ class Discount { + String id; String code; - String customer; + String customerId; + String customerName; String status; double amount; - int weight; - double discountRate; - Discount( - {this.code, - this.customer, - this.amount, - this.status, - this.weight, - this.discountRate}); + Discount({ + this.id, + this.code, + this.customerId, + this.customerName, + this.amount, + this.status, + }); + + Map toMap() { + return { + 'id': id, + 'code': code, + "customer_id": customerId, + "customer_name": customerName, + "amount": amount, + }; + } + + factory Discount.fromMap(Map map, String id) { + return Discount( + id: id, + code: map['code'], + customerId: map['customer_id'], + customerName: map['customer_name'], + amount: map['amount'], + status: map['status'], + ); + } } diff --git a/lib/pages/discount/discount_list.dart b/lib/pages/discount/discount_list.dart index aa42881..3a4bd3c 100644 --- a/lib/pages/discount/discount_list.dart +++ b/lib/pages/discount/discount_list.dart @@ -2,7 +2,6 @@ import 'package:fcs/helpers/theme.dart'; import 'package:fcs/localization/app_translations.dart'; import 'package:fcs/pages/discount/model/discount_model.dart'; import 'package:fcs/pages/main/util.dart'; -import 'package:fcs/pages/widgets/bottom_up_page_route.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -87,7 +86,7 @@ class _DiscountListState extends State { Row( children: [ Text( - discount.customer, + discount.customerName, style: TextStyle( color: Colors.black, fontWeight: FontWeight.normal, diff --git a/lib/pages/discount/model/discount_model.dart b/lib/pages/discount/model/discount_model.dart index 4964d07..13ce253 100644 --- a/lib/pages/discount/model/discount_model.dart +++ b/lib/pages/discount/model/discount_model.dart @@ -1,56 +1,56 @@ +import 'dart:async'; + +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:fcs/data/services/services.dart'; import 'package:fcs/domain/entities/discount.dart'; import 'package:fcs/pages/main/model/base_model.dart'; +import 'package:logging/logging.dart'; class DiscountModel extends BaseModel { - List get discounts { - List discountList = [ - Discount( - code: 'XMQY01', - customer: 'Ko Nyi', - amount: 5000, - status: 'Used', - ), - Discount( - code: 'XMQY02', - customer: 'Ko Aung Myo', - amount: 3000, - status: 'Avaliable', - ), - Discount( - code: 'XMQY03', - customer: 'Ko Zaw Thu', - amount: 2000, - status: 'Used', - ), - Discount( - code: 'XMQY04', - customer: 'Ko Myo Min', - amount: 3000, - status: 'Avaliable', - ), - Discount( - code: 'XMQY05', - customer: 'Ko Nyi', - amount: 3000, - status: 'Avaliable', - ), - ]; - return discountList; - } + final log = Logger('DiscountModel'); - // List get discountByCustomer { - // return invoices.where((e) => e.status == "Avaliable").toList() - // ..sort((e1, e2) { - // return e2.invoiceNumber.compareTo(e1.invoiceNumber); - // }); - // } + StreamSubscription listener; + + List discounts = []; void initUser(user) { super.initUser(user); + _load(); + } + + _load() { + if (listener != null) listener.cancel(); + try { + listener = Firestore.instance + .collection("/discounts") + .orderBy("code", descending: false) + .snapshots() + .listen((snaps) { + discounts.clear(); + snaps.documents.forEach((d) { + discounts.add(Discount.fromMap(d.data, d.documentID)); + }); + notifyListeners(); + }); + } catch (e) { + log.warning("error:$e"); + } } @override logout() async { - // discounts = []; + discounts = []; + } + + Future addDiscount(Discount discount) async { + return Services.instance.commonService.createDiscount(discount); + } + + Future updateDiscount(Discount discount) async { + return Services.instance.commonService.updateDiscount(discount); + } + + Future deleteDiscount(Discount discount) async { + return Services.instance.commonService.deleteDiscount(discount.id); } } diff --git a/lib/pages/rates/discount_by_weight_editor.dart b/lib/pages/rates/discount_by_weight_editor.dart index ffc59c1..a6b8fdd 100644 --- a/lib/pages/rates/discount_by_weight_editor.dart +++ b/lib/pages/rates/discount_by_weight_editor.dart @@ -1,4 +1,4 @@ -import 'package:fcs/domain/entities/discount.dart'; +import 'package:fcs/domain/entities/discount_by_weight.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/localization/app_translations.dart'; import 'package:fcs/pages/main/util.dart'; @@ -9,8 +9,8 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; class DiscountByWeightEditor extends StatefulWidget { - final Discount discount; - DiscountByWeightEditor({this.discount}); + final DiscountByWeight discountByWeight; + DiscountByWeightEditor({this.discountByWeight}); @override _DiscountByWeightEditorState createState() => _DiscountByWeightEditorState(); @@ -21,15 +21,15 @@ class _DiscountByWeightEditorState extends State { TextEditingController _rateController = new TextEditingController(); bool _isLoading = false; - Discount _discount = new Discount(); + DiscountByWeight _discountByWeight = new DiscountByWeight(); @override void initState() { super.initState(); - if (widget.discount != null) { - _discount = widget.discount; - _weightController.text = _discount.weight.toString(); - _rateController.text = _discount.discountRate.toString(); + if (widget.discountByWeight != null) { + _discountByWeight = widget.discountByWeight; + _weightController.text = _discountByWeight.weight.toString(); + _rateController.text = _discountByWeight.discount.toString(); } } @@ -74,7 +74,7 @@ class _DiscountByWeightEditorState extends State { ], ), ), - widget.discount == null + widget.discountByWeight == null ? fcsButton(context, "Create", callack: () {}) : fcsButton(context, "Save", callack: () {}), SizedBox(height: 10)