Merge pull request #141 from yaso-meth/NEW--Favourite-Cards

NEW--Favourite-Cards
This commit is contained in:
yaso-meth
2025-04-17 14:14:44 +02:00
committed by GitHub
17 changed files with 925 additions and 510 deletions

View File

@@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart';
import 'package:flutter/material.dart';
// import '../mih_components/mih_pop_up_messages/mih_error_message.dart';
@@ -40,7 +41,6 @@ class MIHMzansiWalletApis {
// print("Code: ${response.statusCode}");
// errorCode = response.statusCode.toString();
// errorBody = response.body;
if (response.statusCode == 200) {
//print("Here1");
Iterable l = jsonDecode(response.body);
@@ -55,6 +55,36 @@ class MIHMzansiWalletApis {
}
}
/// This function is used to fetch a list of loyalty cards for a user.
///
/// Patameters: app_id .
///
/// Returns List<PatientQueue>.
static Future<List<MIHLoyaltyCard>> getFavouriteLoyaltyCards(
String app_id,
) async {
//print("Patien manager page: $endpoint");
final response = await http.get(Uri.parse(
"${AppEnviroment.baseApiUrl}/mzasni-wallet/loyalty-cards/favourites/$app_id"));
// print("Here");
// print("Body: ${response.body}");
// print("Code: ${response.statusCode}");
// errorCode = response.statusCode.toString();
// errorBody = response.body;
if (response.statusCode == 200) {
// print("Here1");
Iterable l = jsonDecode(response.body);
//print("Here2");
List<MIHLoyaltyCard> patientQueue = List<MIHLoyaltyCard>.from(
l.map((model) => MIHLoyaltyCard.fromJson(model)));
//print("Here3");
//print(patientQueue);
return patientQueue;
} else {
throw Exception('failed to fatch loyalty cards');
}
}
/// This function is used to Delete loyalty card from users mzansi wallet.
///
/// Patameters:-
@@ -66,6 +96,7 @@ class MIHMzansiWalletApis {
static Future<void> deleteLoyaltyCardAPICall(
AppUser signedInUser,
int idloyalty_cards,
int navIndex,
BuildContext context,
) async {
loadingPopUp(context);
@@ -83,14 +114,16 @@ class MIHMzansiWalletApis {
Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.of(context).pushNamed(
'/mzansi-wallet',
arguments: signedInUser,
arguments: WalletArguments(signedInUser, navIndex),
);
String message =
"The loyalty card has been deleted successfully. This means it will no longer be visible in your Mzansi Wallet.";
successPopUp(message, context);
} else {
Navigator.pop(context);
internetConnectionPopUp(context);
}
}
@@ -110,6 +143,9 @@ class MIHMzansiWalletApis {
String app_id,
String shop_name,
String card_number,
String favourite,
int priority_index,
int navIndex,
BuildContext context,
) async {
loadingPopUp(context);
@@ -123,6 +159,8 @@ class MIHMzansiWalletApis {
"app_id": app_id,
"shop_name": shop_name,
"card_number": card_number,
"favourite": favourite,
"priority_index": priority_index,
}),
);
if (response.statusCode == 201) {
@@ -133,7 +171,7 @@ class MIHMzansiWalletApis {
Navigator.pop(context);
Navigator.of(context).pushNamed(
'/mzansi-wallet',
arguments: signedInUser,
arguments: WalletArguments(signedInUser, navIndex),
);
successPopUp(message, context);
} else {
@@ -142,6 +180,54 @@ class MIHMzansiWalletApis {
}
}
/// This function is used to Update loyalty card from users mzansi wallet.
///
/// Patameters:-
/// AppUser signedInUser,
/// int idloyalty_cards,
/// BuildContext context,
///
/// Returns VOID (TRIGGERS NOTIGICATIOPN ON SUCCESS)
static Future<void> updateLoyaltyCardAPICall(
AppUser signedInUser,
int idloyalty_cards,
String favourite,
int priority_index,
int navIndex,
BuildContext context,
) async {
loadingPopUp(context);
var response = await http.put(
Uri.parse(
"${AppEnviroment.baseApiUrl}/mzasni-wallet/loyalty-cards/update/"),
headers: <String, String>{
"Content-Type": "application/json; charset=UTF-8"
},
body: jsonEncode(<String, dynamic>{
"idloyalty_cards": idloyalty_cards,
"favourite": favourite,
"priority_index": priority_index,
}),
);
//print("Here4");
//print(response.statusCode);
if (response.statusCode == 200) {
Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.of(context).pushNamed(
'/mzansi-wallet',
arguments: WalletArguments(signedInUser, navIndex),
);
String message = "The loyalty card has been added to your favourites.";
successPopUp(message, context);
} else {
Navigator.pop(context);
internetConnectionPopUp(context);
}
}
//================== POP UPS ==========================================================================
static void internetConnectionPopUp(BuildContext context) {

View File

@@ -35,15 +35,13 @@ class _MihAppTileState extends State<MihAppTile> {
return MihAppWindow(
fullscreen: false,
windowTitle: widget.appName,
windowTools: const [],
// windowTools: const [],
onWindowTapClose: () {
Navigator.pop(context);
},
windowBody: [
MIHYTVideoPlayer(
videoYTLink: widget.ytVideoID!,
),
],
windowBody: MIHYTVideoPlayer(
videoYTLink: widget.ytVideoID!,
),
);
},
);

View File

@@ -1,17 +1,19 @@
import 'package:flutter/material.dart';
import '../../main.dart';
import 'package:mzansi_innovation_hub/main.dart';
class MihAppWindow extends StatefulWidget {
final String windowTitle;
final List<Widget> windowBody;
final List<Widget> windowTools;
final Widget windowBody;
final Widget? windowTools;
// final List<SpeedDialChild> menuOptions;
final void Function() onWindowTapClose;
final bool fullscreen;
const MihAppWindow({
super.key,
required this.fullscreen,
required this.windowTitle,
required this.windowTools,
this.windowTools,
// required this.menuOptions,
required this.onWindowTapClose,
required this.windowBody,
});
@@ -51,139 +53,45 @@ class _MihAppWindowState extends State<MihAppWindow> {
}
}
Widget getWidnowClose() {
Widget getWindowHeader() {
return Container(
alignment: Alignment.centerRight,
child: IconButton(
onPressed: widget.onWindowTapClose,
icon: Icon(
Icons.close,
color: MzanziInnovationHub.of(context)!.theme.errorColor(),
size: 35,
),
),
);
}
Widget getWidnowTools() {
return Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: widget.windowTools,
);
}
Widget getWidnowTitle() {
return Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: Text(
widget.windowTitle,
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
fontSize: windowTitleSize,
fontWeight: FontWeight.bold,
// color: Colors.green,
alignment: Alignment.center,
height: 50,
child: Row(
children: [
widget.windowTools != null ? widget.windowTools! : Container(),
Expanded(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 15),
// color: Colors.pink,
child: Text(
widget.windowTitle,
textAlign: TextAlign.left,
style: TextStyle(
fontSize: windowTitleSize,
fontWeight: FontWeight.bold,
color:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
),
),
),
],
);
}
Widget getWidnowHeader() {
return Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: [
getWidnowTools(),
Expanded(
flex: 2,
child: getWidnowTitle(),
),
getWidnowClose(),
],
);
}
Widget getWidnowBody() {
if (widget.fullscreen) {
return Expanded(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: widget.windowBody,
Container(
// color: Colors.white,
alignment: Alignment.center,
child: IconButton(
iconSize: 35,
onPressed: () {
widget.onWindowTapClose();
},
icon: Icon(
Icons.close,
color: MzanziInnovationHub.of(context)!.theme.errorColor(),
),
),
),
),
);
} else {
return Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: widget.windowBody,
),
);
}
}
Widget createWindow(Widget header, Widget body) {
Widget visibleItems;
if (widget.fullscreen) {
visibleItems = Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
header,
//const Divider(),
body,
],
);
} else {
visibleItems = SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
header,
//const Divider(),
body,
],
),
);
}
return Dialog(
insetPadding: EdgeInsets.symmetric(
horizontal: horizontralWindowPadding,
vertical: vertticalWindowPadding,
),
insetAnimationCurve: Easing.emphasizedDecelerate,
insetAnimationDuration: Durations.short1,
child: Container(
//padding: const EdgeInsets.all(10),
width: windowWidth,
//height: windowHeight,
decoration: BoxDecoration(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
borderRadius: BorderRadius.circular(25.0),
border: Border.all(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
width: 5.0),
),
child: visibleItems,
),
);
}
@@ -206,9 +114,43 @@ class _MihAppWindowState extends State<MihAppWindow> {
height = size.height;
});
checkScreenSize();
return createWindow(
getWidnowHeader(),
getWidnowBody(),
return Dialog(
insetPadding: EdgeInsets.symmetric(
horizontal: horizontralWindowPadding,
vertical: vertticalWindowPadding,
),
insetAnimationCurve: Easing.emphasizedDecelerate,
insetAnimationDuration: Durations.short1,
child: Container(
decoration: BoxDecoration(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
borderRadius: BorderRadius.circular(25.0),
border: Border.all(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
width: 5.0),
),
child: widget.fullscreen
? Column(
mainAxisSize: MainAxisSize.max,
children: [
getWindowHeader(),
Expanded(child: widget.windowBody),
],
)
: Column(
mainAxisSize: MainAxisSize.min,
children: [
getWindowHeader(),
Padding(
padding: const EdgeInsets.only(
left: 15,
right: 15,
bottom: 15,
),
child: widget.windowBody),
],
),
),
);
}
}

