From 247140de6b06cb4aa84984cee78c901802e5323d Mon Sep 17 00:00:00 2001 From: tzw Date: Tue, 5 Mar 2024 16:32:54 +0630 Subject: [PATCH] sender and consignee selection --- lib/pages/carton/carton_filter.dart | 4 +- .../model/consignee_selection_model.dart | 54 +++++++++---------- .../carton/model/sender_selection_model.dart | 52 +++++++++--------- lib/pages/carton_search/carton_list_row.dart | 11 +++- lib/pages/carton_size/carton_size_editor.dart | 1 + 5 files changed, 63 insertions(+), 59 deletions(-) diff --git a/lib/pages/carton/carton_filter.dart b/lib/pages/carton/carton_filter.dart index 8396502..7d45c34 100644 --- a/lib/pages/carton/carton_filter.dart +++ b/lib/pages/carton/carton_filter.dart @@ -108,7 +108,7 @@ class _CartonFilterState extends State { Future _loadMoreConsignee() async { if (_isLoadMoreConsignee) return; var model = context.read(); - if (model.reachEnd || model.ended) return; + if (model.ended) return; setState(() { _isLoadMoreConsignee = true; }); @@ -141,7 +141,7 @@ class _CartonFilterState extends State { Future _loadMoreSender() async { if (_isLoadMoreSender) return; var model = context.read(); - if (model.reachEnd || model.ended) return; + if (model.ended) return; setState(() { _isLoadMoreSender = true; }); diff --git a/lib/pages/carton/model/consignee_selection_model.dart b/lib/pages/carton/model/consignee_selection_model.dart index db136f8..770823c 100644 --- a/lib/pages/carton/model/consignee_selection_model.dart +++ b/lib/pages/carton/model/consignee_selection_model.dart @@ -1,23 +1,28 @@ import 'dart:async'; +import 'dart:convert'; import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:fcs/config.dart'; import 'package:logging/logging.dart'; import '../../../domain/constants.dart'; import '../../../domain/entities/user.dart'; +import '../../../helpers/api_helper.dart'; +import '../../../helpers/firebase_helper.dart'; import '../../main/model/base_model.dart'; class ConsigneeSelectionModel extends BaseModel { final log = Logger("ConsigneeSearchModel"); // for search String query = ""; - int offset = 0; - bool reachEnd = false; List _consignees = []; List get getConsginees { var users = new List.from(_consignees); - return users..insert(0, User(id: all, name: "All")); + if (query == "") { + return users..insert(0, User(id: all, name: "All")); + } + return users; } bool isLoading = false; @@ -30,8 +35,6 @@ class ConsigneeSelectionModel extends BaseModel { search(String term, {bool imm = false}) async { query = term; _consignees.clear(); - offset = 0; - reachEnd = false; t?.cancel(); t = Timer(Duration(milliseconds: imm ? 0 : 800), () async { await loadMoreSearch(term: term); @@ -43,35 +46,26 @@ class ConsigneeSelectionModel extends BaseModel { await _refresh(); return; } - // int rowPerPage = 21; - // List list = []; - // SearchPara searchPara = SearchPara(filters: [], term: term); - // isLoading = true; + var bytes = utf8.encode(term); + var base64Str = base64.encode(bytes); + HtmlEscape htmlEscape = const HtmlEscape(); + String escapeSender = htmlEscape.convert(base64Str); - // var path = - // "/search/$cartons_collection/${searchPara.escapeTerm}/$rowPerPage/$offset/${searchPara.escapeFilters}"; + int rowPerPage = 20; + List list = []; - // var result = await requestAPI(path, "GET", - // token: await getToken(), url: Config.instance.searchURL); + var result = await requestAPI( + "/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET", + url: Config.instance.reportURL, token: await getToken()); - // if (result != null) { - // for (var row in result) { - // var item = ArtistExt.fromMapForSearch(row); - // list.add(item); - // } - // } + if (result != null) { + for (var row in result) { + var item = User.fromJson(row); + list.add(item); + } + } - // for (var p in list) { - // selectedArtistList.contains(p) - // ? p.isSelected = true - // : p.isSelected = false; - // } - - // artists.addAll(list); - // offset += rowPerPage; - // if (list.length < rowPerPage) { - // reachEnd = true; - // } + _consignees = List.from(list); notifyListeners(); } diff --git a/lib/pages/carton/model/sender_selection_model.dart b/lib/pages/carton/model/sender_selection_model.dart index e919e11..0b7420d 100644 --- a/lib/pages/carton/model/sender_selection_model.dart +++ b/lib/pages/carton/model/sender_selection_model.dart @@ -1,23 +1,28 @@ import 'dart:async'; +import 'dart:convert'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:logging/logging.dart'; +import '../../../config.dart'; import '../../../domain/constants.dart'; import '../../../domain/entities/user.dart'; +import '../../../helpers/api_helper.dart'; +import '../../../helpers/firebase_helper.dart'; import '../../main/model/base_model.dart'; class SenderSelectionModel extends BaseModel { final log = Logger("SenderSelectionModel"); // for search String query = ""; - int offset = 0; - bool reachEnd = false; List _senders = []; List get getSenders { var users = new List.from(_senders); - return users..insert(0, User(id: all, name: "All")); + if (query == "") { + return users..insert(0, User(id: all, name: "All")); + } + return users; } bool isLoading = false; @@ -30,8 +35,6 @@ class SenderSelectionModel extends BaseModel { search(String term, {bool imm = false}) async { query = term; _senders.clear(); - offset = 0; - reachEnd = false; t?.cancel(); t = Timer(Duration(milliseconds: imm ? 0 : 800), () async { await loadMoreSearch(term: term); @@ -44,31 +47,28 @@ class SenderSelectionModel extends BaseModel { return; } - // var bytes = utf8.encode(term); - // var base64Str = base64.encode(bytes); - // HtmlEscape htmlEscape = const HtmlEscape(); - // String escapeSender = htmlEscape.convert(base64Str); + var bytes = utf8.encode(term); + var base64Str = base64.encode(bytes); + HtmlEscape htmlEscape = const HtmlEscape(); + String escapeSender = htmlEscape.convert(base64Str); - // int rowPerPage = 20; - // List list = []; + int rowPerPage = 20; + List list = []; - // var result = await requestAPI( - // "/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET", - // url: Config.instance.reportURL, token: await getToken()); + var result = await requestAPI( + "/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET", + url: Config.instance.reportURL, token: await getToken()); - // if (result != null) { - // for (var row in result) { - // var item = User.fromJson(row); - // list.add(item); - // } - // } + if (result != null) { + for (var row in result) { + var item = User.fromJson(row); + list.add(item); + } + } - // _senders.addAll(list); - // offset += rowPerPage; - // if (list.length < rowPerPage) { - // reachEnd = true; - // } - // notifyListeners(); + _senders = List.from(list); + + notifyListeners(); } addDefaultSenders() async { diff --git a/lib/pages/carton_search/carton_list_row.dart b/lib/pages/carton_search/carton_list_row.dart index c816ea3..10cf69a 100644 --- a/lib/pages/carton_search/carton_list_row.dart +++ b/lib/pages/carton_search/carton_list_row.dart @@ -1,8 +1,10 @@ import 'package:fcs/domain/entities/carton.dart'; import 'package:fcs/helpers/theme.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_vector_icons/flutter_vector_icons.dart'; +import '../carton/print_qr_code_page.dart'; import 'carton_search.dart'; class CartonListRow extends StatelessWidget { @@ -69,7 +71,14 @@ class CartonListRow extends StatelessWidget { ), const SizedBox(width: 15), IconButton( - onPressed: () {}, + onPressed: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => + PrintQrCodePage(carton: carton)), + ); + }, icon: Icon(AntDesign.qrcode, color: Colors.black)) ], diff --git a/lib/pages/carton_size/carton_size_editor.dart b/lib/pages/carton_size/carton_size_editor.dart index f615a35..9fb31e0 100644 --- a/lib/pages/carton_size/carton_size_editor.dart +++ b/lib/pages/carton_size/carton_size_editor.dart @@ -62,6 +62,7 @@ class _CartonSizeEditorState extends State { final lengthBox = LengthPicker( controller: _lengthController, lableKey: "box.length", + displayFeet: true, ); final widthBox = LengthPicker( controller: _widthController,