From cb9d8cb9d94da4488376c60a1230ebcfef957419 Mon Sep 17 00:00:00 2001 From: hussam al-habibeh Date: Mon, 20 Sep 2021 08:40:52 +0300 Subject: [PATCH] fix pharmacy products filtering --- .../service/pharmacy_categorise_service.dart | 114 ++++++++++-------- .../pharmacy_categorise_view_model.dart | 41 ++++--- lib/pages/sub_categorise_page.dart | 69 +++++------ 3 files changed, 116 insertions(+), 108 deletions(-) diff --git a/lib/core/service/pharmacy_categorise_service.dart b/lib/core/service/pharmacy_categorise_service.dart index 58f58ddb..c13f0548 100644 --- a/lib/core/service/pharmacy_categorise_service.dart +++ b/lib/core/service/pharmacy_categorise_service.dart @@ -95,9 +95,8 @@ class PharmacyCategoriseService extends BaseService { Future searchProducts({String productName}) async { hasError = false; _searchList.clear(); - String endPoint = productName != null - ? GET_SEARCH_PRODUCTS + "$productName" + '&language_id=1' - : GET_SEARCH_PRODUCTS + ""; + String endPoint = + productName != null ? GET_SEARCH_PRODUCTS + "$productName" + '&language_id=1' : GET_SEARCH_PRODUCTS + ""; await baseAppClient.getPharmacy( endPoint, onSuccess: (dynamic response, int statusCode) { @@ -132,8 +131,7 @@ class PharmacyCategoriseService extends BaseService { Future getCategoriseParent({String id}) async { hasError = false; _parentCategoriseList.clear(); - String endPoint = - id != null ? GET_CATEGORISE_PARENT + "$id" : GET_CATEGORISE_PARENT + ""; + String endPoint = id != null ? GET_CATEGORISE_PARENT + "$id" : GET_CATEGORISE_PARENT + ""; await baseAppClient.getPharmacy( endPoint, onSuccess: (dynamic response, int statusCode) { @@ -151,9 +149,7 @@ class PharmacyCategoriseService extends BaseService { Future getParentProducts({String id}) async { hasError = false; _parentProductsList.clear(); - String endPoint = id != null - ? GET_PARENT_PRODUCTS + "$id" + '&page=1&limit=50' - : GET_PARENT_PRODUCTS + ""; + String endPoint = id != null ? GET_PARENT_PRODUCTS + "$id" + '&page=1&limit=50' : GET_PARENT_PRODUCTS + ""; await baseAppClient.getPharmacy( endPoint, onSuccess: (dynamic response, int statusCode) { @@ -172,8 +168,7 @@ class PharmacyCategoriseService extends BaseService { hasError = false; _subCategoriseList.clear(); - String endPoint = - id != null ? GET_SUB_CATEGORISE + "$id" : GET_SUB_CATEGORISE + ""; + String endPoint = id != null ? GET_SUB_CATEGORISE + "$id" : GET_SUB_CATEGORISE + ""; await baseAppClient.getPharmacy( endPoint, onSuccess: (dynamic response, int statusCode) { @@ -191,9 +186,7 @@ class PharmacyCategoriseService extends BaseService { Future getSubProducts({String id}) async { hasError = false; _subProductsList.clear(); - String endPoint = id != null - ? GET_SUB_PRODUCTS + "$id" + '&page=1&limit=50' - : GET_SUB_PRODUCTS + ""; + String endPoint = id != null ? GET_SUB_PRODUCTS + "$id" + '&page=1&limit=50' : GET_SUB_PRODUCTS + ""; await baseAppClient.getPharmacy( endPoint, onSuccess: (dynamic response, int statusCode) { @@ -211,8 +204,7 @@ class PharmacyCategoriseService extends BaseService { Future getFinalProducts({String id}) async { hasError = false; _finalProducts.clear(); - String endPoint = - id != null ? GET_FINAL_PRODUCTS + "$id" : GET_FINAL_PRODUCTS + ""; + String endPoint = id != null ? GET_FINAL_PRODUCTS + "$id" : GET_FINAL_PRODUCTS + ""; await baseAppClient.getPharmacy( endPoint, onSuccess: (dynamic response, int statusCode) { @@ -249,14 +241,11 @@ class PharmacyCategoriseService extends BaseService { Future getLastVisitedProducts() async { String lastVisited = ""; - if (await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS) != - null) { - lastVisited = - await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS); + if (await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS) != null) { + lastVisited = await this.sharedPref.getString(PHARMACY_LAST_VISITED_PRODUCTS); try { - await baseAppClient - .getPharmacy("$GET_PHARMACY_PRODUCTs_BY_IDS$lastVisited", - onSuccess: (dynamic response, int statusCode) { + await baseAppClient.getPharmacy("$GET_PHARMACY_PRODUCTs_BY_IDS$lastVisited", + onSuccess: (dynamic response, int statusCode) { _finalProducts.clear(); response['products'].forEach((item) { _finalProducts.add(PharmacyProduct.fromJson(item)); @@ -277,8 +266,7 @@ class PharmacyCategoriseService extends BaseService { 'id,discount_ids,name,namen,localized_names,display_order,short_description,full_description,full_descriptionn,sku,order_minimum_quantity,order_maximum_quantity,price,old_price,images,is_rx,rx_message,rx_messagen,discount_name,discount_namen,approved_rating_sum,approved_total_reviews,allow_back_in_stock_subscriptions,stock_quantity,stock_availability,stock_availabilityn,discount_percentage,reviews', }; try { - await baseAppClient.getPharmacy(GET_PHARMACY_BEST_SELLER_PRODUCT, - onSuccess: (dynamic response, int statusCode) { + await baseAppClient.getPharmacy(GET_PHARMACY_BEST_SELLER_PRODUCT, onSuccess: (dynamic response, int statusCode) { _finalProducts.clear(); response['products'].forEach((item) { _finalProducts.add(PharmacyProduct.fromJson(item)); @@ -292,8 +280,7 @@ class PharmacyCategoriseService extends BaseService { } } - Future getFilteredProducts( - {String categoryId, String brandId, String min, String max}) async { + Future getFilteredProducts({String categoryId, String brandId, String min, String max}) async { hasError = false; String endPoint; @@ -317,24 +304,47 @@ class PharmacyCategoriseService extends BaseService { ); } + Future getFilteredSubProducts({String categoryId, String brandId, String min, String max}) async { + hasError = false; + String endPoint; + + _subProductsList.clear(); + endPoint = FILTERED_PRODUCTS + + "$categoryId" + + "&manufacturerids=$brandId" + + "&price_min=$min" + + "&price_max=$max&page=1&limit=50"; + await baseAppClient.getPharmacy( + endPoint, + onSuccess: (dynamic response, int statusCode) { + response['products'].forEach((item) { + _subProductsList.add(PharmacyProduct.fromJson(item)); + }); + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + ); + } + Future getMostViewedProducts() async { Map queryParams = { 'fields': - 'id,discount_ids,name,reviews,namen,localized_names,display_order,short_description,full_description,full_descriptionn,sku,order_minimum_quantity,order_maximum_quantity,price,old_price,images,is_rx,rx_message,rx_messagen,discount_name,discount_namen,approved_rating_sum,approved_total_reviews,allow_back_in_stock_subscriptions,stock_quantity,stock_availability,stock_availabilityn,discount_percentage', + 'id,discount_ids,name,reviews,namen,localized_names,display_order,short_description,full_description,full_descriptionn,sku,order_minimum_quantity,order_maximum_quantity,price,old_price,images,is_rx,rx_message,rx_messagen,discount_name,discount_namen,approved_rating_sum,approved_total_reviews,allow_back_in_stock_subscriptions,stock_quantity,stock_availability,stock_availabilityn,discount_percentage', }; try { - await baseAppClient.getPharmacy(GET_MOST_VIEWED_PRODUCTS, - onSuccess: (dynamic response, int statusCode) { - _finalProducts.clear(); - response['products'].forEach((item) { - _finalProducts.add(PharmacyProduct.fromJson(item)); - }); - print("most viewed products ---------"); - print(response); - }, onFailure: (String error, int statusCode) { - hasError = true; - super.error = error; - }, queryParams: queryParams); + await baseAppClient.getPharmacy(GET_MOST_VIEWED_PRODUCTS, onSuccess: (dynamic response, int statusCode) { + _finalProducts.clear(); + response['products'].forEach((item) { + _finalProducts.add(PharmacyProduct.fromJson(item)); + }); + print("most viewed products ---------"); + print(response); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, queryParams: queryParams); } catch (error) { throw error; } @@ -342,22 +352,20 @@ class PharmacyCategoriseService extends BaseService { Future getNewProducts() async { Map queryParams = { - 'fields': - 'Id,name,namen,localized_names,price,images,sku,stock_availability,published', + 'fields': 'Id,name,namen,localized_names,price,images,sku,stock_availability,published', }; try { - await baseAppClient.getPharmacy(GET_NEW_PRODUCTS, - onSuccess: (dynamic response, int statusCode) { - _finalProducts.clear(); - response['products'].forEach((item) { - _finalProducts.add(PharmacyProduct.fromJson(item)); - }); - print("new products ---------"); - print(response); - }, onFailure: (String error, int statusCode) { - hasError = true; - super.error = error; - }, queryParams: queryParams); + await baseAppClient.getPharmacy(GET_NEW_PRODUCTS, onSuccess: (dynamic response, int statusCode) { + _finalProducts.clear(); + response['products'].forEach((item) { + _finalProducts.add(PharmacyProduct.fromJson(item)); + }); + print("new products ---------"); + print(response); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, queryParams: queryParams); } catch (error) { throw error; } diff --git a/lib/core/viewModels/pharmacy_categorise_view_model.dart b/lib/core/viewModels/pharmacy_categorise_view_model.dart index e48329ba..4b5687fc 100644 --- a/lib/core/viewModels/pharmacy_categorise_view_model.dart +++ b/lib/core/viewModels/pharmacy_categorise_view_model.dart @@ -17,28 +17,20 @@ import 'base_view_model.dart'; class PharmacyCategoriseViewModel extends BaseViewModel { bool hasError = false; - PharmacyCategoriseService _pharmacyCategoriseService = - locator(); + PharmacyCategoriseService _pharmacyCategoriseService = locator(); - List get categorise => - _pharmacyCategoriseService.categoriseList; + List get categorise => _pharmacyCategoriseService.categoriseList; - List get categoriseParent => - _pharmacyCategoriseService.parentCategoriseList; + List get categoriseParent => _pharmacyCategoriseService.parentCategoriseList; - List get parentProducts => - _pharmacyCategoriseService.parentProductsList; + List get parentProducts => _pharmacyCategoriseService.parentProductsList; - List get subCategorise => - _pharmacyCategoriseService.subCategoriseList; + List get subCategorise => _pharmacyCategoriseService.subCategoriseList; - List get subProducts => - _pharmacyCategoriseService.subProductsList; + List get subProducts => _pharmacyCategoriseService.subProductsList; - List get finalProducts => - _pharmacyCategoriseService.finalProducts; - List get brandsList => - _pharmacyCategoriseService.brandsList; + List get finalProducts => _pharmacyCategoriseService.finalProducts; + List get brandsList => _pharmacyCategoriseService.brandsList; List get searchList => _pharmacyCategoriseService.searchList; @@ -157,12 +149,23 @@ class PharmacyCategoriseViewModel extends BaseViewModel { setState(ViewState.Idle); } - Future getFilteredProducts( - {String categoryId, String brandId, String min, String max}) async { + Future getFilteredProducts({String categoryId, String brandId, String min, String max}) async { hasError = false; // _insuranceCardService.clearInsuranceCard(); setState(ViewState.Busy); - await _pharmacyCategoriseService.getFilteredProducts( + await _pharmacyCategoriseService.getFilteredProducts(categoryId: categoryId, brandId: brandId, max: max, min: min); + if (_pharmacyCategoriseService.hasError) { + error = _pharmacyCategoriseService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } + + Future getFilteredSubProducts({String categoryId, String brandId, String min, String max}) async { + hasError = false; + // _insuranceCardService.clearInsuranceCard(); + setState(ViewState.Busy); + await _pharmacyCategoriseService.getFilteredSubProducts( categoryId: categoryId, brandId: brandId, max: max, min: min); if (_pharmacyCategoriseService.hasError) { error = _pharmacyCategoriseService.error; diff --git a/lib/pages/sub_categorise_page.dart b/lib/pages/sub_categorise_page.dart index 737ccafe..1e57e319 100644 --- a/lib/pages/sub_categorise_page.dart +++ b/lib/pages/sub_categorise_page.dart @@ -449,7 +449,7 @@ class _SubCategorisePageState extends State { } GifLoaderDialogUtils.showMyDialog(context); - await model.getFilteredProducts( + await model.getFilteredSubProducts( min: minField.text.toString(), max: maxField.text.toString(), categoryId: categoriesId, @@ -524,7 +524,7 @@ class _SubCategorisePageState extends State { ), styleOne == true ? Container( - height: model.parentProducts.length * MediaQuery.of(context).size.height * 0.15, + height: model.subProducts.length * MediaQuery.of(context).size.height * 0.15, child: GridView.builder( physics: NeverScrollableScrollPhysics(), gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( @@ -533,13 +533,13 @@ class _SubCategorisePageState extends State { mainAxisSpacing: 2.0, childAspectRatio: 0.9, ), - itemCount: model.parentProducts.length, + itemCount: model.subProducts.length, itemBuilder: (BuildContext context, int index) { return NetworkBaseView( baseViewModel: model, child: InkWell( child: Card( - color: model.parentProducts[index].discountName != null + color: model.subProducts[index].discountName != null ? Color(0xffFFFF00) : Colors.white, elevation: 0, @@ -583,15 +583,15 @@ class _SubCategorisePageState extends State { margin: EdgeInsets.fromLTRB(0, 16, 0, 0), alignment: Alignment.center, child: Image.network( - model.parentProducts[index].images.isNotEmpty - ? model.parentProducts[index].images[0].thumb + model.subProducts[index].images.isNotEmpty + ? model.subProducts[index].images[0].thumb : 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png', fit: BoxFit.cover, height: 80, ), ), Container( - width: model.parentProducts[index].rxMessage != null + width: model.subProducts[index].rxMessage != null ? MediaQuery.of(context).size.width / 5 : 0, padding: EdgeInsets.all(4), @@ -600,8 +600,8 @@ class _SubCategorisePageState extends State { borderRadius: BorderRadius.only(topLeft: Radius.circular(6)), ), child: Texts( - model.parentProducts[index].rxMessage != null - ? model.parentProducts[index].rxMessage + model.subProducts[index].rxMessage != null + ? model.subProducts[index].rxMessage : "", color: Colors.white, regular: true, @@ -620,7 +620,7 @@ class _SubCategorisePageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Texts( - model.parentProducts[index].name, + model.subProducts[index].name, regular: true, fontSize: 12, fontWeight: FontWeight.w400, @@ -628,7 +628,7 @@ class _SubCategorisePageState extends State { Padding( padding: const EdgeInsets.only(top: 4, bottom: 4), child: Texts( - "SAR ${model.parentProducts[index].price}", + "SAR ${model.subProducts[index].price}", bold: true, fontSize: 14, ), @@ -637,17 +637,16 @@ class _SubCategorisePageState extends State { children: [ StarRating( totalAverage: - model.parentProducts[index].approvedRatingSum > 0 - ? (model.parentProducts[index].approvedRatingSum + model.subProducts[index].approvedRatingSum > 0 + ? (model.subProducts[index].approvedRatingSum .toDouble() / - model.parentProducts[index] - .approvedRatingSum + model.subProducts[index].approvedRatingSum .toDouble()) .toDouble() : 0, forceStars: true), Texts( - "(${model.parentProducts[index].approvedTotalReviews})", + "(${model.subProducts[index].approvedTotalReviews})", regular: true, fontSize: 10, fontWeight: FontWeight.w400, @@ -665,7 +664,7 @@ class _SubCategorisePageState extends State { Navigator.push( context, FadePage( - page: ProductDetailPage(model.parentProducts[index]), + page: ProductDetailPage(model.subProducts[index]), )), }, )); @@ -673,10 +672,10 @@ class _SubCategorisePageState extends State { ), ) : Container( - height: model.parentProducts.length * MediaQuery.of(context).size.height * 0.122, + height: model.subProducts.length * MediaQuery.of(context).size.height * 0.122, child: ListView.builder( physics: NeverScrollableScrollPhysics(), - itemCount: model.parentProducts.length, + itemCount: model.subProducts.length, itemBuilder: (BuildContext context, int index) { return InkWell( child: Card( @@ -700,8 +699,8 @@ class _SubCategorisePageState extends State { margin: EdgeInsets.fromLTRB(0, 0, 0, 0), alignment: Alignment.center, child: Image.network( - model.parentProducts[index].images.isNotEmpty - ? model.parentProducts[index].images[0].thumb + model.subProducts[index].images.isNotEmpty + ? model.subProducts[index].images[0].thumb : 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png', fit: BoxFit.contain, height: 80, @@ -712,7 +711,7 @@ class _SubCategorisePageState extends State { Column( children: [ Container( - width: model.parentProducts[index].rxMessage != null + width: model.subProducts[index].rxMessage != null ? MediaQuery.of(context).size.width / 5 : 0, padding: EdgeInsets.all(4), @@ -721,8 +720,8 @@ class _SubCategorisePageState extends State { borderRadius: BorderRadius.only(topLeft: Radius.circular(6)), ), child: Texts( - model.parentProducts[index].rxMessage != null - ? model.parentProducts[index].rxMessage + model.subProducts[index].rxMessage != null + ? model.subProducts[index].rxMessage : "", color: Colors.white, regular: true, @@ -750,7 +749,7 @@ class _SubCategorisePageState extends State { Container( width: MediaQuery.of(context).size.width * 0.65, child: Texts( - model.parentProducts[index].name, + model.subProducts[index].name, regular: true, fontSize: 13.2, fontWeight: FontWeight.w500, @@ -763,7 +762,7 @@ class _SubCategorisePageState extends State { Padding( padding: const EdgeInsets.only(top: 4, bottom: 4), child: Texts( - "SAR ${model.parentProducts[index].price}", + "SAR ${model.subProducts[index].price}", bold: true, fontSize: 14, ), @@ -771,17 +770,15 @@ class _SubCategorisePageState extends State { Row( children: [ StarRating( - totalAverage: - model.parentProducts[index].approvedRatingSum > 0 - ? (model.parentProducts[index].approvedRatingSum - .toDouble() / - model.parentProducts[index].approvedRatingSum - .toDouble()) - .toDouble() - : 0, + totalAverage: model.subProducts[index].approvedRatingSum > 0 + ? (model.subProducts[index].approvedRatingSum.toDouble() / + model.subProducts[index].approvedRatingSum + .toDouble()) + .toDouble() + : 0, forceStars: true), Texts( - "(${model.parentProducts[index].approvedTotalReviews})", + "(${model.subProducts[index].approvedTotalReviews})", regular: true, fontSize: 10, fontWeight: FontWeight.w400, @@ -798,7 +795,7 @@ class _SubCategorisePageState extends State { Navigator.push( context, FadePage( - page: ProductDetailPage(model.parentProducts[index]), + page: ProductDetailPage(model.subProducts[index]), )), }, );