From bbf5223705292df91f191279c4faa3e124231f15 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:21:55 +0200 Subject: [PATCH 01/13] update api to include nickname --- backend/routers/mzansi_wallet.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/routers/mzansi_wallet.py b/backend/routers/mzansi_wallet.py index 64551efe..f5c28237 100644 --- a/backend/routers/mzansi_wallet.py +++ b/backend/routers/mzansi_wallet.py @@ -19,6 +19,7 @@ class MzansiWalletInsertRequest(BaseModel): card_number: str favourite: str priority_index: int + nickname: str class MzansiWalletUpdateRequest(BaseModel): idloyalty_cards: int @@ -47,6 +48,7 @@ async def read_all_loyalty_cards_by_app_id(app_id: str, session: SessionContaine "card_number": item[3], "favourite": item[4], "priority_index": item[5], + "nickname": item[6], } for item in cursor.fetchall() ] @@ -69,6 +71,7 @@ async def read_favourite_loyalty_cards_by_app_id(app_id: str, session: SessionCo "card_number": item[3], "favourite": item[4], "priority_index": item[5], + "nickname": item[6], } for item in cursor.fetchall() ] @@ -106,13 +109,14 @@ async def insert_loyalty_card(itemRequest : MzansiWalletInsertRequest): #, sessi db = database.dbConnection.dbMzansiWalletConnect() cursor = db.cursor() query = "insert into loyalty_cards " - query += "(app_id, shop_name, card_number, favourite, priority_index) " - query += "values (%s, %s, %s, %s, %s)" + query += "(app_id, shop_name, card_number, favourite, priority_index, nickname) " + query += "values (%s, %s, %s, %s, %s, %s)" notetData = (itemRequest.app_id, itemRequest.shop_name, itemRequest.card_number, itemRequest.favourite, itemRequest.priority_index, + itemRequest.nickname, ) try: cursor.execute(query, notetData) From 405953e9a5b03c62d88a78cc5e9b43b28fdaaaa3 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:22:06 +0200 Subject: [PATCH 02/13] add nickname tyo object --- Frontend/lib/mih_apis/mih_mzansi_wallet_apis.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Frontend/lib/mih_apis/mih_mzansi_wallet_apis.dart b/Frontend/lib/mih_apis/mih_mzansi_wallet_apis.dart index 9bf002bb..7f7595e2 100644 --- a/Frontend/lib/mih_apis/mih_mzansi_wallet_apis.dart +++ b/Frontend/lib/mih_apis/mih_mzansi_wallet_apis.dart @@ -145,6 +145,7 @@ class MIHMzansiWalletApis { String card_number, String favourite, int priority_index, + String nickname, int navIndex, BuildContext context, ) async { @@ -161,6 +162,7 @@ class MIHMzansiWalletApis { "card_number": card_number, "favourite": favourite, "priority_index": priority_index, + "nickname": nickname, }), ); if (response.statusCode == 201) { From f2562a26dfdbe5802aab70524770902364e207fe Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:22:47 +0200 Subject: [PATCH 03/13] Switch close and tools --- .../mih_app_window.dart | 47 +++++++++++++------ 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/Frontend/lib/mih_components/mih_package_components/mih_app_window.dart b/Frontend/lib/mih_components/mih_package_components/mih_app_window.dart index e7aed14b..09277548 100644 --- a/Frontend/lib/mih_components/mih_package_components/mih_app_window.dart +++ b/Frontend/lib/mih_components/mih_package_components/mih_app_window.dart @@ -61,7 +61,37 @@ class _MihAppWindowState extends State { height: 50, child: Row( children: [ - widget.windowTools != null ? widget.windowTools! : Container(), + Container( + // color: Colors.white, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular(25), // Optional: rounds the corners + boxShadow: const [ + BoxShadow( + color: Color.fromARGB( + 60, 0, 0, 0), // 0.2 opacity = 51 in alpha (255 * 0.2) + spreadRadius: -5, + blurRadius: 5, + offset: Offset(0, 5), + ), + ], + ), + child: IconButton.filled( + style: ButtonStyle( + backgroundColor: WidgetStateProperty.all( + MzanziInnovationHub.of(context)!.theme.errorColor()), + ), + color: MzanziInnovationHub.of(context)!.theme.primaryColor(), + iconSize: 20, + onPressed: () { + widget.onWindowTapClose(); + }, + icon: const Icon( + Icons.close, + ), + ), + ), Expanded( child: Container( padding: EdgeInsets.symmetric(horizontal: 15), @@ -78,20 +108,7 @@ class _MihAppWindowState extends State { ), ), ), - Container( - // color: Colors.white, - alignment: Alignment.center, - child: IconButton( - iconSize: 35, - onPressed: () { - widget.onWindowTapClose(); - }, - icon: Icon( - Icons.close, - color: MzanziInnovationHub.of(context)!.theme.errorColor(), - ), - ), - ), + widget.windowTools != null ? widget.windowTools! : Container(), ], ), ); From 7b8c9233e447bdf937b68b3563b2ce542e7bc2c6 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:22:59 +0200 Subject: [PATCH 04/13] update api service --- Frontend/lib/mih_objects/loyalty_card.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Frontend/lib/mih_objects/loyalty_card.dart b/Frontend/lib/mih_objects/loyalty_card.dart index daa368e7..5926ae2d 100644 --- a/Frontend/lib/mih_objects/loyalty_card.dart +++ b/Frontend/lib/mih_objects/loyalty_card.dart @@ -5,6 +5,7 @@ class MIHLoyaltyCard { final String card_number; final String favourite; final int priority_index; + final String nickname; const MIHLoyaltyCard({ required this.idloyalty_cards, @@ -13,6 +14,7 @@ class MIHLoyaltyCard { required this.card_number, required this.favourite, required this.priority_index, + required this.nickname, }); factory MIHLoyaltyCard.fromJson(Map json) { @@ -24,6 +26,7 @@ class MIHLoyaltyCard { "card_number": String card_number, "favourite": String favourite, "priority_index": int priority_index, + "nickname": String nickname, } => MIHLoyaltyCard( idloyalty_cards: idloyalty_cards, @@ -32,6 +35,7 @@ class MIHLoyaltyCard { card_number: card_number, favourite: favourite, priority_index: priority_index, + nickname: nickname, ), _ => throw const FormatException('Failed to load loyalty card objects'), }; From 795950adcb8777fb6f723038bc1df07120a2b638 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:23:24 +0200 Subject: [PATCH 05/13] add new menu buttonto window --- .../builder/build_loyalty_card_list.dart | 141 +++++++++++++----- 1 file changed, 106 insertions(+), 35 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index 1284d7dd..eebb25b4 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -1,8 +1,10 @@ +import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_apis/mih_mzansi_wallet_apis.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_alert.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_window.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_delete_message.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart'; @@ -175,39 +177,102 @@ class _BuildLoyaltyCardListState extends State { windowTitle: widget.cardList[index].shop_name.toUpperCase(), windowTools: Row( children: [ - IconButton( - onPressed: () { - deleteCardWindow(context, index); - }, - icon: Icon( - Icons.delete, - color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), - ), - ), - Visibility( - visible: widget.cardList[index].favourite == "", - child: IconButton( - onPressed: () { - addToFavCardWindow(context, index); - }, - icon: Icon( - Icons.favorite, - color: - MzanziInnovationHub.of(context)!.theme.secondaryColor(), - ), - ), - ), - Visibility( - visible: widget.cardList[index].favourite != "", - child: IconButton( - onPressed: () { - removeFromFavCardWindow(context, index); - }, - icon: Icon( - Icons.favorite_border, - color: - MzanziInnovationHub.of(context)!.theme.secondaryColor(), - ), + // IconButton( + // onPressed: () { + // deleteCardWindow(context, index); + // }, + // icon: Icon( + // Icons.delete, + // color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + // ), + // ), + // Visibility( + // visible: widget.cardList[index].favourite == "", + // child: IconButton( + // onPressed: () { + // addToFavCardWindow(context, index); + // }, + // icon: Icon( + // Icons.favorite, + // color: + // MzanziInnovationHub.of(context)!.theme.secondaryColor(), + // ), + // ), + // ), + // Visibility( + // visible: widget.cardList[index].favourite != "", + // child: IconButton( + // onPressed: () { + // removeFromFavCardWindow(context, index); + // }, + // icon: Icon( + // Icons.favorite_border, + // color: + // MzanziInnovationHub.of(context)!.theme.secondaryColor(), + // ), + // ), + // ), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: MihFloatingMenu( + animatedIcon: AnimatedIcons.menu_close, + direction: SpeedDialDirection.down, + children: [ + SpeedDialChild( + child: Icon( + Icons.delete, + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + label: "Delete Card", + labelBackgroundColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + labelStyle: TextStyle( + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + fontWeight: FontWeight.bold, + ), + backgroundColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + onTap: () { + deleteCardWindow(context, index); + }, + ), + SpeedDialChild( + child: widget.cardList[index].favourite == "" + ? Icon( + Icons.favorite, + color: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + ) + : Icon( + Icons.favorite_border, + color: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + ), + label: widget.cardList[index].favourite == "" + ? "Add to Favourite" + : "Remove from Favourite", + labelBackgroundColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + labelStyle: TextStyle( + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + fontWeight: FontWeight.bold, + ), + backgroundColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + onTap: () { + if (widget.cardList[index].favourite == "") { + addToFavCardWindow(context, index); + } else { + removeFromFavCardWindow(context, index); + } + }, + ), + ], ), ), ], @@ -221,7 +286,10 @@ class _BuildLoyaltyCardListState extends State { Container( width: 500, child: MihCardDisplay( - shopName: widget.cardList[index].shop_name, height: 250), + shopName: widget.cardList[index].shop_name, + nickname: widget.cardList[index].nickname, + height: 250, + ), ), const SizedBox(height: 20), Container( @@ -326,7 +394,10 @@ class _BuildLoyaltyCardListState extends State { itemBuilder: (context, index) { return GestureDetector( child: MihCardDisplay( - shopName: widget.cardList[index].shop_name, height: 100), + shopName: widget.cardList[index].shop_name, + nickname: widget.cardList[index].nickname, + height: 100, + ), onTap: () { viewCardWindow(index); }, From 9cd68e359135e8792c598c6cf1f6f24e70ad5249 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:23:38 +0200 Subject: [PATCH 06/13] add nickanme to display --- .../components/mih_card_display.dart | 17 ++++++++++++++++- .../mzansi_wallet/package_tools/mih_cards.dart | 16 ++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart b/Frontend/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart index 72135830..f69d9c8a 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/components/mih_card_display.dart @@ -2,11 +2,13 @@ import 'package:flutter/material.dart'; class MihCardDisplay extends StatefulWidget { final String shopName; + final String nickname; final double height; const MihCardDisplay({ super.key, required this.shopName, required this.height, + required this.nickname, }); @override @@ -155,6 +157,19 @@ class _MihCardDisplayState extends State { @override Widget build(BuildContext context) { - return displayLoyaltyCard(); + return Column( + children: [ + displayLoyaltyCard(), + FittedBox( + child: Text( + widget.nickname, + style: const TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + ), + ), + ) + ], + ); } } diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart index f7a2916e..08ab0d6b 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart @@ -5,6 +5,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_ import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_number_input.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_search_input.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_text_input.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih-app_tool_body.dart'; @@ -31,6 +32,7 @@ class MihCards extends StatefulWidget { class _MihCardsState extends State { final TextEditingController shopController = TextEditingController(); + final TextEditingController _nicknameController = TextEditingController(); final TextEditingController cardNumberController = TextEditingController(); final TextEditingController cardSearchController = TextEditingController(); late Future> cardList; @@ -162,13 +164,21 @@ class _MihCardsState extends State { child: Column( children: [ const SizedBox(height: 10), - MihCardDisplay(shopName: shopName.value, height: 200), + MihCardDisplay( + shopName: shopName.value, nickname: "", height: 200), ], ), ); }, ), const SizedBox(height: 10), + MIHTextField( + controller: _nicknameController, + hintText: "Card Nickname", + editable: true, + required: false, + ), + const SizedBox(height: 10), Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, @@ -218,7 +228,8 @@ class _MihCardsState extends State { cardNumberController.text, "", 0, - 1, + _nicknameController.text, + 0, context, ); } @@ -242,6 +253,7 @@ class _MihCardsState extends State { cardSearchController.removeListener(searchShop); cardSearchController.dispose(); searchShopName.dispose(); + _nicknameController.dispose(); shopName.dispose(); super.dispose(); } From 8b44125c018648e1f3c9e196ea275ccc1e257f06 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:29:27 +0200 Subject: [PATCH 07/13] change menu order --- .../builder/build_loyalty_card_list.dart | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index eebb25b4..fbe54d98 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -218,26 +218,6 @@ class _BuildLoyaltyCardListState extends State { animatedIcon: AnimatedIcons.menu_close, direction: SpeedDialDirection.down, children: [ - SpeedDialChild( - child: Icon( - Icons.delete, - color: - MzanziInnovationHub.of(context)!.theme.primaryColor(), - ), - label: "Delete Card", - labelBackgroundColor: - MzanziInnovationHub.of(context)!.theme.successColor(), - labelStyle: TextStyle( - color: - MzanziInnovationHub.of(context)!.theme.primaryColor(), - fontWeight: FontWeight.bold, - ), - backgroundColor: - MzanziInnovationHub.of(context)!.theme.successColor(), - onTap: () { - deleteCardWindow(context, index); - }, - ), SpeedDialChild( child: widget.cardList[index].favourite == "" ? Icon( @@ -272,6 +252,26 @@ class _BuildLoyaltyCardListState extends State { } }, ), + SpeedDialChild( + child: Icon( + Icons.delete, + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + label: "Delete Card", + labelBackgroundColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + labelStyle: TextStyle( + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + fontWeight: FontWeight.bold, + ), + backgroundColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + onTap: () { + deleteCardWindow(context, index); + }, + ), ], ), ), From 2b06766ce91fceb281de49de9542b45f8064e54d Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:29:39 +0200 Subject: [PATCH 08/13] fix nav after delete --- .../lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart index 08ab0d6b..86347bca 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart @@ -344,7 +344,7 @@ class _MihCardsState extends State { return BuildLoyaltyCardList( cardList: searchShopName.value, signedInUser: widget.signedInUser, - navIndex: 1, + navIndex: 0, ); }, ); From 63c9c68fc36691925d94bb5963fc92756585b996 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:42:43 +0200 Subject: [PATCH 09/13] clear nickname controller on add window close --- .../lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart index 86347bca..0958f840 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart @@ -99,6 +99,7 @@ class _MihCardsState extends State { onWindowTapClose: () { shopController.clear(); cardNumberController.clear(); + _nicknameController.clear(); shopName.value = ""; Navigator.pop(context); }, From 8e199189b141f6587c8a60bb39eaa5bf320bc1ce Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:58:38 +0200 Subject: [PATCH 10/13] include cardnumber and title in update card api --- backend/routers/mzansi_wallet.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backend/routers/mzansi_wallet.py b/backend/routers/mzansi_wallet.py index f5c28237..37888447 100644 --- a/backend/routers/mzansi_wallet.py +++ b/backend/routers/mzansi_wallet.py @@ -25,6 +25,8 @@ class MzansiWalletUpdateRequest(BaseModel): idloyalty_cards: int favourite: str priority_index: int + nickname: str + card_number: str # class patientNoteUpdateRequest(BaseModel): # idpatient_notes: int # note_name: str @@ -156,10 +158,12 @@ async def UpdatePatient(itemRequest : MzansiWalletUpdateRequest, session: Sessio db = database.dbConnection.dbMzansiWalletConnect() cursor = db.cursor() query = "update loyalty_cards " - query += "set favourite=%s, priority_index=%s " + query += "set favourite=%s, priority_index=%s, nickname=%s, card_number=%s " query += "where idloyalty_cards=%s" notetData = (itemRequest.favourite, itemRequest.priority_index, + itemRequest.nickname, + itemRequest.card_number, itemRequest.idloyalty_cards, ) try: From 1f250c8929ab2edb730bdfe60146ae5736733b06 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 11:58:57 +0200 Subject: [PATCH 11/13] update service to include nickname and card number --- Frontend/lib/mih_apis/mih_mzansi_wallet_apis.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Frontend/lib/mih_apis/mih_mzansi_wallet_apis.dart b/Frontend/lib/mih_apis/mih_mzansi_wallet_apis.dart index 7f7595e2..231309b1 100644 --- a/Frontend/lib/mih_apis/mih_mzansi_wallet_apis.dart +++ b/Frontend/lib/mih_apis/mih_mzansi_wallet_apis.dart @@ -195,6 +195,8 @@ class MIHMzansiWalletApis { int idloyalty_cards, String favourite, int priority_index, + String nickname, + String card_number, int navIndex, BuildContext context, ) async { @@ -209,6 +211,8 @@ class MIHMzansiWalletApis { "idloyalty_cards": idloyalty_cards, "favourite": favourite, "priority_index": priority_index, + "nickname": nickname, + "card_number": card_number, }), ); //print("Here4"); From 14be040264b7439814af830fcd9ac6948ba688de Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 12:01:07 +0200 Subject: [PATCH 12/13] add edit card window and edit card menu option --- .../builder/build_loyalty_card_list.dart | 165 ++++++++++++++---- 1 file changed, 130 insertions(+), 35 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index fbe54d98..284e9223 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -2,10 +2,14 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_apis/mih_mzansi_wallet_apis.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_number_input.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_text_input.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_alert.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_window.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_delete_message.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; import 'package:mzansi_innovation_hub/mih_objects/app_user.dart'; import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart'; import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/components/mih_card_display.dart'; @@ -31,8 +35,104 @@ class BuildLoyaltyCardList extends StatefulWidget { } class _BuildLoyaltyCardListState extends State { + final TextEditingController _nicknameController = TextEditingController(); + final TextEditingController _cardNumberController = TextEditingController(); late int _noFavourites; + void openscanner() async { + Navigator.of(context).pushNamed( + '/scanner', + arguments: _cardNumberController, + ); + } + + void editCardWindow(BuildContext ctxt, int index) { + showDialog( + context: context, + barrierDismissible: false, + builder: (context) => MIHWindow( + fullscreen: false, + windowTitle: "Edit Loyalty Card", + windowTools: const [ + SizedBox(width: 35), + ], + onWindowTapClose: () { + _cardNumberController.clear(); + _nicknameController.clear(); + Navigator.pop(context); + }, + windowBody: [ + MIHTextField( + controller: _nicknameController, + hintText: "Card Nickname", + editable: true, + required: false, + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + Flexible( + child: MIHNumberField( + controller: _cardNumberController, + hintText: "Card Number", + editable: true, + required: true, + enableDecimal: false, + ), + ), + const SizedBox(width: 10), + MIHButton( + onTap: () async { + openscanner(); + }, + buttonText: "Scan", + buttonColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + textColor: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + ], + ), + const SizedBox(height: 15), + SizedBox( + width: 300, + height: 50, + child: MIHButton( + onTap: () { + if (_cardNumberController.text == "") { + showDialog( + context: context, + builder: (context) { + return const MIHErrorMessage(errorType: "Input Error"); + }, + ); + } else { + MIHMzansiWalletApis.updateLoyaltyCardAPICall( + widget.signedInUser, + widget.cardList[index].idloyalty_cards, + widget.cardList[index].favourite, + widget.cardList[index].priority_index, + _nicknameController.text, + _cardNumberController.text, + 0, + ctxt, + ); + } + }, + buttonText: "Update", + buttonColor: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + textColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + ), + ], + ), + ); + } + void deleteCardWindow(BuildContext ctxt, int index) { showDialog( context: context, @@ -87,6 +187,8 @@ class _BuildLoyaltyCardListState extends State { widget.cardList[index].idloyalty_cards, "Yes", _noFavourites, + widget.cardList[index].nickname, + widget.cardList[index].card_number, 0, ctxt, ); @@ -141,6 +243,8 @@ class _BuildLoyaltyCardListState extends State { widget.cardList[index].idloyalty_cards, "", 0, + widget.cardList[index].nickname, + widget.cardList[index].card_number, 0, ctxt, ); @@ -177,41 +281,6 @@ class _BuildLoyaltyCardListState extends State { windowTitle: widget.cardList[index].shop_name.toUpperCase(), windowTools: Row( children: [ - // IconButton( - // onPressed: () { - // deleteCardWindow(context, index); - // }, - // icon: Icon( - // Icons.delete, - // color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), - // ), - // ), - // Visibility( - // visible: widget.cardList[index].favourite == "", - // child: IconButton( - // onPressed: () { - // addToFavCardWindow(context, index); - // }, - // icon: Icon( - // Icons.favorite, - // color: - // MzanziInnovationHub.of(context)!.theme.secondaryColor(), - // ), - // ), - // ), - // Visibility( - // visible: widget.cardList[index].favourite != "", - // child: IconButton( - // onPressed: () { - // removeFromFavCardWindow(context, index); - // }, - // icon: Icon( - // Icons.favorite_border, - // color: - // MzanziInnovationHub.of(context)!.theme.secondaryColor(), - // ), - // ), - // ), Padding( padding: const EdgeInsets.only(top: 5.0), child: MihFloatingMenu( @@ -252,6 +321,32 @@ class _BuildLoyaltyCardListState extends State { } }, ), + SpeedDialChild( + child: Icon( + Icons.edit, + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + label: "Edit Card Details", + labelBackgroundColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + labelStyle: TextStyle( + color: + MzanziInnovationHub.of(context)!.theme.primaryColor(), + fontWeight: FontWeight.bold, + ), + backgroundColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + onTap: () { + setState(() { + _cardNumberController.text = + widget.cardList[index].card_number; + _nicknameController.text = + widget.cardList[index].nickname; + }); + editCardWindow(context, index); + }, + ), SpeedDialChild( child: Icon( Icons.delete, From f64423c54b069527ebdd66845baf675ac5abbfda Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Thu, 22 May 2025 12:10:23 +0200 Subject: [PATCH 13/13] Change word nikname to title --- .../mzansi_wallet/builder/build_loyalty_card_list.dart | 4 ++-- .../mih_packages/mzansi_wallet/package_tools/mih_cards.dart | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart index 284e9223..06656932 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/builder/build_loyalty_card_list.dart @@ -64,7 +64,7 @@ class _BuildLoyaltyCardListState extends State { windowBody: [ MIHTextField( controller: _nicknameController, - hintText: "Card Nickname", + hintText: "Card Title", editable: true, required: false, ), @@ -189,7 +189,7 @@ class _BuildLoyaltyCardListState extends State { _noFavourites, widget.cardList[index].nickname, widget.cardList[index].card_number, - 0, + 1, ctxt, ); }, diff --git a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart index 0958f840..5f0569e1 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/package_tools/mih_cards.dart @@ -175,7 +175,7 @@ class _MihCardsState extends State { const SizedBox(height: 10), MIHTextField( controller: _nicknameController, - hintText: "Card Nickname", + hintText: "Card Title", editable: true, required: false, ),