Greeting Card

greeting_card
aamir-csol 2 weeks ago
parent e3fcc992df
commit ba8908d4eb

@ -17,6 +17,7 @@ import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart';
import 'package:mohem_flutter_app/models/dashboard/list_menu.dart'; import 'package:mohem_flutter_app/models/dashboard/list_menu.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/get_employee_parking_details_model.dart'; import 'package:mohem_flutter_app/models/get_employee_parking_details_model.dart';
import 'package:mohem_flutter_app/models/greetings/greeting_card_model.dart';
import 'package:mohem_flutter_app/models/itg/itg_main_response.dart'; import 'package:mohem_flutter_app/models/itg/itg_main_response.dart';
import 'package:mohem_flutter_app/models/itg/itg_response_model.dart'; import 'package:mohem_flutter_app/models/itg/itg_response_model.dart';
import 'package:mohem_flutter_app/models/sso_auth_model.dart'; import 'package:mohem_flutter_app/models/sso_auth_model.dart';
@ -429,4 +430,18 @@ class DashboardApiClient {
postParams, postParams,
); );
} }
Future<GetGreetingCardsModelResponse?> getGreetingCards() async {
String url = "${ApiConsts.erpRest}Get_GreetingCards";
Map<String, dynamic> postParams = {};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject(
(json) {
GetGreetingCardsModelResponse responseData = GetGreetingCardsModelResponse.fromJson(json);
return responseData;
},
url,
postParams,
);
}
} }