View File

@@ -5,11 +5,13 @@ import 'package:mzansi_innovation_hub/main.dart';
class MihFloatingMenu extends StatefulWidget {
final IconData? icon;
final AnimatedIconData? animatedIcon;
final SpeedDialDirection? direction;
final List<SpeedDialChild> children;
const MihFloatingMenu({
super.key,
this.icon,
this.animatedIcon,
this.direction,
required this.children,
});
@@ -28,6 +30,7 @@ class _MihFloatingMenuState extends State<MihFloatingMenu> {
child: SpeedDial(
icon: widget.icon,
animatedIcon: widget.animatedIcon,
direction: widget.direction ?? SpeedDialDirection.up,
activeIcon: Icons.close,
backgroundColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),

View File

@@ -1,14 +1,10 @@
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_action.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_tools.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-app_tool_body.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_floating_menu.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/test/package_tools/package_tool_one.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/test/package_tools/package_tool_two.dart';
import 'package:mzansi_innovation_hub/mih_objects/arguments.dart';
import 'package:flutter/material.dart';
@@ -38,12 +34,12 @@ class _PackageTestState extends State<PackageTest> {
MihAppTools getTools() {
Map<Widget, void Function()?> temp = Map();
temp[const Icon(Icons.arrow_back)] = () {
temp[const Icon(Icons.inbox)] = () {
setState(() {
_selcetedIndex = 0;
});
};
temp[const Icon(Icons.arrow_forward)] = () {
temp[const Icon(Icons.outbond)] = () {
setState(() {
_selcetedIndex = 1;
});
@@ -113,134 +109,10 @@ class _PackageTestState extends State<PackageTest> {
);
}
void showFullScreenWindow() {
showDialog(
context: context,
builder: (context) {
return MihAppWindow(
fullscreen: true,
windowTitle: "Test",
windowTools: const [],
onWindowTapClose: () {
Navigator.pop(context);
},
windowBody: [
Text(
"Window test",
style: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
fontSize: 15,
fontWeight: FontWeight.bold,
),
)
],
);
},
);
}
void showNormalWindow() {
showDialog(
context: context,
builder: (context) {
return MihAppWindow(
fullscreen: false,
windowTitle: "Test",
windowTools: const [],
onWindowTapClose: () {
Navigator.pop(context);
},
windowBody: [
Text(
"Window test",
style: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
fontSize: 15,
fontWeight: FontWeight.bold,
),
)
],
);
},
);
}
List<MihAppToolBody> getToolBody() {
List<MihAppToolBody> toolBodies = [
MihAppToolBody(
borderOn: true,
bodyItem: MihSingleChildScroll(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
Text(
"Hello",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
const SizedBox(height: 10),
MihFloatingMenu(children: [
SpeedDialChild(
child: Icon(
Icons.add,
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "Add",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
labelStyle: TextStyle(
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
onTap: () {},
)
]),
Container(
color: Colors.black,
width: 200,
height: 200,
padding: EdgeInsets.zero,
alignment: Alignment.center,
child: IconButton.filled(
onPressed: () {},
icon: Icon(
MihIcons.mihLogo,
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
),
)
],
),
),
),
MihAppToolBody(
borderOn: false,
bodyItem: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
Text(
"World!!!",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
],
),
),
List<Widget> getToolBody() {
List<Widget> toolBodies = [
const PackageToolOne(),
const PackageToolTwo(),
];
return toolBodies;
}

View File

@@ -1,7 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih-app_tool_body.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_package_components/mih_icons.dart';
class PackageToolOne extends StatefulWidget {
@@ -12,6 +15,40 @@ class PackageToolOne extends StatefulWidget {
}
class _PackageToolOneState extends State<PackageToolOne> {
void showTestFullWindow() {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return MihAppWindow(
fullscreen: true,
windowTitle: "Test Full",
onWindowTapClose: () {
Navigator.of(context).pop();
},
windowBody: Text("Testing Window Body"),
);
},
);
}
void showTestWindow() {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return MihAppWindow(
fullscreen: false,
windowTitle: "Test No Full",
onWindowTapClose: () {
Navigator.of(context).pop();
},
windowBody: Text("Testing Window Body"),
);
},
);
}
@override
Widget build(BuildContext context) {
return MihAppToolBody(
@@ -21,40 +58,98 @@ class _PackageToolOneState extends State<PackageToolOne> {
}
Widget getBody() {
return MihAppToolBody(
borderOn: true,
bodyItem: MihSingleChildScroll(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
Text(
"Hello",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
return Stack(
children: [
MihSingleChildScroll(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Hello",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
),
),
],
),
),
const SizedBox(height: 10),
Container(
color: Colors.black,
width: 200,
height: 200,
padding: EdgeInsets.zero,
alignment: Alignment.center,
child: IconButton.filled(
onPressed: () {},
icon: Icon(
MihIcons.mihLogo,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
const SizedBox(height: 10),
Container(
color: Colors.black,
width: 200,
height: 200,
padding: EdgeInsets.zero,
alignment: Alignment.center,
child: IconButton.filled(
onPressed: () {},
icon: Icon(
MihIcons.mihLogo,
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
),
),
)
],
)
],
),
),
),
Positioned(
right: 0,
bottom: 0,
child: MihFloatingMenu(
animatedIcon: AnimatedIcons.menu_close,
children: [
SpeedDialChild(
child: Icon(
Icons.add,
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "Show New Window",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
showTestWindow();
},
),
SpeedDialChild(
child: Icon(
Icons.add,
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
label: "Show New Full Window",
labelBackgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
labelStyle: TextStyle(
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
),
backgroundColor:
MzanziInnovationHub.of(context)!.theme.successColor(),
onTap: () {
showTestFullWindow();
},
),
]),
)
],
);
}
}

View File

@@ -0,0 +1,57 @@
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_layout/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih-app_tool_body.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
class PackageToolTwo extends StatefulWidget {
const PackageToolTwo({super.key});
@override
State<PackageToolTwo> createState() => _PackageToolTwoState();
}
class _PackageToolTwoState extends State<PackageToolTwo> {
@override
Widget build(BuildContext context) {
return MihAppToolBody(
borderOn: false,
bodyItem: getBody(),
);
}
Widget getBody() {
return MihSingleChildScroll(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
Text(
"World",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
const SizedBox(height: 10),
Container(
color: Colors.black,
width: 200,
height: 200,
padding: EdgeInsets.zero,
alignment: Alignment.center,
child: IconButton.filled(
onPressed: () {},
icon: Icon(
MihIcons.mihLogo,
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
),
)
],
),
);
}
}

View File

@@ -197,3 +197,13 @@ class PatManagerArguments {
this.businessUser,
);
}
class WalletArguments {
final AppUser signedInUser;
final int index;
WalletArguments(
this.signedInUser,
this.index,
);
}

View File

@@ -3,12 +3,16 @@ class MIHLoyaltyCard {
final String app_id;
final String shop_name;
final String card_number;
final String favourite;
final int priority_index;
const MIHLoyaltyCard({
required this.idloyalty_cards,
required this.app_id,
required this.shop_name,
required this.card_number,
required this.favourite,
required this.priority_index,
});
factory MIHLoyaltyCard.fromJson(Map<String, dynamic> json) {
@@ -18,12 +22,16 @@ class MIHLoyaltyCard {
"app_id": String app_id,
"shop_name": String shop_name,
"card_number": String card_number,
"favourite": String favourite,
"priority_index": int priority_index,
} =>
MIHLoyaltyCard(
idloyalty_cards: idloyalty_cards,
app_id: app_id,
shop_name: shop_name,
card_number: card_number,
favourite: favourite,
priority_index: priority_index,
),
_ => throw const FormatException('Failed to load loyalty card objects'),
};

View File

@@ -126,132 +126,141 @@ class _AiChatState extends State<AiChat> {
return MihAppWindow(
fullscreen: false,
windowTitle: 'Mzansi AI Thoughts',
windowTools: [
Visibility(
visible: _aiThinking == false,
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Container(
//color: MzanziInnovationHub.of(context)!.theme.successColor(),
decoration: BoxDecoration(
color:
MzanziInnovationHub.of(context)!.theme.successColor(),
borderRadius: const BorderRadius.all(
Radius.circular(100),
windowTools: Row(
children: [
Visibility(
visible: _aiThinking == false,
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Container(
//color: MzanziInnovationHub.of(context)!.theme.successColor(),
decoration: BoxDecoration(
color: MzanziInnovationHub.of(context)!
.theme
.successColor(),
borderRadius: const BorderRadius.all(
Radius.circular(100),
),
),
),
child: IconButton(
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
onPressed: () async {
print("Start TTS now");
child: IconButton(
color: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
onPressed: () async {
print("Start TTS now");
_speakText(snapshot.requireData);
},
icon: const Icon(Icons.volume_up),
),
),
),
),
Visibility(
visible: _aiThinking == true,
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Container(
// color: MzanziInnovationHub.of(context)!.theme.errorColor(),
decoration: BoxDecoration(
color:
MzanziInnovationHub.of(context)!.theme.errorColor(),
borderRadius: const BorderRadius.all(
Radius.circular(100),
_speakText(snapshot.requireData);
},
icon: const Icon(Icons.volume_up),
),
),
child: IconButton(
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
onPressed: () {
//print("Start TTS now");
_flutterTts.stop();
},
icon: const Icon(Icons.volume_off),
),
),
Visibility(
visible: _aiThinking == true,
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Container(
// color: MzanziInnovationHub.of(context)!.theme.errorColor(),
decoration: BoxDecoration(
color:
MzanziInnovationHub.of(context)!.theme.errorColor(),
borderRadius: const BorderRadius.all(
Radius.circular(100),
),
),
child: IconButton(
color: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
onPressed: () {
//print("Start TTS now");
_flutterTts.stop();
},
icon: const Icon(Icons.volume_off),
),
),
),
),
),
],
],
),
onWindowTapClose: () {
_captureAIResponse(snapshot.requireData);
_flutterTts.stop();
Navigator.of(context).pop();
},
windowBody: [
Stack(
children: [
Text(
snapshot.requireData,
textAlign: TextAlign.left,
style: TextStyle(
color: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
fontSize: _chatFrontSize,
fontWeight: FontWeight.bold,
),
),
Positioned(
bottom: 0,
right: 0,
child: Visibility(
visible: _aiThinking == false,
child: IconButton.filled(
iconSize: 25,
autofocus: true,
onPressed: () {
_captureAIResponse(snapshot.requireData);
_flutterTts.stop();
Navigator.of(context).pop();
},
focusColor: MzanziInnovationHub.of(context)!
.theme
.successColor(),
icon: Icon(
Icons.check,
color: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
windowBody: Column(
children: [
Stack(
children: [
Column(
children: [
Text(
snapshot.requireData,
textAlign: TextAlign.left,
style: TextStyle(
color: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
fontSize: _chatFrontSize,
fontWeight: FontWeight.bold,
),
),
),
// MIHButton(
// onTap: () {
// _captureAIResponse(snapshot.requireData);
// Navigator.of(context).pop();
// },
// buttonText: "Continue",
// buttonColor: MzanziInnovationHub.of(context)!
// .theme
// .successColor(),
// textColor: MzanziInnovationHub.of(context)!
// .theme
// .primaryColor(),
// ),
],
),
),
],
),
],
Positioned(
bottom: 0,
right: 0,
child: Visibility(
visible: _aiThinking == false,
child: IconButton.filled(
iconSize: 25,
autofocus: true,
onPressed: () {
_captureAIResponse(snapshot.requireData);
_flutterTts.stop();
Navigator.of(context).pop();
},
focusColor: MzanziInnovationHub.of(context)!
.theme
.successColor(),
icon: Icon(
Icons.check,
color: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
),
),
// MIHButton(
// onTap: () {
// _captureAIResponse(snapshot.requireData);
// Navigator.of(context).pop();
// },
// buttonText: "Continue",
// buttonColor: MzanziInnovationHub.of(context)!
// .theme
// .successColor(),
// textColor: MzanziInnovationHub.of(context)!
// .theme
// .primaryColor(),
// ),
),
),
],
),
],
),
);
} else {
return MihAppWindow(
fullscreen: false,
windowTitle: 'Mzansi AI Thoughts',
windowTools: [],
// windowTools: [],
onWindowTapClose: () {
Navigator.of(context).pop();
},
windowBody: const [
Mihloadingcircle(),
],
windowBody: Mihloadingcircle(),
);
}
},

View File

@@ -1,6 +1,8 @@
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_layout/mih_window.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_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';
@@ -13,10 +15,13 @@ import 'package:barcode_widget/barcode_widget.dart';
class BuildLoyaltyCardList extends StatefulWidget {
final AppUser signedInUser;
final List<MIHLoyaltyCard> cardList;
final int navIndex;
const BuildLoyaltyCardList({
super.key,
required this.signedInUser,
required this.cardList,
required this.navIndex,
});
@override
@@ -24,6 +29,8 @@ class BuildLoyaltyCardList extends StatefulWidget {
}
class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
late int _noFavourites;
void deleteCardWindow(BuildContext ctxt, int index) {
showDialog(
context: context,
@@ -35,6 +42,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
MIHMzansiWalletApis.deleteLoyaltyCardAPICall(
widget.signedInUser,
widget.cardList[index].idloyalty_cards,
widget.navIndex,
context,
);
});
@@ -42,6 +50,114 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
);
}
void addToFavCardWindow(BuildContext ctxt, int index) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return MihAppAlert(
alertIcon: Icon(
Icons.favorite,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
size: 100,
),
alertTitle: "Add to Favourites",
alertBody: Column(
children: [
Text(
"Are you sure you want to add this card to your favourites?",
style: TextStyle(
fontSize: 20,
color:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
const SizedBox(
height: 15,
),
SizedBox(
width: 300,
height: 50,
child: MIHButton(
onTap: () {
MIHMzansiWalletApis.updateLoyaltyCardAPICall(
widget.signedInUser,
widget.cardList[index].idloyalty_cards,
"Yes",
_noFavourites,
0,
ctxt,
);
},
buttonText: "Add",
buttonColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
textColor:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
),
],
),
alertColour: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
);
},
);
}
void removeFromFavCardWindow(BuildContext ctxt, int index) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return MihAppAlert(
alertIcon: Icon(
Icons.favorite_border,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
size: 100,
),
alertTitle: "Remove From Favourites",
alertBody: Column(
children: [
Text(
"Are you sure you want to remove this card from your favourites?",
style: TextStyle(
fontSize: 20,
color:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
const SizedBox(
height: 15,
),
SizedBox(
width: 300,
height: 50,
child: MIHButton(
onTap: () {
MIHMzansiWalletApis.updateLoyaltyCardAPICall(
widget.signedInUser,
widget.cardList[index].idloyalty_cards,
"",
0,
0,
ctxt,
);
},
buttonText: "Remove",
buttonColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
textColor:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
),
],
),
alertColour: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
);
},
);
}
void viewCardWindow(int index) {
//print(widget.cardList[index].card_number);
String formattedCardNumber = "";
@@ -54,74 +170,104 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) => MIHWindow(
builder: (context) => MihAppWindow(
fullscreen: false,
windowTitle: widget.cardList[index].shop_name.toUpperCase(),
windowTools: [
IconButton(
onPressed: () {
deleteCardWindow(context, index);
},
icon: Icon(
Icons.delete,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
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(),
),
),
),
],
),
onWindowTapClose: () {
Navigator.pop(context);
},
windowBody: [
Container(
child: MihCardDisplay(
shopName: widget.cardList[index].shop_name, height: 250),
),
const SizedBox(height: 20),
Container(
width: 500,
//color: Colors.white,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
windowBody: Column(
children: [
Container(
child: MihCardDisplay(
shopName: widget.cardList[index].shop_name, height: 250),
),
child: Column(
children: [
// const SizedBox(height: 10),
Padding(
padding: const EdgeInsets.all(10.0),
child: SizedBox(
height: 75,
width: 300,
child: BarcodeWidget(
//color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
barcode: Barcode.code128(),
backgroundColor: Colors.white,
data: widget.cardList[index].card_number,
drawText: false,
),
// SfBarcodeGenerator(
// backgroundColor: Colors.white,
// barColor: Colors.black,
// value: widget.cardList[index].card_number,
// symbology: Code128(),
// //showValue: true,
// ),
),
),
// const SizedBox(height: 10),
Text(
formattedCardNumber,
style: const TextStyle(
color: Colors.black,
fontSize: 25,
fontWeight: FontWeight.bold
//MzanziInnovationHub.of(context)!.theme.secondaryColor(),
const SizedBox(height: 20),
Container(
width: 500,
//color: Colors.white,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
),
child: Column(
children: [
// const SizedBox(height: 10),
Padding(
padding: const EdgeInsets.all(10.0),
child: SizedBox(
height: 75,
width: 300,
child: BarcodeWidget(
//color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
barcode: Barcode.code128(),
backgroundColor: Colors.white,
data: widget.cardList[index].card_number,
drawText: false,
),
),
],
),
)
],
// SfBarcodeGenerator(
// backgroundColor: Colors.white,
// barColor: Colors.black,
// value: widget.cardList[index].card_number,
// symbology: Code128(),
// //showValue: true,
// ),
),
),
// const SizedBox(height: 10),
Text(
formattedCardNumber,
style: const TextStyle(
color: Colors.black,
fontSize: 25,
fontWeight: FontWeight.bold
//MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
],
),
)
],
),
),
);
}
@@ -134,6 +280,24 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
}
}
int countFavourites() {
int count = 0;
for (var card in widget.cardList) {
if (card.favourite != "") {
count++;
}
}
return count;
}
@override
void initState() {
super.initState();
setState(() {
_noFavourites = countFavourites();
});
}
@override
Widget build(BuildContext context) {
final Size size = MediaQuery.sizeOf(context);

View File

@@ -1,15 +1,18 @@
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_action.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_app_tools.dart';
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_objects/arguments.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/package_tools/mih_card_favourites.dart';
import 'package:mzansi_innovation_hub/mih_packages/mzansi_wallet/package_tools/mih_cards.dart';
import 'package:flutter/material.dart';
class MihWallet extends StatefulWidget {
final AppUser signedInUser;
final WalletArguments arguments;
// final AppUser signedInUser;
const MihWallet({
super.key,
required this.signedInUser,
required this.arguments,
// required this.signedInUser,
});
@override
@@ -23,7 +26,7 @@ class _MihWalletState extends State<MihWallet> {
void initState() {
super.initState();
setState(() {
_selcetedIndex = 0;
_selcetedIndex = widget.arguments.index;
});
}
@@ -56,11 +59,16 @@ class _MihWalletState extends State<MihWallet> {
MihAppTools getTools() {
Map<Widget, void Function()?> temp = {};
temp[const Icon(Icons.card_membership)] = () {
temp[const Icon(Icons.favorite)] = () {
setState(() {
_selcetedIndex = 0;
});
};
temp[const Icon(Icons.card_membership)] = () {
setState(() {
_selcetedIndex = 1;
});
};
return MihAppTools(
tools: temp,
@@ -70,8 +78,11 @@ class _MihWalletState extends State<MihWallet> {
List<Widget> getToolBody() {
List<Widget> toolBodies = [
MihCardFavourites(
signedInUser: widget.arguments.signedInUser,
),
MihCards(
signedInUser: widget.signedInUser,
signedInUser: widget.arguments.signedInUser,
),
];
return toolBodies;

View File

@@ -3,6 +3,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:mzansi_innovation_hub/mih_objects/arguments.dart';
class MihWalletTile extends StatefulWidget {
final AppUser signedInUser;
@@ -25,7 +26,7 @@ class _MihWalletTileState extends State<MihWalletTile> {
onTap: () {
Navigator.of(context).pushNamed(
'/mzansi-wallet',
arguments: widget.signedInUser,
arguments: WalletArguments(widget.signedInUser, 0),
);
},
appName: "Mzansi Wallet",

View File

@@ -0,0 +1,124 @@
import 'package:flutter/material.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_layout/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih-app_tool_body.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.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/builder/build_loyalty_card_list.dart';
class MihCardFavourites extends StatefulWidget {
final AppUser signedInUser;
const MihCardFavourites({
super.key,
required this.signedInUser,
});
@override
State<MihCardFavourites> createState() => _MihCardFavouritesState();
}
class _MihCardFavouritesState extends State<MihCardFavourites> {
late Future<List<MIHLoyaltyCard>> cardList;
List<MIHLoyaltyCard> listOfCards = [];
@override
void initState() {
super.initState();
cardList = MIHMzansiWalletApis.getFavouriteLoyaltyCards(
widget.signedInUser.app_id,
);
}
@override
Widget build(BuildContext context) {
return MihAppToolBody(
borderOn: true,
bodyItem: getBody(),
);
}
Widget getBody() {
return Stack(
children: [
MihSingleChildScroll(
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Favourites",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
),
),
],
),
Divider(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
FutureBuilder(
future: cardList,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: Mihloadingcircle(),
);
} else if (snapshot.connectionState == ConnectionState.done &&
snapshot.hasData) {
listOfCards = snapshot.data!;
// searchShop();
return BuildLoyaltyCardList(
cardList: listOfCards,
signedInUser: widget.signedInUser,
navIndex: 0,
);
} else {
return const Center(
child: Text("Error Loading Loyalty Cards"),
);
}
},
),
],
),
),
// Positioned(
// right: 0,
// bottom: 0,
// child: MihFloatingMenu(
// animatedIcon: AnimatedIcons.menu_close,
// children: [
// SpeedDialChild(
// child: Icon(
// Icons.add,
// color:
// MzanziInnovationHub.of(context)!.theme.primaryColor(),
// ),
// label: "Add Loyalty 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: () {
// // addCardWindow(context);
// },
// )
// ]),
// )
],
);
}
}

View File

@@ -201,6 +201,9 @@ class _MihCardsState extends State<MihCards> {
widget.signedInUser.app_id,
shopController.text,
cardNumberController.text,
"",
0,
1,
context,
);
}
@@ -314,6 +317,7 @@ class _MihCardsState extends State<MihCards> {
return BuildLoyaltyCardList(
cardList: searchShopName.value,
signedInUser: widget.signedInUser,
navIndex: 1,
);
},
);

View File

@@ -188,12 +188,12 @@ class RouteGenerator {
// /mzansi wallet
case '/mzansi-wallet':
if (args is AppUser) {
if (args is WalletArguments) {
//print("route generator: $args");
return MaterialPageRoute(
settings: settings,
builder: (_) => MihWallet(
signedInUser: args,
arguments: args,
),
// MzansiWallet(
// signedInUser: args,

View File

@@ -17,7 +17,13 @@ class MzansiWalletInsertRequest(BaseModel):
app_id: str
shop_name: str
card_number: str
favourite: str
priority_index: int
class MzansiWalletUpdateRequest(BaseModel):
idloyalty_cards: int
favourite: str
priority_index: int
# class patientNoteUpdateRequest(BaseModel):
# idpatient_notes: int
# note_name: str
@@ -39,6 +45,30 @@ async def read_all_loyalty_cards_by_app_id(app_id: str, session: SessionContaine
"app_id": item[1],
"shop_name": item[2],
"card_number": item[3],
"favourite": item[4],
"priority_index": item[5],
}
for item in cursor.fetchall()
]
cursor.close()
db.close()
return items
# Get List of favourite loyalty cards by user
@router.get("/mzasni-wallet/loyalty-cards/favourites/{app_id}", tags=["Mzansi Wallet"])
async def read_favourite_loyalty_cards_by_app_id(app_id: str, session: SessionContainer = Depends(verify_session())): # , session: SessionContainer = Depends(verify_session())
db = database.dbConnection.dbMzansiWalletConnect()
cursor = db.cursor()
query = "SELECT * FROM loyalty_cards where app_id = %s and favourite != '' ORDER BY priority_index Asc"
cursor.execute(query, (app_id,))
items = [
{
"idloyalty_cards": item[0],
"app_id": item[1],
"shop_name": item[2],
"card_number": item[3],
"favourite": item[4],
"priority_index": item[5],
}
for item in cursor.fetchall()
]
@@ -76,11 +106,13 @@ 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) "
query += "values (%s, %s, %s)"
query += "(app_id, shop_name, card_number, favourite, priority_index) "
query += "values (%s, %s, %s, %s, %s)"
notetData = (itemRequest.app_id,
itemRequest.shop_name,
itemRequest.card_number,
itemRequest.favourite,
itemRequest.priority_index,
)
try:
cursor.execute(query, notetData)
@@ -113,26 +145,25 @@ async def Delete_loyalty_card(itemRequest : LoyaltyCardDeleteRequest, session: S
db.close()
return {"message": "Successfully deleted Record"}
# Update Patient note on table
# @router.put("/notes/update/", tags="patients_notes")
# async def UpdatePatient(itemRequest : patientNoteUpdateRequest, session: SessionContainer = Depends(verify_session())):
# today = date.today()
# db = database.dbConnection.dbPatientManagerConnect()
# cursor = db.cursor()
# query = "update patient_notes "
# query += "set note_name=%s, note_text=%s, patient_id=%s, insert_date=%s "
# query += "where idpatient_notes=%s"
# notetData = (itemRequest.note_name,
# itemRequest.note_text,
# itemRequest.patient_id,
# today,
# itemRequest.idpatient_notes)
# try:
# cursor.execute(query, notetData)
# except Exception as error:
# raise HTTPException(status_code=404, detail="Failed to Update Record")
# #return {"query": query, "message": error}
# db.commit()
# cursor.close()
# db.close()
# return {"message": "Successfully Updated Record"}
# Update on table
@router.put("/mzasni-wallet/loyalty-cards/update/", tags=["Mzansi Wallet"])
async def UpdatePatient(itemRequest : MzansiWalletUpdateRequest, session: SessionContainer = Depends(verify_session())):
today = date.today()
db = database.dbConnection.dbMzansiWalletConnect()
cursor = db.cursor()
query = "update loyalty_cards "
query += "set favourite=%s, priority_index=%s "
query += "where idloyalty_cards=%s"
notetData = (itemRequest.favourite,
itemRequest.priority_index,
itemRequest.idloyalty_cards,
)
try:
cursor.execute(query, notetData)
except Exception as error:
raise HTTPException(status_code=404, detail="Failed to Update Record")
#return {"query": query, "message": error}
db.commit()
cursor.close()
db.close()
return {"message": "Successfully Updated Record"}