@ -0,0 +1,105 @@
import 'dart:convert';
class GetGreetingCardsModelResponse {
List<GetGreetingCardsModelResponseElement>? getGreetingCardsModelResponse;
GetGreetingCardsModelResponse({
this.getGreetingCardsModelResponse,
});
factory GetGreetingCardsModelResponse.fromRawJson(String str) => GetGreetingCardsModelResponse.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GetGreetingCardsModelResponse.fromJson(Map<String, dynamic> json) => GetGreetingCardsModelResponse(
getGreetingCardsModelResponse: json["Get_GreetingCardsModel_Response"] == null ? [] : List<GetGreetingCardsModelResponseElement>.from(json["Get_GreetingCardsModel_Response"]!.map((x) => GetGreetingCardsModelResponseElement.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"Get_GreetingCardsModel_Response": getGreetingCardsModelResponse == null ? [] : List<dynamic>.from(getGreetingCardsModelResponse!.map((x) => x.toJson())),
};
}
class GetGreetingCardsModelResponseElement {
int? id;
dynamic titleEn;
String? titleAr;
String? descriptionEn;
String? descriptionAr;
String? startDate;
String? endDate;
String? urlEn;
String? urlAr;
String? backgroundImageUrlEn;
String? backgroundImageUrlAr;
int? channel;
int? categoryId;
String? categoryNameAr;
String? categoryNameEn;
String? createdOn;
bool? isActive;
GetGreetingCardsModelResponseElement({
this.id,
this.titleEn,
this.titleAr,
this.descriptionEn,
this.descriptionAr,
this.startDate,
this.endDate,
this.urlEn,
this.urlAr,
this.backgroundImageUrlEn,
this.backgroundImageUrlAr,
this.channel,
this.categoryId,
this.categoryNameAr,
this.categoryNameEn,
this.createdOn,
this.isActive,
});
factory GetGreetingCardsModelResponseElement.fromRawJson(String str) => GetGreetingCardsModelResponseElement.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GetGreetingCardsModelResponseElement.fromJson(Map<String, dynamic> json) => GetGreetingCardsModelResponseElement(
id: json["ID"],
titleEn: json["TitleEn"],
titleAr: json["TitleAr"],
descriptionEn: json["DescriptionEn"],
descriptionAr: json["DescriptionAr"],
startDate: json["StartDate"],
endDate: json["EndDate"],
urlEn: json["UrlEn"],
urlAr: json["UrlAr"],
backgroundImageUrlEn: json["BackgroundImageUrlEn"],
backgroundImageUrlAr: json["BackgroundImageUrlAr"],
channel: json["Channel"],
categoryId: json["CategoryID"],
categoryNameAr: json["CategoryNameAr"],
categoryNameEn: json["CategoryNameEn"],
createdOn: json["CreatedOn"],
isActive: json["IsActive"],
);
Map<String, dynamic> toJson() => {
"ID": id,
"TitleEn": titleEn,
"TitleAr": titleAr,
"DescriptionEn": descriptionEn,
"DescriptionAr": descriptionAr,
"StartDate": startDate,
"EndDate": endDate,
"UrlEn": urlEn,
"UrlAr": urlAr,
"BackgroundImageUrlEn": backgroundImageUrlEn,
"BackgroundImageUrlAr": backgroundImageUrlAr,
"Channel": channel,
"CategoryID": categoryId,
"CategoryNameAr": categoryNameAr,
"CategoryNameEn": categoryNameEn,
"CreatedOn": createdOn,
"IsActive": isActive,
};
}

@ -21,6 +21,7 @@ import 'package:mohem_flutter_app/models/dashboard/menus.dart';
import 'package:mohem_flutter_app/models/dashboard/mohemm_itg_pending_task_responseitem.dart'; import 'package:mohem_flutter_app/models/dashboard/mohemm_itg_pending_task_responseitem.dart';
import 'package:mohem_flutter_app/models/eit/get_eit_transaction_model.dart'; import 'package:mohem_flutter_app/models/eit/get_eit_transaction_model.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/greetings/greeting_card_model.dart';
import 'package:mohem_flutter_app/models/itg/itg_response_model.dart'; import 'package:mohem_flutter_app/models/itg/itg_response_model.dart';
import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart'; import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart';
import 'package:mohem_flutter_app/models/sso_auth_model.dart'; import 'package:mohem_flutter_app/models/sso_auth_model.dart';
@ -67,6 +68,9 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
bool isOffersLoading = true; bool isOffersLoading = true;
List<OffersListModel> getOffersList = []; List<OffersListModel> getOffersList = [];
bool isDisplayEidGreetings = false;
List<GetGreetingCardsModelResponseElement>? greetingCardsList;
//Attendance Tracking API's & Methods //Attendance Tracking API's & Methods
Future<bool> fetchAttendanceTracking(context) async { Future<bool> fetchAttendanceTracking(context) async {
try { try {
@ -307,6 +311,27 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
} }
} }
void fetchGreetingCards() async {
try {
GetGreetingCardsModelResponse? response = await DashboardApiClient().getGreetingCards();
greetingCardsList = response?.getGreetingCardsModelResponse ?? [];
// Check if there are any active greeting cards
if (greetingCardsList != null && greetingCardsList!.isNotEmpty) {
isDisplayEidGreetings = greetingCardsList!.any((card) => card.isActive == true);
} else {
isDisplayEidGreetings = false;
}
notifyListeners();
} catch (ex) {
logger.wtf(ex);
isDisplayEidGreetings = false;
greetingCardsList = [];
notifyListeners();
}
}
Future<void> fetchTicketBooking() async { Future<void> fetchTicketBooking() async {
try { try {
GenericResponseModel? genericResponseModel = await DashboardApiClient().getTicketBookingRedirection(); GenericResponseModel? genericResponseModel = await DashboardApiClient().getTicketBookingRedirection();

@ -155,6 +155,7 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
data.fetchLeaveTicketBalance(context, DateTime.now()); data.fetchLeaveTicketBalance(context, DateTime.now());
data.fetchMenuEntries(); data.fetchMenuEntries();
data.fetchEventActivity(); data.fetchEventActivity();
data.fetchGreetingCards();
data.getCategoryOffersListAPI(context); data.getCategoryOffersListAPI(context);
marathonProvider.getMarathonDetailsFromApi(); marathonProvider.getMarathonDetailsFromApi();
marathonProvider.getMarathonTutorial(); marathonProvider.getMarathonTutorial();
@ -283,7 +284,9 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
}); });
}, },
), ),
Image.asset("assets/images/logos/main_mohemm_logo.png", width: 134, height: 28).expanded, Image
.asset("assets/images/logos/main_mohemm_logo.png", width: 134, height: 28)
.expanded,
SvgPicture.asset("assets/images/announcements.svg", matchTextDirection: true).onPress(() async { SvgPicture.asset("assets/images/announcements.svg", matchTextDirection: true).onPress(() async {
await Navigator.pushNamed(context, AppRoutes.announcements); await Navigator.pushNamed(context, AppRoutes.announcements);
}), }),
@ -423,8 +426,137 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
), ),
], ],
).paddingOnly(left: 21, right: 21, top: 7, bottom: 21), ).paddingOnly(left: 21, right: 21, top: 7, bottom: 21),
if (data.isDisplayEidGreetings) ...[
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Directionality(
textDirection: AppState().isArabic(context) ? ui.TextDirection.rtl : ui.TextDirection.ltr,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
gradient: const LinearGradient(colors: [Color(0xFFE7E7E7), Color(0xFFE7E7E7)], begin: Alignment.centerLeft, end: Alignment.centerRight),
),
child: Padding(
padding: const EdgeInsets.all(3.0),
child: Container(
height: 120,
decoration: BoxDecoration(color: const Color(0xFFFAF4E7),borderRadius: BorderRadius.circular(17), image: DecorationImage(image: NetworkImage(AppState().isArabic(context) ? data.greetingCardsList!.first.backgroundImageUrlAr ?? "" : data.greetingCardsList!.first.backgroundImageUrlEn ?? ""), fit: BoxFit.cover)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Expanded(
// flex: 4,
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// Row(
// children: [
// Expanded(
// flex: 2,
// child: RichText(
// text:
// AppState().isArabic(context)
// ? TextSpan(
// children: [
// TextSpan(
// text: 'اطلع على مميزات',
// style: TextStyle(
// fontSize: 16,
// letterSpacing: -0.2,
// fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
// fontWeight: FontWeight.w700,
// height: 24 / 16,
// color: const Color(0xFF5D5E5E),
// ),
// ),
// TextSpan(
// text: ' مزايا',
// style: TextStyle(
// fontSize: 16,
// fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
// fontWeight: FontWeight.w700,
// letterSpacing: -0.2,
// height: 24 / 16,
// color: MyColors.mazayaRedColor, // Use your MAZAYA red color here if defined, e.g. MyColors.mazayaRed
// ),
// ),
// ],
// )
// : TextSpan(
// children: [
// TextSpan(
// text: LocaleKeys.explore.tr() + ' ',
// style: const TextStyle(
// fontSize: 16,
// letterSpacing: -0.2,
// fontFamily: 'Poppins',
// fontWeight: FontWeight.w700,
// height: 24 / 16,
// color: Color(0xFF5D5E5E),
// ),
// ),
// TextSpan(
// text: LocaleKeys.mazaya.tr(),
// style: const TextStyle(
// fontSize: 16,
// fontWeight: FontWeight.w700,
// fontFamily: 'Poppins',
// letterSpacing: -0.2,
// height: 24 / 16,
// color: MyColors.mazayaRedColor, // Use your MAZAYA red color here if defined, e.g. MyColors.mazayaRed
// ),
// ),
// TextSpan(
// text: ' ' + LocaleKeys.benefits.tr(),
// style: const TextStyle(
// fontSize: 16,
// letterSpacing: -0.2,
// fontFamily: 'Poppins',
// fontWeight: FontWeight.w700,
// height: 24 / 16,
// color: Color(0xFF5D5E5E),
// ),
// ),
// ],
// ),
// ),
// ),
// const Expanded(flex: 1, child: SizedBox()),
// ],
// ),
// const SizedBox(height: 8),
// LocaleKeys.mazayaDesc.tr().toText11(color: const Color(0xFF5D5E5E)),
// ],
// ),
// ),
// Expanded(
// flex: 2,
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.end,
// mainAxisAlignment: MainAxisAlignment.end,
// children: [
// SvgPicture.asset("assets/icons/mazaya_brand.svg", width: 90, height: 47),
// const SizedBox(height: 28),
// LocaleKeys.viewallofferMazaya.tr().toText12(isUnderLine: true, color: const Color(0xFF3B3D4A)).onPress(() {
// Navigator.pushNamed(context, AppRoutes.offersAndDiscounts);
// }),
// ],
// ),
// ),
],
).paddingOnly(left: 21, right: 21, top: 14, bottom: 14),
),
),
).paddingOnly(left: 21, right: 21, top: 0, bottom: 21),
),
],
),
],
eventActivityWidget(context), eventActivityWidget(context),
if (isDisplayMazaya) ...[ if (isDisplayMazaya) ...[
Column( Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@ -471,7 +603,7 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins', fontFamily: AppState().isArabic(context) ? 'Cairo' : 'Poppins',
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
height: 24 / 16, height: 24 / 16,
color: Color(0xFF5D5E5E), color: const Color(0xFF5D5E5E),
), ),
), ),
TextSpan( TextSpan(
@ -577,11 +709,9 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
6.width, 6.width,
Container( Container(
padding: const EdgeInsets.only(left: 8, right: 8), padding: const EdgeInsets.only(left: 8, right: 8),
decoration: BoxDecoration( decoration: BoxDecoration(color: MyColors.yellowColor, borderRadius: BorderRadius.circular(10)),
color: MyColors.yellowColor, child: LocaleKeys.newString.tr().toText10(isBold: true),
borderRadius: BorderRadius.circular(10),
), ),
child: LocaleKeys.newString.tr().toText10(isBold: true)),
], ],
), ),
], ],
@ -589,7 +719,7 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
), ),
LocaleKeys.viewAllOffers.tr().toText12(isUnderLine: true).onPress(() { LocaleKeys.viewAllOffers.tr().toText12(isUnderLine: true).onPress(() {
Navigator.pushNamed(context, AppRoutes.offersAndDiscounts); Navigator.pushNamed(context, AppRoutes.offersAndDiscounts);
}) }),
], ],
).paddingOnly(left: 21, right: 21), ).paddingOnly(left: 21, right: 21),
Consumer<DashboardProviderModel>( Consumer<DashboardProviderModel>(
@ -618,28 +748,22 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
height: 73, height: 73,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: const BorderRadius.all( borderRadius: const BorderRadius.all(Radius.circular(100)),
Radius.circular(100),
),
border: Border.all(color: MyColors.lightGreyE3Color, width: 1), border: Border.all(color: MyColors.lightGreyE3Color, width: 1),
), ),
child: ClipRRect( child: ClipRRect(
borderRadius: const BorderRadius.all( borderRadius: const BorderRadius.all(Radius.circular(50)),
Radius.circular(50),
),
child: Hero( child: Hero(
tag: "ItemImage" + data.getOffersList[index].offersDiscountId.toString()!, tag: "ItemImage" + data.getOffersList[index].offersDiscountId.toString()!,
transitionOnUserGestures: true, transitionOnUserGestures: true,
child: Image.network( child: Image.network(data.getOffersList[index].logo ?? "", fit: BoxFit.contain),
data.getOffersList[index].logo ?? "",
fit: BoxFit.contain,
),
), ),
), ),
), ),
4.height, 4.height,
Expanded( Expanded(
child: AppState().isArabic(context) child:
AppState().isArabic(context)
? data.getOffersList[index].titleAr!.toText12(isCenter: true, maxLine: 1) ? data.getOffersList[index].titleAr!.toText12(isCenter: true, maxLine: 1)
: data.getOffersList[index].titleEn!.toText12(isCenter: true, maxLine: 1), : data.getOffersList[index].titleEn!.toText12(isCenter: true, maxLine: 1),
), ),
@ -649,7 +773,8 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
); );
}, },
separatorBuilder: (BuildContext cxt, int index) => 8.width, separatorBuilder: (BuildContext cxt, int index) => 8.width,
itemCount: 9), itemCount: 9,
),
); );
}, },
), ),
@ -829,9 +954,16 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
} }
Widget eventActivityWidget(BuildContext context) { Widget eventActivityWidget(BuildContext context) {
return (context.watch<DashboardProviderModel>().isEventLoadingLoading) return (context
.watch<DashboardProviderModel>()
.isEventLoadingLoading)
? const MarathonBannerShimmer().paddingOnly(left: 21, right: 21, bottom: 21, top: 0) ? const MarathonBannerShimmer().paddingOnly(left: 21, right: 21, bottom: 21, top: 0)
: (context.watch<DashboardProviderModel>().eventActivity != null && context.watch<DashboardProviderModel>().eventActivity!.isActive == true) : (context
.watch<DashboardProviderModel>()
.eventActivity != null && context
.watch<DashboardProviderModel>()
.eventActivity!
.isActive == true)
? const EventActivityBanner().paddingOnly(left: 21, right: 21, bottom: 21, top: 0) ? const EventActivityBanner().paddingOnly(left: 21, right: 21, bottom: 21, top: 0)
: const SizedBox(); : const SizedBox();
} }

Loading…
Cancel
Save