Merge branch 'master' of https://gitlab.com/mirza.shafique/mohem_flutter_app into development_sultan

merge-requests/1/merge
Sultan Khan 3 years ago
commit 06b14394bd

@ -9,6 +9,13 @@
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
analyzer:
errors:
always_use_package_imports: error
camel_case_types: error
always_declare_return_types: error
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
@ -25,6 +32,13 @@ linter:
always_specify_types: true
always_declare_return_types: true
always_use_package_imports: true
avoid_unnecessary_containers: true
unnecessary_this: true
unnecessary_new: true
camel_case_types: true
sort_child_properties_last: true
camel_case_extensions : true
require_trailing_commas: true
avoid_empty_else: true
avoid_annotating_with_dynamic: true
# avoid_print: false # Uncomment to disable the `avoid_print` rule

@ -0,0 +1,8 @@
<svg id="user_21_" data-name="user (21)" xmlns="http://www.w3.org/2000/svg" width="110.999" height="110.999" viewBox="0 0 110.999 110.999">
<path id="Path_4696" data-name="Path 4696" d="M272.482,267.883a25.756,25.756,0,0,0,5.549-15.868,26.015,26.015,0,1,0-26.015,26.015,25.756,25.756,0,0,0,15.868-5.549l14.569,14.569a3.252,3.252,0,1,0,4.6-4.6ZM260.818,256.22a3.252,3.252,0,1,1-4.6,4.6l-4.2-4.2-4.2,4.2a3.252,3.252,0,0,1-4.6-4.6l4.2-4.2-4.2-4.2a3.252,3.252,0,0,1,4.6-4.6l4.2,4.2,4.2-4.2a3.252,3.252,0,1,1,4.6,4.6l-4.2,4.2Z" transform="translate(-177.004 -177.004)" fill="#ddd"/>
<circle id="Ellipse_165" data-name="Ellipse 165" cx="3.5" cy="3.5" r="3.5" transform="translate(35.5 19.499)" fill="#ddd"/>
<path id="Path_4697" data-name="Path 4697" d="M197.516,362h0Z" transform="translate(-154.695 -283.52)" fill="#ddd"/>
<path id="Path_4698" data-name="Path 4698" d="M197.516,332h0Z" transform="translate(-154.695 -260.021)" fill="#ddd"/>
<path id="Path_4699" data-name="Path 4699" d="M3.252,111H75.011a3.25,3.25,0,0,0,3.252-3.252v-.329a31.763,31.763,0,0,1-3.252.329,32.393,32.393,0,0,1-23.165-9.756H16.476a3.252,3.252,0,0,1,0-6.5H47.016v0a32.2,32.2,0,0,1-2.865-6.507H16.476a3.252,3.252,0,0,1,0-6.5H42.821c-.454-4.484-.454-2.022,0-6.5H16.476a3.252,3.252,0,1,1,0-6.5H44.152a32.468,32.468,0,0,1,7.694-13.009H26.232a3.25,3.25,0,0,1-3.252-3.252V45.96A13.021,13.021,0,0,1,35.988,32.953H39.24A9.756,9.756,0,1,1,49,23.2a9.767,9.767,0,0,1-9.756,9.756h3.252A13.021,13.021,0,0,1,55.5,45.96v3.252c0,.071-.036.13-.04.2a32.2,32.2,0,0,1,19.552-6.7,31.762,31.762,0,0,1,3.252.329V3.252A3.25,3.25,0,0,0,75.011,0H3.252A3.25,3.25,0,0,0,0,3.252v104.5A3.25,3.25,0,0,0,3.252,111Z" fill="#ddd"/>
<path id="Path_4700" data-name="Path 4700" d="M142.5,182a6.512,6.512,0,0,0-6.5,6.5h19.512a6.512,6.512,0,0,0-6.5-6.5Z" transform="translate(-106.516 -142.543)" fill="#ddd"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -251,6 +251,18 @@
"writeComment": "أكتب تعليقا",
"approversList": "قائمة الموافقين",
"yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات",
"monthlyPaySlip": "قسيمة الراتب الشهرية",
"particular": "خاص",
"earnings": "أرباح",
"deductions": "الخصومات",
"paymentMethodName": "اسم طريقة الدفع",
"bankName": "اسم البنك",
"branchCode": "رمز الفرع",
"accountNo": "رقم الحساب",
"summaryOfInformation": "ملخص المعلومات",
"totalPayAmount": "المبلغ الإجمالي للدفع",
"paymentInformation": "معلومات الدفع",
"amount": "مقدار",
"profile": {
"reset_password": {
"label": "Reset Password",
@ -275,14 +287,6 @@
"many": "You clicked {} times!",
"other": "You clicked {} times!"
},
"amount": {
"zero": "Your amount : {} ",
"one": "Your amount : {} ",
"two": "Your amount : {} ",
"few": "Your amount : {} ",
"many": "Your amount : {} ",
"other": "Your amount : {} "
},
"gender": {
"male": "Hi man ;) ",
"female": "Hello girl :)",

@ -252,6 +252,18 @@
"writeComment": "Write a comment",
"approversList": "Approvers List",
"yourRequestHasBeenSubmittedForApprovals": "Your request has been submitted for approvals",
"monthlyPaySlip": "Monthly Pay Slip",
"particular": "Particular",
"earnings": "Earnings",
"deductions": "Deductions",
"paymentMethodName": "Payment Method Name",
"bankName": "Bank Name",
"branchCode": "Branch Code",
"accountNo": "Account No",
"summaryOfInformation": "Summary of Information",
"totalPayAmount": "Total Pay Amount",
"paymentInformation": "Payment Information",
"amount": "Amount",
"profile": {
"reset_password": {
"label": "Reset Password",
@ -276,14 +288,6 @@
"many": "You clicked {} times!",
"other": "You clicked {} times!"
},
"amount": {
"zero": "Your amount : {} ",
"one": "Your amount : {} ",
"two": "Your amount : {} ",
"few": "Your amount : {} ",
"many": "Your amount : {} ",
"other": "Your amount : {} "
},
"gender": {
"male": "Hi man ;) ",
"female": "Hello girl :)",

@ -7,8 +7,7 @@ import 'package:http/http.dart';
import 'package:http/io_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/exceptions/api_exception.dart';
import '../main.dart';
import 'package:mohem_flutter_app/main.dart';
typedef FactoryConstructor<U> = U Function(dynamic);

@ -1,17 +1,13 @@
import 'dart:async';
import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/models/basic_member_information_model.dart';
import 'package:mohem_flutter_app/models/check_mobile_app_version_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart';
import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/member_login_list_model.dart';
import 'package:uuid/uuid.dart';
import 'api_client.dart';
class DashboardApiClient {
static final DashboardApiClient _instance = DashboardApiClient._internal();

@ -10,7 +10,7 @@ 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/member_login_list_model.dart';
import 'api_client.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
class EITApiClient {
static final EITApiClient _instance = EITApiClient._internal();
@ -24,7 +24,7 @@ class EITApiClient {
Map<String, dynamic> postParams = {'P_FUNCTION_NAME': functionName, "P_MENU_TYPE": "E", "P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
List<CollectionTransaction>? responseData = GET_EIT_Transactions_Model.fromJson(json['GetEITTransactionList'][0]).collectionTransaction;
List<CollectionTransaction>? responseData = GetEitTransactionsModel.fromJson(json['GetEITTransactionList'][0]).collectionTransaction;
return responseData;
}, url, postParams);
}

@ -8,7 +8,7 @@ import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart';
import 'package:mohem_flutter_app/models/member_login_list_model.dart';
import 'api_client.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
class LoginApiClient {
static final LoginApiClient _instance = LoginApiClient._internal();

@ -8,8 +8,9 @@ import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.d
import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart';
import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.dart';
import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart';
import 'api_client.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
// todo '@fatima' change file name according to structure
class MonthlyAttendanceApiClient {
static final MonthlyAttendanceApiClient _instance = MonthlyAttendanceApiClient._internal();
@ -17,7 +18,6 @@ class MonthlyAttendanceApiClient {
factory MonthlyAttendanceApiClient() => _instance;
Future<GetTimeCardSummaryList?> getTimeCardSummary(String month, int year) async {
String url = "${ApiConsts.erpRest}GET_TIME_CARD_SUMMARY";
Map<String, dynamic> postParams = {

@ -0,0 +1,68 @@
import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_deductions_List_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_earnings_list_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_pay_slip_list_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_payment_information_list_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_summary_of_payment_list_model.dart';
class MonthlyPaySlipApiClient {
static final MonthlyPaySlipApiClient _instance = MonthlyPaySlipApiClient._internal();
MonthlyPaySlipApiClient._internal();
factory MonthlyPaySlipApiClient() => _instance;
Future<List<GetPayslipList>> getPaySlip() async {
String url = "${ApiConsts.erpRest}GET_PAYSLIP";
Map<String, dynamic> postParams = {"P_MENU_TYPE": "E", "P_SELECTED_RESP_ID": -999};
postParams.addAll(AppState().postParamsJson);
print(postParams);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getPayslipList ?? [];
}, url, postParams);
}
Future<List<GetSummaryOfPaymentList>> getSummaryOfPayment(int pActionContextID) async {
String url = "${ApiConsts.erpRest}GET_SUMMARY_OF_PAYMENT";
Map<String, dynamic> postParams = {"P_ACTION_CONTEXT_ID": pActionContextID};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getSummaryOfPaymentList ?? [];
}, url, postParams);
}
Future<List<GetPaymentInformationList>> getPaymentInformation(int pActionContextID) async {
String url = "${ApiConsts.erpRest}GET_PAYMENT_INFORMATION";
Map<String, dynamic> postParams = {"P_ACTION_CONTEXT_ID": pActionContextID};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getPaymentInformationList ?? [];
}, url, postParams);
}
Future<List<GetDeductionsList>> getDeductions(int pActionContextID) async {
String url = "${ApiConsts.erpRest}GET_DEDUCTIONS";
Map<String, dynamic> postParams = {"P_ACTION_CONTEXT_ID": pActionContextID, "P_PAGE_LIMIT": 100, "P_PAGE_NUM": 1};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getDeductionsList ?? [];
}, url, postParams);
}
Future<List<GetEarningsList>> getEarnings(int pActionContextID) async {
String url = "${ApiConsts.erpRest}GET_EARNINGS";
Map<String, dynamic> postParams = {"P_ACTION_CONTEXT_ID": pActionContextID, "P_PAGE_LIMIT": 100, "P_PAGE_NUM": 1};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getEarningsList ?? [];
}, url, postParams);
}
}

@ -9,8 +9,7 @@ import 'package:mohem_flutter_app/models/mowadhafhi/get_section_topics.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_details.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_transactions.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_types.dart';
import '../../models/mowadhafhi/get_tickets_list.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart';
class MowadhafhiApiClient {
static final MowadhafhiApiClient _instance = MowadhafhiApiClient._internal();
@ -115,7 +114,7 @@ class MowadhafhiApiClient {
String url = "${ApiConsts.cocRest}Mohemm_ITG_CreateTicketMobile";
Map<String, dynamic> postParams = {
"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER,
"ItgImageCollList" : attachmentList,
"ItgImageCollList": attachmentList,
"channelId": 3,
"departmentId": departmentID,
"description": description,

@ -9,7 +9,7 @@ import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart';
import 'package:mohem_flutter_app/models/start_eit_approval_process_model.dart';
import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart';
import 'api_client.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
class MyAttendanceApiClient {
static final MyAttendanceApiClient _instance = MyAttendanceApiClient._internal();

@ -0,0 +1,48 @@
import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/pending_transactions/get_pending_transactions_details.dart';
import 'package:mohem_flutter_app/models/pending_transactions/get_req_functions.dart';
// todo '@haroon' kindly format code
class PendingTransactionsApiClient {
static final PendingTransactionsApiClient _instance = PendingTransactionsApiClient._internal();
PendingTransactionsApiClient._internal();
factory PendingTransactionsApiClient() => _instance;
Future<List<GetPendingTransactionsFunctions>> getPendingReqFunctions() async {
String url = "${ApiConsts.erpRest}GET_PENDING_REQ_FUNCTIONS";
Map<String, dynamic> postParams = {};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getPendingTransactionsFunctions ?? [];
}, url, postParams);
}
Future<List<GetPendingTransactionsDetails>> getPendingTransactionsDetails(String functionID, String dateFrom, String dateTo) async {
String url = "${ApiConsts.erpRest}GET_PENDING_REQ_DETAILS";
Map<String, dynamic> postParams = {"P_FUNCTION_ID": functionID, "P_PAGE_LIMIT": 20, "P_PAGE_NUM": 1, "P_CREATION_DATE_FROM": dateFrom, "P_CREATION_DATE_TO": dateTo};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getPendingTransactionsDetails ?? [];
}, url, postParams);
}
Future<String> getAnnouncements(int itgAwarenessID, int itgPageNo, int itgRowID) async {
String url = "${ApiConsts.cocRest}GetAnnouncementDiscountsConfigData";
Map<String, dynamic> postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER.toString(), "ItgAwarenessID": itgAwarenessID, "ItgPageNo": itgPageNo, "ItgPageSize": 5, "ItgRowID": itgRowID};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.mohemmITGResponseItem ?? "";
}, url, postParams);
}
}

@ -14,9 +14,8 @@ import 'package:mohem_flutter_app/models/profile/phone_number_types_model.dart';
import 'package:mohem_flutter_app/models/profile/start_address_approval_process_model.dart';
import 'package:mohem_flutter_app/models/profile/submit_address_transaction.dart';
import 'package:mohem_flutter_app/models/profile/submit_phone_transactions.dart';
import 'package:mohem_flutter_app/models/start_eit_approval_process_model.dart';
import 'package:mohem_flutter_app/models/start_phone_approval_process_model.dart';
import 'api_client.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
class ProfileApiClient {
static final ProfileApiClient _instance = ProfileApiClient._internal();

@ -1,34 +0,0 @@
import 'dart:async';
import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/models/content_info_model.dart';
import 'package:mohem_flutter_app/models/member_login_list_model.dart';
import 'package:mohem_flutter_app/models/surah_model.dart';
import 'api_client.dart';
class TangheemUserApiClient {
static final TangheemUserApiClient _instance = TangheemUserApiClient._internal();
TangheemUserApiClient._internal();
factory TangheemUserApiClient() => _instance;
// Future<SurahModel> getSurahs() async {
// String url = "${ApiConsts.tangheemUsers}AlSuar_Get";
// var postParams = {};
// return await ApiClient().postJsonForObject((json) => SurahModel.fromJson(json), url, postParams);
// }
//
// Future<MemberModel> getMembers() async {
// String url = "${ApiConsts.tangheemUsers}Committee_Get";
// var postParams = {};
// return await ApiClient().postJsonForObject((json) => MemberModel.fromJson(json), url, postParams);
// }
//
// Future<ContentInfoModel> getContentInfo(int contentId) async {
// String url = "${ApiConsts.tangheemUsers}ContentInfo_Get";
// var postParams = {"contentTypeId": contentId};
// return await ApiClient().postJsonForObject((json) => ContentInfoModel.fromJson(json), url, postParams);
// }
}

@ -20,17 +20,14 @@ import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_mod
import 'package:mohem_flutter_app/models/itg_forms_models/itg_request_model.dart';
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart';
import 'package:mohem_flutter_app/models/worklist_response_model.dart';
import '../../models/worklist/hr/eit_otification_body_model.dart';
import '../../models/worklist/get_favorite_replacements_model.dart';
import '../../models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
import '../../models/worklist/hr/get_contact_notification_body_list_model.dart';
import '../../models/worklist/hr/get_phones_notification_body_list_model.dart';
import '../../models/worklist/hr/get_phones_notification_body_list_model.dart';
class WorkListApiClient {
static final WorkListApiClient _instance = WorkListApiClient._internal();

@ -1,7 +1,7 @@
import 'package:permission_handler/permission_handler.dart';
class AppPermissions{
static location(Function(bool) completion) {
static void location(Function(bool) completion) {
Permission.location.isGranted.then((isGranted){
if(!isGranted){
Permission.location.request().then((granted){
@ -13,7 +13,7 @@ class AppPermissions{
}
static checkAll(Function(bool) completion){
static void checkAll(Function(bool) completion){
[
Permission.location
].request().then((value){

@ -61,7 +61,7 @@ class DateUtil {
static String convertDateToString(DateTime date) {
const start = "/Date(";
const end = "+0300)";
const end = "+0300)/";
int milliseconds = date.millisecondsSinceEpoch;
return start + "$milliseconds" + end;
@ -133,7 +133,7 @@ class DateUtil {
/// get month by
/// [month] convert month number in to month name
static getMonth(int month) {
static String getMonth(int month) {
switch (month) {
case 1:
return "January";
@ -159,12 +159,14 @@ class DateUtil {
return "November";
case 12:
return "December";
default:
return "";
}
}
/// get month by
/// [month] convert month number in to month name in Arabic
static getMonthArabic(int month) {
static String getMonthArabic(int month) {
switch (month) {
case 1:
return "يناير";
@ -190,10 +192,12 @@ class DateUtil {
return " نوفمبر";
case 12:
return "ديسمبر";
default:
return "";
}
}
static getMonthByName(String month) {
static int getMonthByName(String month) {
switch (month.toLowerCase()) {
case 'january':
return 1;
@ -219,6 +223,8 @@ class DateUtil {
return 11;
case 'december':
return 12;
default:
return 0;
}
}
@ -234,7 +240,7 @@ class DateUtil {
/// get month by
/// [weekDay] convert week day in int to week day name
static getWeekDay(int weekDay) {
static String getWeekDay(int weekDay) {
switch (weekDay) {
case 1:
return "Monday";
@ -250,12 +256,14 @@ class DateUtil {
return "Saturday ";
case 7:
return "Sunday";
default:
return "";
}
}
/// get month by
/// [weekDay] convert week day in int to week day name arabic
static getWeekDayArabic(int weekDay) {
static String getWeekDayArabic(int weekDay) {
switch (weekDay) {
case 1:
return "الاثنين";
@ -271,10 +279,12 @@ class DateUtil {
return "السبت ";
case 7:
return "الاحد";
default:
return "";
}
}
static getWeekDayEnglish(int weekDay) {
static String getWeekDayEnglish(int weekDay) {
switch (weekDay) {
case 1:
return "Monday";
@ -290,6 +300,8 @@ class DateUtil {
return "Saturday ";
case 7:
return "Sunday";
default:
return "";
}
}
@ -415,7 +427,7 @@ class DateUtil {
return DateFormat(formattedString).format(dateTime);
}
static convertISODateToJsonDate(String isoDate) {
static String convertISODateToJsonDate(String isoDate) {
return "/Date(" + DateFormat('mm-dd-yyy').parse(isoDate).millisecondsSinceEpoch.toString() + ")/";
}

@ -1,16 +1,24 @@
import 'dart:convert';
import 'dart:typed_data';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/config/routes.dart';
// import 'package:fluttertoast/fluttertoast.dart';
import 'package:mohem_flutter_app/exceptions/api_exception.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart';
import 'package:mohem_flutter_app/widgets/loading_dialog.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sizer/sizer.dart';
class Utils {
static bool _isLoadingVisible = false;
@ -118,12 +126,30 @@ class Utils {
);
}
static getPostBytes(img) {
static Widget getNoDataWidget(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SvgPicture.asset('assets/images/not_found.svg', width: 110.0, height: 110.0),
Container(margin: const EdgeInsets.only(top: 15.0), child: LocaleKeys.noDataAvailable.tr().toText16().center),
],
).center;
}
static Uint8List getPostBytes(img) {
try {
var b64 = img.replaceFirst('data:image/png;base64,', '');
if (img != null && Utils.isBase64(b64)) return Utils.dataFromBase64String(b64);
} catch (e) {}
return null;
return Uint8List.fromList([]);
}
static String getBase64FromJpeg(img) {
try {
var b64 = img.replaceFirst('data:image/jpeg;base64,', '');
return b64;
} catch (e) {}
return "";
}
static bool isBase64(String str) {
@ -134,4 +160,38 @@ class Utils {
static Uint8List dataFromBase64String(String base64String) {
return base64Decode(base64String);
}
static Widget tableColumnTitle(String? text, {bool showDivider = true, bool alignCenter = false}) {
text ??= "";
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
6.height,
alignCenter ? text.toText12().center : text.toText12(),
5.height,
if (showDivider)
const Divider(
height: 1,
color: Color(0xff2E303A),
thickness: 1,
)
],
);
}
static Widget tableColumnValue(String text, {bool isCapitable = true, bool alignCenter = false}) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
12.height,
if (alignCenter)
(isCapitable ? text.toLowerCase().capitalizeFirstofEach : text).toText12(color: MyColors.normalTextColor).center
else
(isCapitable ? text.toLowerCase().capitalizeFirstofEach : text).toText12(color: MyColors.normalTextColor),
12.height,
],
);
}
}

@ -12,6 +12,7 @@ import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_screen.dart';
import 'package:mohem_flutter_app/ui/payslip/monthly_pay_slip_screen.dart';
import 'package:mohem_flutter_app/ui/profile/basic_details.dart';
import 'package:mohem_flutter_app/ui/profile/contact_details.dart';
import 'package:mohem_flutter_app/ui/profile/delete_familyMember.dart';
@ -19,11 +20,16 @@ import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_addre
import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart';
import 'package:mohem_flutter_app/ui/profile/family_members.dart';
import 'package:mohem_flutter_app/ui/profile/personal_info.dart';
import 'package:mohem_flutter_app/ui/screens/announcements/announcement_details.dart';
import 'package:mohem_flutter_app/ui/screens/announcements/announcements.dart';
// import 'package:mohem_flutter_app/ui/my_attendance/work_from_home_screen.dart';
import 'package:mohem_flutter_app/ui/screens/eit/add_eit.dart';
import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_home.dart';
import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart';
import 'package:mohem_flutter_app/ui/screens/mowadhafhi/request_details.dart';
import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions.dart';
import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions_details.dart';
import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart';
import 'package:mohem_flutter_app/ui/screens/submenu_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart';
@ -31,8 +37,6 @@ import 'package:mohem_flutter_app/ui/work_list/itg_detail_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/work_list_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_detail_screen.dart';
import '../ui/screens/mowadhafhi/mowadhafhi_home.dart';
class AppRoutes {
static const String splash = "/splash";
static const String registerSelection = "/registerSelection";
@ -84,6 +88,17 @@ class AppRoutes {
static const String mowadhafhiDetails = "/mowadhafhiDetails";
static const String mowadhafhiHRRequest = "/mowadhafhiHRRequest";
// Pending Transactions
static const String pendingTransactions = "/pendingTransactions";
static const String pendingTransactionsDetails = "/pendingTransactionsDetails";
// Announcements
static const String announcements = "/announcements";
static const String announcementsDetails = "/announcementsDetails";
//Pay slip
static const String monthlyPaySlip = "/monthlyPaySlip";
static final Map<String, WidgetBuilder> routes = {
login: (context) => LoginScreen(),
verifyLogin: (context) => VerifyLoginScreen(),
@ -132,5 +147,14 @@ class AppRoutes {
mowadhafhi: (context) => MowadhafhiHome(),
mowadhafhiDetails: (context) => MowadhafhiRequestDetails(),
mowadhafhiHRRequest: (context) => MowadhafhiHRRequest(),
pendingTransactions: (context) => PendingTransactions(),
pendingTransactionsDetails: (context) => PendingTransactionsDetails(),
announcements: (context) => Announcements(),
announcementsDetails: (context) => AnnouncementDetails(),
//pay slip
monthlyPaySlip: (context) => MonthlyPaySlipScreen(),
};
}

@ -218,12 +218,12 @@ class OtpDialog {
}
}
static getSignature() async {
// if (Platform.isAndroid) {
// return await SmsRetriever.getAppSignature();
// } else {
// return null;
// }
}
// static getSignature() async {
// // if (Platform.isAndroid) {
// // return await SmsRetriever.getAppSignature();
// // } else {
// // return null;
// // }
// }
}

@ -23,11 +23,12 @@ extension EmailValidator on String {
Widget toText11({Color? color, bool isUnderLine = false, bool isBold = false}) => Text(
this,
style: TextStyle(
fontSize: 11,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
color: color ?? MyColors.darkTextColor,
letterSpacing: -0.33,
decoration: isUnderLine ? TextDecoration.underline : null),
fontSize: 11,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
color: color ?? MyColors.darkTextColor,
letterSpacing: -0.33,
decoration: isUnderLine ? TextDecoration.underline : null,
),
);
Widget toText12({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0}) => Text(
@ -35,11 +36,12 @@ extension EmailValidator on String {
textAlign: isCenter ? TextAlign.center : null,
maxLines: (maxLine > 0) ? maxLine : null,
style: TextStyle(
fontSize: 12,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
color: color ?? MyColors.darkTextColor,
letterSpacing: -0.72,
decoration: isUnderLine ? TextDecoration.underline : null),
fontSize: 12,
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
color: color ?? MyColors.darkTextColor,
letterSpacing: -0.72,
decoration: isUnderLine ? TextDecoration.underline : null,
),
);
Widget toText13({Color? color, bool isUnderLine = false}) => Text(
@ -52,7 +54,7 @@ extension EmailValidator on String {
style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 14, letterSpacing: -0.48, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
);
Widget toText16({Color? color, bool isBold = false,int? maxlines}) => Text(
Widget toText16({Color? color, bool isBold = false, int? maxlines}) => Text(
this,
maxLines: maxlines,
style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 16, letterSpacing: -0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
@ -131,7 +133,7 @@ extension EmailValidator on String {
return "${dates[2]} ${getMonth(int.parse(dates[1]))} ${dates[0]} ${DateFormat('hh:mm a').format(DateFormat('hh:mm:ss').parse(time))}";
}
getMonth(int month) {
String getMonth(int month) {
switch (month) {
case 1:
return "January";
@ -157,6 +159,8 @@ extension EmailValidator on String {
return "November";
case 12:
return "December";
default:
return "";
}
}
}

@ -21,8 +21,8 @@ extension WidgetExtensions on Widget {
baseColor: Color(0xffe8eff0),
highlightColor: Colors.white,
child: Container(
child: this,
color: Colors.white,
child: this,
),
)
: Container(

@ -267,6 +267,18 @@ class CodegenLoader extends AssetLoader{
"writeComment": "أكتب تعليقا",
"approversList": "قائمة الموافقين",
"yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات",
"monthlyPaySlip": "قسيمة الراتب الشهرية",
"particular": "خاص",
"earnings": "أرباح",
"deductions": "الخصومات",
"paymentMethodName": "اسم طريقة الدفع",
"bankName": "اسم البنك",
"branchCode": "رمز الفرع",
"accountNo": "رقم الحساب",
"summaryOfInformation": "ملخص المعلومات",
"totalPayAmount": "المبلغ الإجمالي للدفع",
"paymentInformation": "معلومات الدفع",
"amount": "مقدار",
"profile": {
"reset_password": {
"label": "Reset Password",
@ -289,14 +301,6 @@ class CodegenLoader extends AssetLoader{
"many": "You clicked {} times!",
"other": "You clicked {} times!"
},
"amount": {
"zero": "Your amount : {} ",
"one": "Your amount : {} ",
"two": "Your amount : {} ",
"few": "Your amount : {} ",
"many": "Your amount : {} ",
"other": "Your amount : {} "
},
"gender": {
"male": "Hi man ;) ",
"female": "Hello girl :)",
@ -561,6 +565,18 @@ static const Map<String,dynamic> en_US = {
"writeComment": "Write a comment",
"approversList": "Approvers List",
"yourRequestHasBeenSubmittedForApprovals": "Your request has been submitted for approvals",
"monthlyPaySlip": "Monthly Pay Slip",
"particular": "Particular",
"earnings": "Earnings",
"deductions": "Deductions",
"paymentMethodName": "Payment Method Name",
"bankName": "Bank Name",
"branchCode": "Branch Code",
"accountNo": "Account No",
"summaryOfInformation": "Summary of Information",
"totalPayAmount": "Total Pay Amount",
"paymentInformation": "Payment Information",
"amount": "Amount",
"profile": {
"reset_password": {
"label": "Reset Password",
@ -583,14 +599,6 @@ static const Map<String,dynamic> en_US = {
"many": "You clicked {} times!",
"other": "You clicked {} times!"
},
"amount": {
"zero": "Your amount : {} ",
"one": "Your amount : {} ",
"two": "Your amount : {} ",
"few": "Your amount : {} ",
"many": "Your amount : {} ",
"other": "Your amount : {} "
},
"gender": {
"male": "Hi man ;) ",
"female": "Hello girl :)",

@ -252,6 +252,18 @@ abstract class LocaleKeys {
static const writeComment = 'writeComment';
static const approversList = 'approversList';
static const yourRequestHasBeenSubmittedForApprovals = 'yourRequestHasBeenSubmittedForApprovals';
static const monthlyPaySlip = 'monthlyPaySlip';
static const particular = 'particular';
static const earnings = 'earnings';
static const deductions = 'deductions';
static const paymentMethodName = 'paymentMethodName';
static const bankName = 'bankName';
static const branchCode = 'branchCode';
static const accountNo = 'accountNo';
static const summaryOfInformation = 'summaryOfInformation';
static const totalPayAmount = 'totalPayAmount';
static const paymentInformation = 'paymentInformation';
static const amount = 'amount';
static const profile_reset_password_label = 'profile.reset_password.label';
static const profile_effectiveDate = 'profile.effectiveDate';
static const profile_country = 'profile.country';
@ -267,7 +279,6 @@ abstract class LocaleKeys {
static const profile_familyDetails = 'profile.familyDetails';
static const profile = 'profile';
static const clicked = 'clicked';
static const amount = 'amount';
static const gender_with_arg = 'gender.with_arg';
static const gender = 'gender';
static const reset_locale = 'reset_locale';

@ -5,20 +5,16 @@ import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/generated/codegen_loader.g.dart';
import 'package:mohem_flutter_app/models/post_params_model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/provider/eit_provider_model.dart';
import 'package:mohem_flutter_app/theme/app_theme.dart';
import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart';
import 'package:month_year_picker/month_year_picker.dart';
import 'package:nfc_manager/nfc_manager.dart';
import 'package:nfc_manager/platform_tags.dart';
import 'package:provider/provider.dart';
import 'package:sizer/sizer.dart';
import 'config/routes.dart';
var logger = Logger(
// filter: null, // Use the default LogFilter (-> only log in debug mode)
printer: PrettyPrinter(lineLength: 0), // Use the PrettyPrinter to format and print log
@ -68,22 +64,17 @@ class MyApp extends StatelessWidget {
builder: (context, orientation, deviceType) {
print(AppState().postParamsObject?.toJson());
var obj = AppState().postParamsObject;
obj?.languageID = EasyLocalization
.of(context)
?.locale
.languageCode == "ar" ? 1 : 2;
obj?.languageID = EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2;
AppState().setPostParamsModel(obj!);
List<LocalizationsDelegate> delegates = context.localizationDelegates;
// delegates.add(GlobalMaterialLocalizations.delegate);
delegates.add(MonthYearPickerLocalizations.delegate,);
// delegates.add(GlobalMaterialLocalizations.delegate);
delegates.add(
MonthYearPickerLocalizations.delegate,
);
return MaterialApp(
theme: AppTheme.getTheme(EasyLocalization
.of(context)
?.locale
.languageCode == "ar"),
theme: AppTheme.getTheme(EasyLocalization.of(context)?.locale.languageCode == "ar"),
debugShowCheckedModeBanner: false,
localizationsDelegates
:delegates,
localizationsDelegates: delegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
initialRoute: AppRoutes.initialRoute,

@ -1,9 +1,9 @@
class GET_EIT_Transactions_Model {
class GetEitTransactionsModel {
List<CollectionTransaction>? collectionTransaction;
GET_EIT_Transactions_Model({this.collectionTransaction});
GetEitTransactionsModel({this.collectionTransaction});
GET_EIT_Transactions_Model.fromJson(Map<String, dynamic> json) {
GetEitTransactionsModel.fromJson(Map<String, dynamic> json) {
if (json['Collection_Transaction'] != null) {
collectionTransaction = <CollectionTransaction>[];
json['Collection_Transaction'].forEach((v) {

@ -1,5 +1,12 @@
import 'package:mohem_flutter_app/models/add_att_success_list_model.dart';
import 'package:mohem_flutter_app/models/add_attachment_list_model.dart';
import 'package:mohem_flutter_app/models/basic_member_information_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_accrual_balances_list_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_open_missing_swipes_list_model.dart';
import 'package:mohem_flutter_app/models/dashboard/get_open_notifications_list.dart';
import 'package:mohem_flutter_app/models/dashboard/list_menu.dart';
import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart';
import 'package:mohem_flutter_app/models/get_absence_collection_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/get_action_history_list_model.dart';
import 'package:mohem_flutter_app/models/get_approves_list_model.dart';
@ -15,6 +22,7 @@ import 'package:mohem_flutter_app/models/get_employee_phones_model.dart';
import 'package:mohem_flutter_app/models/get_item_creation_ntf_body_list_model.dart';
import 'package:mohem_flutter_app/models/get_mo_Item_history_list_model.dart';
import 'package:mohem_flutter_app/models/get_mo_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart';
import 'package:mohem_flutter_app/models/get_notification_buttons_list_model.dart';
import 'package:mohem_flutter_app/models/get_po_Item_history_list_model.dart';
import 'package:mohem_flutter_app/models/get_po_notification_body_list_model.dart';
@ -23,7 +31,13 @@ import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.
import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart';
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
import 'package:mohem_flutter_app/models/member_login_list_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_deductions_List_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_earnings_list_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_pay_slip_list_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_payment_information_list_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_summary_of_payment_list_model.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_department_sections.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_project_departments.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_projects.dart';
@ -34,6 +48,9 @@ import 'package:mohem_flutter_app/models/mowadhafhi/get_ticket_types.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart';
import 'package:mohem_flutter_app/models/notification_action_model.dart';
import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart';
import 'package:mohem_flutter_app/models/pending_transactions/get_pending_transactions_details.dart';
import 'package:mohem_flutter_app/models/pending_transactions/get_req_functions.dart';
import 'package:mohem_flutter_app/models/privilege_list_model.dart';
import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart';
import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart';
import 'package:mohem_flutter_app/models/profile/get_address_dff_structure_list.dart';
@ -55,17 +72,6 @@ import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_bod
import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart';
import 'package:mohem_flutter_app/models/worklist_response_model.dart';
import 'basic_member_information_model.dart';
import 'dashboard/get_accrual_balances_list_model.dart';
import 'dashboard/get_attendance_tracking_list_model.dart';
import 'dashboard/get_open_missing_swipes_list_model.dart';
import 'dashboard/get_open_notifications_list.dart';
import 'dashboard/list_menu.dart';
import 'dashboard/menu_entries.dart';
import 'get_mobile_login_info_list_model.dart';
import 'member_information_list_model.dart';
import 'privilege_list_model.dart';
class GenericResponseModel {
String? date;
int? languageID;
@ -143,12 +149,12 @@ class GenericResponseModel {
GetContactNotificationBodyList? getContactNotificationBodyList;
List<GetCountriesListModel>? getCountriesList;
List<GetDayHoursTypeDetailsList>? getDayHoursTypeDetailsList;
List<String>? getDeductionsList;
List<GetDeductionsList>? getDeductionsList;
GetDefaultValueList? getDefaultValueList;
List<GetEitCollectionNotificationBodyList>? getEITCollectionNotificationBodyList;
List<GetEITDFFStructureList>? getEITDFFStructureList;
List<GetEITTransactionList>? getEITTransactionList;
List<String>? getEarningsList;
List<GetEarningsList>? getEarningsList;
List<GetEmployeeAddressList>? getEmployeeAddressList;
List<GetEmployeeBasicDetailsList>? getEmployeeBasicDetailsList;
List<GetEmployeeContactsList>? getEmployeeContactsList;
@ -172,10 +178,11 @@ class GenericResponseModel {
List<String>? getOpenNotificationsNumList;
List<String>? getOpenPeriodDatesList;
List<String>? getOrganizationsSalariesList;
List<String>? getPaymentInformationList;
List<String>? getPayslipList;
List<String>? getPendingReqDetailsList;
List<String>? getPendingReqFunctionsList;
List<GetPaymentInformationList>? getPaymentInformationList;
List<GetPayslipList>? getPayslipList;
// List<String>? getPendingReqDetailsList;
// List<String>? getPendingReqFunctionsList;
List<String>? getPerformanceAppraisalList;
List<GetPhonesNotificationBodyList>? getPhonesNotificationBodyList;
List<GetPoItemHistoryList>? getPoItemHistoryList;
@ -194,7 +201,7 @@ class GenericResponseModel {
List<String>? getSubordinatesAttdStatusList;
List<SubordinatesLeavesList>? getSubordinatesLeavesList;
List<String>? getSubordinatesLeavesTotalVacationsList;
List<String>? getSummaryOfPaymentList;
List<GetSummaryOfPaymentList>? getSummaryOfPaymentList;
List<String>? getSwipesList;
List<String>? getTermColsStructureList;
List<String>? getTermDffStructureList;
@ -208,6 +215,8 @@ class GenericResponseModel {
List<GetMowadhafhiProjects>? getMowadhafhiProjects;
List<GetProjectDepartments>? getProjectDepartments;
List<GetDepartmentSections>? getDepartmentSections;
List<GetPendingTransactionsFunctions>? getPendingTransactionsFunctions;
List<GetPendingTransactionsDetails>? getPendingTransactionsDetails;
List<String>? getUserItemTypesList;
List<String>? getVacationRulesList;
List<String>? getVaccinationOnHandList;
@ -435,8 +444,8 @@ class GenericResponseModel {
this.getOrganizationsSalariesList,
this.getPaymentInformationList,
this.getPayslipList,
this.getPendingReqDetailsList,
this.getPendingReqFunctionsList,
// this.getPendingReqDetailsList,
// this.getPendingReqFunctionsList,
this.getPerformanceAppraisalList,
this.getPhonesNotificationBodyList,
this.getPoItemHistoryList,
@ -469,6 +478,8 @@ class GenericResponseModel {
this.getMowadhafhiProjects,
this.getProjectDepartments,
this.getDepartmentSections,
this.getPendingTransactionsFunctions,
this.getPendingTransactionsDetails,
this.getUserItemTypesList,
this.getVacationRulesList,
this.getVaccinationOnHandList,
@ -736,7 +747,13 @@ class GenericResponseModel {
getDayHoursTypeDetailsList!.add(new GetDayHoursTypeDetailsList.fromJson(v));
});
}
getDeductionsList = json['GetDeductionsList'];
if (json['GetDeductionsList'] != null) {
getDeductionsList = <GetDeductionsList>[];
json['GetDeductionsList'].forEach((v) {
getDeductionsList!.add(new GetDeductionsList.fromJson(v));
});
}
getDefaultValueList = json['GetDefaultValueList'] != null ? GetDefaultValueList.fromJson(json['GetDefaultValueList']) : null;
getEITCollectionNotificationBodyList = json["GetEITCollectionNotificationBodyList"] == null
? null
@ -753,7 +770,13 @@ class GenericResponseModel {
getEITTransactionList!.add(new GetEITTransactionList.fromJson(v));
});
}
getEarningsList = json['GetEarningsList'];
if (json['GetEarningsList'] != null) {
getEarningsList = <GetEarningsList>[];
json['GetEarningsList'].forEach((v) {
getEarningsList!.add(new GetEarningsList.fromJson(v));
});
}
if (json['GetEmployeeAddressList'] != null) {
getEmployeeAddressList = <GetEmployeeAddressList>[];
json['GetEmployeeAddressList'].forEach((v) {
@ -822,10 +845,22 @@ class GenericResponseModel {
getOpenNotificationsNumList = json['GetOpenNotificationsNumList'];
getOpenPeriodDatesList = json['GetOpenPeriodDatesList'];
getOrganizationsSalariesList = json['GetOrganizationsSalariesList'];
getPaymentInformationList = json['GetPaymentInformationList'];
getPayslipList = json['GetPayslipList'];
getPendingReqDetailsList = json['GetPendingReqDetailsList'];
getPendingReqFunctionsList = json['GetPendingReqFunctionsList'];
if (json['GetPaymentInformationList'] != null) {
getPaymentInformationList = <GetPaymentInformationList>[];
json['GetPaymentInformationList'].forEach((v) {
getPaymentInformationList!.add(new GetPaymentInformationList.fromJson(v));
});
}
if (json['GetPayslipList'] != null) {
getPayslipList = <GetPayslipList>[];
json['GetPayslipList'].forEach((v) {
getPayslipList!.add(new GetPayslipList.fromJson(v));
});
}
// getPendingReqDetailsList = json['GetPendingReqDetailsList'];
// getPendingReqFunctionsList = json['GetPendingReqFunctionsList'];
getPerformanceAppraisalList = json['GetPerformanceAppraisalList'];
getPhonesNotificationBodyList =
json["GetPhonesNotificationBodyList"] == null ? null : List<GetPhonesNotificationBodyList>.from(json["GetPhonesNotificationBodyList"].map((x) => GetPhonesNotificationBodyList.fromJson(x)));
@ -879,7 +914,12 @@ class GenericResponseModel {
}
getSubordinatesLeavesTotalVacationsList = json['GetSubordinatesLeavesTotalVacationsList'];
getSummaryOfPaymentList = json['GetSummaryOfPaymentList'];
if (json['GetSummaryOfPaymentList'] != null) {
getSummaryOfPaymentList = <GetSummaryOfPaymentList>[];
json['GetSummaryOfPaymentList'].forEach((v) {
getSummaryOfPaymentList!.add(new GetSummaryOfPaymentList.fromJson(v));
});
}
getSwipesList = json['GetSwipesList'];
getTermColsStructureList = json['GetTermColsStructureList'];
getTermDffStructureList = json['GetTermDffStructureList'];
@ -948,6 +988,20 @@ class GenericResponseModel {
});
}
if (json['GetPendingReqFunctionsList'] != null) {
getPendingTransactionsFunctions = <GetPendingTransactionsFunctions>[];
json['GetPendingReqFunctionsList'].forEach((v) {
getPendingTransactionsFunctions!.add(new GetPendingTransactionsFunctions.fromJson(v));
});
}
if (json['GetPendingReqDetailsList'] != null) {
getPendingTransactionsDetails = <GetPendingTransactionsDetails>[];
json['GetPendingReqDetailsList'].forEach((v) {
getPendingTransactionsDetails!.add(new GetPendingTransactionsDetails.fromJson(v));
});
}
getUserItemTypesList = json['GetUserItemTypesList'];
getVacationRulesList = json['GetVacationRulesList'];
getVaccinationOnHandList = json['GetVaccinationOnHandList'];
@ -1236,7 +1290,10 @@ class GenericResponseModel {
if (this.getDayHoursTypeDetailsList != null) {
data['GetDayHoursTypeDetailsList'] = this.getDayHoursTypeDetailsList!.map((v) => v.toJson()).toList();
}
data['GetDeductionsList'] = this.getDeductionsList;
if (this.getDeductionsList != null) {
data['GetDeductionsList'] = this.getDeductionsList!.map((v) => v.toJson()).toList();
}
if (this.getDefaultValueList != null) {
data['GetDefaultValueList'] = this.getDefaultValueList!.toJson();
}
@ -1247,7 +1304,10 @@ class GenericResponseModel {
if (this.getEITTransactionList != null) {
data['GetEITTransactionList'] = this.getEITTransactionList!.map((v) => v.toJson()).toList();
}
data['GetEarningsList'] = this.getEarningsList;
if (this.getEarningsList != null) {
data['GetEarningsList'] = this.getEarningsList!.map((v) => v.toJson()).toList();
}
if (this.getEmployeeAddressList != null) {
data['GetEmployeeAddressList'] = this.getEmployeeAddressList!.map((v) => v.toJson()).toList();
}
@ -1292,10 +1352,14 @@ class GenericResponseModel {
data['GetOpenNotificationsNumList'] = this.getOpenNotificationsNumList;
data['GetOpenPeriodDatesList'] = this.getOpenPeriodDatesList;
data['GetOrganizationsSalariesList'] = this.getOrganizationsSalariesList;
data['GetPaymentInformationList'] = this.getPaymentInformationList;
data['GetPayslipList'] = this.getPayslipList;
data['GetPendingReqDetailsList'] = this.getPendingReqDetailsList;
data['GetPendingReqFunctionsList'] = this.getPendingReqFunctionsList;
if (this.getPaymentInformationList != null) {
data['GetPaymentInformationList'] = this.getPaymentInformationList!.map((v) => v.toJson()).toList();
}
if (this.getPayslipList != null) {
data['GetPayslipList'] = this.getPayslipList!.map((v) => v.toJson()).toList();
}
// data['GetPendingReqDetailsList'] = this.getPendingReqDetailsList;
// data['GetPendingReqFunctionsList'] = this.getPendingReqFunctionsList;
data['GetPerformanceAppraisalList'] = this.getPerformanceAppraisalList;
data['GetPhonesNotificationBodyList'] = this.getPhonesNotificationBodyList;
if (this.getPoItemHistoryList != null) {
@ -1336,7 +1400,9 @@ class GenericResponseModel {
}
data['GetSubordinatesLeavesTotalVacationsList'] = this.getSubordinatesLeavesTotalVacationsList;
data['GetSummaryOfPaymentList'] = this.getSummaryOfPaymentList;
if (this.getSummaryOfPaymentList != null) {
data['GetSummaryOfPaymentList'] = this.getSummaryOfPaymentList!.map((v) => v.toJson()).toList();
}
data['GetSwipesList'] = this.getSwipesList;
data['GetTermColsStructureList'] = this.getTermColsStructureList;
data['GetTermDffStructureList'] = this.getTermDffStructureList;

@ -1,4 +1,3 @@
class GetAbsenceCollectionNotificationBodyList {
List<CollectionNotificationAbsence>? collectionNotification;
@ -16,8 +15,7 @@ class GetAbsenceCollectionNotificationBodyList {
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.collectionNotification != null) {
data['Collection_Notification'] =
this.collectionNotification!.map((v) => v.toJson()).toList();
data['Collection_Notification'] = this.collectionNotification!.map((v) => v.toJson()).toList();
}
return data;
}
@ -42,20 +40,20 @@ class CollectionNotificationAbsence {
CollectionNotificationAbsence(
{this.aCTION,
this.aPPLICATIONCOLUMNNAME,
this.dATATYPE,
this.dATEVALUE,
this.dESCFLEXCONTEXTCODE,
this.dESCFLEXNAME,
this.dISPLAYFLAG,
this.nUMBERVALUE,
this.pREVSEGMENTVALUEDSP,
this.sEGMENTNAME,
this.sEGMENTPROMPT,
this.sEGMENTSEQNUM,
this.sEGMENTVALUEDSP,
this.tRANSACTIONNUMBER,
this.vARCHAR2VALUE});
this.aPPLICATIONCOLUMNNAME,
this.dATATYPE,
this.dATEVALUE,
this.dESCFLEXCONTEXTCODE,
this.dESCFLEXNAME,
this.dISPLAYFLAG,
this.nUMBERVALUE,
this.pREVSEGMENTVALUEDSP,
this.sEGMENTNAME,
this.sEGMENTPROMPT,
this.sEGMENTSEQNUM,
this.sEGMENTVALUEDSP,
this.tRANSACTIONNUMBER,
this.vARCHAR2VALUE});
CollectionNotificationAbsence.fromJson(Map<String, dynamic> json) {
aCTION = json['ACTION'];
@ -94,4 +92,4 @@ class CollectionNotificationAbsence {
data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE;
return data;
}
}
}

@ -0,0 +1,72 @@
class GetAnnouncementDetails {
String? titleEN;
String? titleAR;
String? emailBodyEN;
String? emailBodyAR;
String? bodyEN;
String? bodyAR;
String? bannerImage;
String? rowID;
String? awarenessName;
String? created;
String? publishedDesc;
String? published;
String? twoLanguageTemplateDesc;
String? wFStatus;
String? totalItems;
GetAnnouncementDetails(
{this.titleEN,
this.titleAR,
this.emailBodyEN,
this.emailBodyAR,
this.bodyEN,
this.bodyAR,
this.bannerImage,
this.rowID,
this.awarenessName,
this.created,
this.publishedDesc,
this.published,
this.twoLanguageTemplateDesc,
this.wFStatus,
this.totalItems});
GetAnnouncementDetails.fromJson(Map<String, dynamic> json) {
titleEN = json['Title_EN'];
titleAR = json['Title_AR'];
emailBodyEN = json['EmailBody_EN'];
emailBodyAR = json['EmailBody_AR'];
bodyEN = json['Body_EN'];
bodyAR = json['Body_AR'];
bannerImage = json['Banner_Image'];
rowID = json['rowID'];
awarenessName = json['awarenessName'];
created = json['created'];
publishedDesc = json['PublishedDesc'];
published = json['Published'];
twoLanguageTemplateDesc = json['TwoLanguageTemplateDesc'];
wFStatus = json['WFStatus'];
totalItems = json['TotalItems'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Title_EN'] = this.titleEN;
data['Title_AR'] = this.titleAR;
data['EmailBody_EN'] = this.emailBodyEN;
data['EmailBody_AR'] = this.emailBodyAR;
data['Body_EN'] = this.bodyEN;
data['Body_AR'] = this.bodyAR;
data['Banner_Image'] = this.bannerImage;
data['rowID'] = this.rowID;
data['awarenessName'] = this.awarenessName;
data['created'] = this.created;
data['PublishedDesc'] = this.publishedDesc;
data['Published'] = this.published;
data['TwoLanguageTemplateDesc'] = this.twoLanguageTemplateDesc;
data['WFStatus'] = this.wFStatus;
data['TotalItems'] = this.totalItems;
return data;
}
}

@ -0,0 +1,72 @@
class GetAnnouncementsObject {
String? titleEN;
String? titleAR;
String? bannerImage;
String? rowID;
String? awarenessName;
String? created;
String? publishedDesc;
String? published;
String? twoLanguageTemplateDesc;
String? wFStatus;
String? totalItems;
String? emailBodyEN;
String? emailBodyAR;
String? bodyEN;
String? bodyAR;
GetAnnouncementsObject(
{this.titleEN,
this.titleAR,
this.bannerImage,
this.rowID,
this.awarenessName,
this.created,
this.publishedDesc,
this.published,
this.twoLanguageTemplateDesc,
this.wFStatus,
this.totalItems,
this.emailBodyEN,
this.emailBodyAR,
this.bodyEN,
this.bodyAR});
GetAnnouncementsObject.fromJson(Map<String, dynamic> json) {
titleEN = json['Title_EN'];
titleAR = json['Title_AR'];
bannerImage = json['Banner_Image'];
rowID = json['rowID'];
awarenessName = json['awarenessName'];
created = json['created'];
publishedDesc = json['PublishedDesc'];
published = json['Published'];
twoLanguageTemplateDesc = json['TwoLanguageTemplateDesc'];
wFStatus = json['WFStatus'];
totalItems = json['TotalItems'];
emailBodyEN = json['EmailBody_EN'];
emailBodyAR = json['EmailBody_AR'];
bodyEN = json['Body_EN'];
bodyAR = json['Body_AR'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Title_EN'] = this.titleEN;
data['Title_AR'] = this.titleAR;
data['Banner_Image'] = this.bannerImage;
data['rowID'] = this.rowID;
data['awarenessName'] = this.awarenessName;
data['created'] = this.created;
data['PublishedDesc'] = this.publishedDesc;
data['Published'] = this.published;
data['TwoLanguageTemplateDesc'] = this.twoLanguageTemplateDesc;
data['WFStatus'] = this.wFStatus;
data['TotalItems'] = this.totalItems;
data['EmailBody_EN'] = this.emailBodyEN;
data['EmailBody_AR'] = this.emailBodyAR;
data['Body_EN'] = this.bodyEN;
data['Body_AR'] = this.bodyAR;
return data;
}
}

@ -0,0 +1,36 @@
class GetDeductionsList {
int? aMOUNT;
String? eLEMENTNAME;
int? fROMROWNUM;
int? nOOFROWS;
int? rOWNUM;
int? tOROWNUM;
GetDeductionsList(
{this.aMOUNT,
this.eLEMENTNAME,
this.fROMROWNUM,
this.nOOFROWS,
this.rOWNUM,
this.tOROWNUM});
GetDeductionsList.fromJson(Map<String, dynamic> json) {
aMOUNT = json['AMOUNT'];
eLEMENTNAME = json['ELEMENT_NAME'];
fROMROWNUM = json['FROM_ROW_NUM'];
nOOFROWS = json['NO_OF_ROWS'];
rOWNUM = json['ROW_NUM'];
tOROWNUM = json['TO_ROW_NUM'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['AMOUNT'] = this.aMOUNT;
data['ELEMENT_NAME'] = this.eLEMENTNAME;
data['FROM_ROW_NUM'] = this.fROMROWNUM;
data['NO_OF_ROWS'] = this.nOOFROWS;
data['ROW_NUM'] = this.rOWNUM;
data['TO_ROW_NUM'] = this.tOROWNUM;
return data;
}
}

@ -0,0 +1,36 @@
class GetEarningsList {
int? aMOUNT;
String? eLEMENTNAME;
int? fROMROWNUM;
int? nOOFROWS;
int? rOWNUM;
int? tOROWNUM;
GetEarningsList(
{this.aMOUNT,
this.eLEMENTNAME,
this.fROMROWNUM,
this.nOOFROWS,
this.rOWNUM,
this.tOROWNUM});
GetEarningsList.fromJson(Map<String, dynamic> json) {
aMOUNT = json['AMOUNT'];
eLEMENTNAME = json['ELEMENT_NAME'];
fROMROWNUM = json['FROM_ROW_NUM'];
nOOFROWS = json['NO_OF_ROWS'];
rOWNUM = json['ROW_NUM'];
tOROWNUM = json['TO_ROW_NUM'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['AMOUNT'] = this.aMOUNT;
data['ELEMENT_NAME'] = this.eLEMENTNAME;
data['FROM_ROW_NUM'] = this.fROMROWNUM;
data['NO_OF_ROWS'] = this.nOOFROWS;
data['ROW_NUM'] = this.rOWNUM;
data['TO_ROW_NUM'] = this.tOROWNUM;
return data;
}
}

@ -0,0 +1,36 @@
class GetPayslipList {
int? aCTIONCONTEXTID;
String? pAYMENTDATE;
String? pAYSLIPCHOICE;
String? pERIODENDDATE;
String? pERIODNAME;
String? pERIODSTARTDATE;
GetPayslipList(
{this.aCTIONCONTEXTID,
this.pAYMENTDATE,
this.pAYSLIPCHOICE,
this.pERIODENDDATE,
this.pERIODNAME,
this.pERIODSTARTDATE});
GetPayslipList.fromJson(Map<String, dynamic> json) {
aCTIONCONTEXTID = json['ACTION_CONTEXT_ID'];
pAYMENTDATE = json['PAYMENT_DATE'];
pAYSLIPCHOICE = json['PAYSLIP_CHOICE'];
pERIODENDDATE = json['PERIOD_END_DATE'];
pERIODNAME = json['PERIOD_NAME'];
pERIODSTARTDATE = json['PERIOD_START_DATE'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ACTION_CONTEXT_ID'] = this.aCTIONCONTEXTID;
data['PAYMENT_DATE'] = this.pAYMENTDATE;
data['PAYSLIP_CHOICE'] = this.pAYSLIPCHOICE;
data['PERIOD_END_DATE'] = this.pERIODENDDATE;
data['PERIOD_NAME'] = this.pERIODNAME;
data['PERIOD_START_DATE'] = this.pERIODSTARTDATE;
return data;
}
}

@ -0,0 +1,32 @@
class GetPaymentInformationList {
String? aCCOUNTNUMBER;
String? aMOUNT;
String? bANKNAME;
String? bRANCHNAME;
String? pAYMENTMETHODNAME;
GetPaymentInformationList(
{this.aCCOUNTNUMBER,
this.aMOUNT,
this.bANKNAME,
this.bRANCHNAME,
this.pAYMENTMETHODNAME});
GetPaymentInformationList.fromJson(Map<String, dynamic> json) {
aCCOUNTNUMBER = json['ACCOUNT_NUMBER'];
aMOUNT = json['AMOUNT'];
bANKNAME = json['BANK_NAME'];
bRANCHNAME = json['BRANCH_NAME'];
pAYMENTMETHODNAME = json['PAYMENT_METHOD_NAME'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ACCOUNT_NUMBER'] = this.aCCOUNTNUMBER;
data['AMOUNT'] = this.aMOUNT;
data['BANK_NAME'] = this.bANKNAME;
data['BRANCH_NAME'] = this.bRANCHNAME;
data['PAYMENT_METHOD_NAME'] = this.pAYMENTMETHODNAME;
return data;
}
}

@ -0,0 +1,36 @@
class GetSummaryOfPaymentList {
int? tOTALDEDUCTIONSAMOUNT;
int? tOTALDEDUCTIONSPERCENTAGE;
int? tOTALEARNINGSAMOUNT;
int? tOTALEARNINGSPERCENTAGE;
int? tOTALPAYAMOUNT;
int? tOTALPAYPERCENTAGE;
GetSummaryOfPaymentList(
{this.tOTALDEDUCTIONSAMOUNT,
this.tOTALDEDUCTIONSPERCENTAGE,
this.tOTALEARNINGSAMOUNT,
this.tOTALEARNINGSPERCENTAGE,
this.tOTALPAYAMOUNT,
this.tOTALPAYPERCENTAGE});
GetSummaryOfPaymentList.fromJson(Map<String, dynamic> json) {
tOTALDEDUCTIONSAMOUNT = json['TOTAL_DEDUCTIONS_AMOUNT'];
tOTALDEDUCTIONSPERCENTAGE = json['TOTAL_DEDUCTIONS_PERCENTAGE'];
tOTALEARNINGSAMOUNT = json['TOTAL_EARNINGS_AMOUNT'];
tOTALEARNINGSPERCENTAGE = json['TOTAL_EARNINGS_PERCENTAGE'];
tOTALPAYAMOUNT = json['TOTAL_PAY_AMOUNT'];
tOTALPAYPERCENTAGE = json['TOTAL_PAY_PERCENTAGE'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['TOTAL_DEDUCTIONS_AMOUNT'] = this.tOTALDEDUCTIONSAMOUNT;
data['TOTAL_DEDUCTIONS_PERCENTAGE'] = this.tOTALDEDUCTIONSPERCENTAGE;
data['TOTAL_EARNINGS_AMOUNT'] = this.tOTALEARNINGSAMOUNT;
data['TOTAL_EARNINGS_PERCENTAGE'] = this.tOTALEARNINGSPERCENTAGE;
data['TOTAL_PAY_AMOUNT'] = this.tOTALPAYAMOUNT;
data['TOTAL_PAY_PERCENTAGE'] = this.tOTALPAYPERCENTAGE;
return data;
}
}

@ -0,0 +1,56 @@
class GetPendingTransactionsDetails {
String? cREATIONDATE;
int? fROMROWNUM;
String? iTEMKEY;
int? nOOFROWS;
String? rEQUESTTYPE;
int? rOWNUM;
int? tOROWNUM;
String? tRANSACTIONCREATEDFOR;
int? tRANSACTIONID;
String? tRANSACTIONINITIATOR;
String? uSERFUNCTIONNAME;
GetPendingTransactionsDetails(
{this.cREATIONDATE,
this.fROMROWNUM,
this.iTEMKEY,
this.nOOFROWS,
this.rEQUESTTYPE,
this.rOWNUM,
this.tOROWNUM,
this.tRANSACTIONCREATEDFOR,
this.tRANSACTIONID,
this.tRANSACTIONINITIATOR,
this.uSERFUNCTIONNAME});
GetPendingTransactionsDetails.fromJson(Map<String, dynamic> json) {
cREATIONDATE = json['CREATION_DATE'];
fROMROWNUM = json['FROM_ROW_NUM'];
iTEMKEY = json['ITEM_KEY'];
nOOFROWS = json['NO_OF_ROWS'];
rEQUESTTYPE = json['REQUEST_TYPE'];
rOWNUM = json['ROW_NUM'];
tOROWNUM = json['TO_ROW_NUM'];
tRANSACTIONCREATEDFOR = json['TRANSACTION_CREATED_FOR'];
tRANSACTIONID = json['TRANSACTION_ID'];
tRANSACTIONINITIATOR = json['TRANSACTION_INITIATOR'];
uSERFUNCTIONNAME = json['USER_FUNCTION_NAME'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['CREATION_DATE'] = this.cREATIONDATE;
data['FROM_ROW_NUM'] = this.fROMROWNUM;
data['ITEM_KEY'] = this.iTEMKEY;
data['NO_OF_ROWS'] = this.nOOFROWS;
data['REQUEST_TYPE'] = this.rEQUESTTYPE;
data['ROW_NUM'] = this.rOWNUM;
data['TO_ROW_NUM'] = this.tOROWNUM;
data['TRANSACTION_CREATED_FOR'] = this.tRANSACTIONCREATEDFOR;
data['TRANSACTION_ID'] = this.tRANSACTIONID;
data['TRANSACTION_INITIATOR'] = this.tRANSACTIONINITIATOR;
data['USER_FUNCTION_NAME'] = this.uSERFUNCTIONNAME;
return data;
}
}

@ -0,0 +1,22 @@
class GetPendingTransactionsFunctions {
int? fUNCTIONID;
String? fUNCTIONNAME;
String? fUNCTIONPROMPT;
GetPendingTransactionsFunctions(
{this.fUNCTIONID, this.fUNCTIONNAME, this.fUNCTIONPROMPT});
GetPendingTransactionsFunctions.fromJson(Map<String, dynamic> json) {
fUNCTIONID = json['FUNCTION_ID'];
fUNCTIONNAME = json['FUNCTION_NAME'];
fUNCTIONPROMPT = json['FUNCTION_PROMPT'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['FUNCTION_ID'] = this.fUNCTIONID;
data['FUNCTION_NAME'] = this.fUNCTIONNAME;
data['FUNCTION_PROMPT'] = this.fUNCTIONPROMPT;
return data;
}
}

@ -11,7 +11,6 @@ import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart';
import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart';
import 'package:mohem_flutter_app/models/dashboard/menus.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/widgets/Updater.dart';
/// Mix-in [DiagnosticableTreeMixin] to have access to [debugFillProperties] for the devtool
// ignore: prefer_mixin
@ -71,7 +70,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
return ((hour * 60 * 60) + (mints * 60) + seconds);
}
update(context) {
void update(context) {
fetchAttendanceTracking(context);
// isAttendanceTrackingLoading = !isAttendanceTrackingLoading;
// isWorkListLoading = !isWorkListLoading;
@ -137,7 +136,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
}
//List Menu API's & Methods
fetchListMenu() async {
void fetchListMenu() async {
try {
GenericResponseModel? genericResponseModel = await DashboardApiClient().getListMenu();
Map<String, String> map = {};
@ -156,7 +155,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
}
//Menu Entries API's & Methods
fetchMenuEntries() async {
void fetchMenuEntries() async {
try {
GenericResponseModel? genericResponseModel = await DashboardApiClient().getGetMenuEntries();
getMenuEntriesList = genericResponseModel!.getMenuEntriesList;

@ -3,7 +3,7 @@ import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/theme/colors.dart';
class AppTheme {
static getTheme(isArabic) => ThemeData(
static ThemeData getTheme(isArabic) => ThemeData(
fontFamily: isArabic ? 'Cairo' : 'Poppins',
primarySwatch: Colors.red,
visualDensity: VisualDensity.adaptivePlatformDensity,

@ -1,27 +1,23 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutter/scheduler.dart';
import 'package:intl/intl.dart';
import 'package:mohem_flutter_app/api/monthlyAttendance_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_day_hours_type_details_list_model.dart';
import 'package:mohem_flutter_app/models/get_schedule_shifts_details_list_model.dart';
import 'package:mohem_flutter_app/models/get_time_card_summary_list_model.dart';
import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart';
import 'package:provider/provider.dart';
import 'package:syncfusion_flutter_calendar/calendar.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:flutter/cupertino.dart';
import 'package:pie_chart/pie_chart.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart';
import 'package:month_year_picker/month_year_picker.dart';
import 'package:month_picker_dialog/month_picker_dialog.dart';
import 'package:pie_chart/pie_chart.dart';
import 'package:syncfusion_flutter_calendar/calendar.dart';
class MonthlyAttendance extends StatefulWidget {
MonthlyAttendance({Key? key}) : super(key: key);
@ -32,6 +28,8 @@ class MonthlyAttendance extends StatefulWidget {
}
}
// todo '@fatima' use extension methods for widgets
class _MonthlyAttendanceState extends State<MonthlyAttendance> {
bool isPresent = false;
bool isAbsent = false;
@ -69,7 +67,6 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
}
}
Future getScheduleShiftsDetails(index, pRTPID) async {
try {
Utils.showLoading(context);
@ -430,7 +427,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
);
}
calendarTapped(CalendarTapDetails details) async {
void calendarTapped(CalendarTapDetails details) async {
dynamic index = details.date?.day;
if (index != null) {
index = index - 1;
@ -458,8 +455,8 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
maxChildSize: 0.9,
expand: false,
builder: (_, controller) {
dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE;
DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss a").parse(dmyString);
dynamic dmyString = getScheduleShiftsDetailsList!.sCHEDULEDATE;
DateTime dateTime1 = DateFormat("MM/dd/yyyy hh:mm:ss a").parse(dmyString);
return Column(
children: [
Container(
@ -485,11 +482,11 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(child:
"${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white),
Container(
child: "${DateFormat("MMMM-dd-yyyy").format(dateTime1).replaceAll('-', " ")}".toText24(isBold: true, color: Colors.white),
).paddingOnly(top: 26, left: 21, right: 21),
Container(
child: LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.greyACColor).paddingOnly(left: 21,bottom: 16),
child: LocaleKeys.attendanceDetails.tr().toText16(color: MyColors.greyACColor).paddingOnly(left: 21, bottom: 16),
),
Center(
child: CircularStepProgressBar(
@ -540,8 +537,8 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
color: MyColors.grey67Color,
),
8.height,
"${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" !=""
? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true)
"${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}" != ""
? "${getScheduleShiftsDetailsList!.sHTACTUALSTARTTIME}".toText22(color: Colors.black, isBold: true)
: "__".toText22(color: Colors.black, isBold: true),
],
),
@ -555,7 +552,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
),
8.height,
"${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}" != ""
? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true)
? "${getScheduleShiftsDetailsList!.sHTACTUALENDTIME}".toText22(color: Colors.black, isBold: true)
: "__".toText22(color: Colors.black, isBold: true),
],
),
@ -579,9 +576,9 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
color: MyColors.grey67Color,
),
8.height,
"${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" !=""
? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true)
:"__".toText22(color: MyColors.greenColor, isBold: true),
"${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}" != ""
? "${getScheduleShiftsDetailsList!.aPPROVEDSTARTTIME}".toText22(color: MyColors.greenColor, isBold: true)
: "__".toText22(color: MyColors.greenColor, isBold: true),
],
),
),
@ -593,9 +590,9 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
color: MyColors.grey67Color,
),
8.height,
"${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}"!= ""
? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true)
:"__".toText22(color: MyColors.greenColor, isBold: true),
"${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}" != ""
? "${getScheduleShiftsDetailsList!.aPPROVEDENDTIME}".toText22(color: MyColors.greenColor, isBold: true)
: "__".toText22(color: MyColors.greenColor, isBold: true),
],
),
],
@ -693,7 +690,7 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
return meetings;
}
static getMonth(int month) {
static String getMonth(int month) {
switch (month) {
case 1:
return "January";
@ -719,36 +716,40 @@ class _MonthlyAttendanceState extends State<MonthlyAttendance> {
return "November";
case 12:
return "December";
default:
return "";
}
}
static getMonthAr(int month){
switch (month) {
case 1:
return 'يناير';
case 2:
return ' فبراير';
case 3:
return 'مارس';
case 4:
return 'أبريل';
case 5:
return 'مايو';
case 6:
return 'يونيو';
case 7:
return 'يوليو';
case 8:
return 'أغسطس';
case 9:
return 'سبتمبر';
case 10:
return ' اكتوبر';
case 11:
return ' نوفمبر';
case 12:
return 'ديسمبر';
}
static String getMonthAr(int month) {
switch (month) {
case 1:
return 'يناير';
case 2:
return ' فبراير';
case 3:
return 'مارس';
case 4:
return 'أبريل';
case 5:
return 'مايو';
case 6:
return 'يونيو';
case 7:
return 'يوليو';
case 8:
return 'أغسطس';
case 9:
return 'سبتمبر';
case 10:
return ' اكتوبر';
case 11:
return ' نوفمبر';
case 12:
return 'ديسمبر';
default:
return "";
}
}
}

@ -50,275 +50,342 @@ class _DashboardScreenState extends State<DashboardScreen> {
List<String> namesD = ["Nostalgia Perfume Perfume", "Al Nafoura", "AlJadi", "Nostalgia Perfume"];
final GlobalKey<ScaffoldState> _key = GlobalKey(); //
return Scaffold(
key: _scaffoldState,
body: Column(
children: [
Row(
children: [
Builder(builder: (context) {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
CircularAvatar(
width: 34,
height: 34,
url: "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png",
key: _scaffoldState,
body: Column(
children: [
Row(
children: [
Builder(builder: (context) {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
CircularAvatar(
width: 34,
height: 34,
url: "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png",
),
8.width,
SvgPicture.asset("assets/images/side_nav.svg"),
],
).onPress(() {
_scaffoldState.currentState!.openDrawer();
});
}),
Expanded(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
//AppLogo(),
8.width,
LocaleKeys.mohemm.tr().toText14()
],
),
),
SizedBox(
width: 36,
height: 36,
child: Stack(
alignment: Alignment.centerLeft,
children: [
SvgPicture.asset("assets/images/announcements.svg"),
Positioned(
right: 0,
top: 0,
child: Container(
padding: const EdgeInsets.only(left: 5, right: 5),
decoration: BoxDecoration(color: MyColors.redColor, borderRadius: BorderRadius.circular(17)),
child: "3".toText12(color: Colors.white),
),
8.width,
SvgPicture.asset("assets/images/side_nav.svg"),
],
).onPress(() {
_scaffoldState.currentState!.openDrawer();
});
}),
Expanded(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
//AppLogo(),
8.width,
LocaleKeys.mohemm.tr().toText14()
],
),
)
],
),
SizedBox(
width: 36,
height: 36,
child: Stack(
alignment: Alignment.centerLeft,
).onPress(() async {
await Navigator.pushNamed(context, AppRoutes.announcements);
})
],
).paddingOnly(left: 21, right: 21, top: 48, bottom: 7),
Expanded(
child: SingleChildScrollView(
child: Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SvgPicture.asset("assets/images/announcements.svg"),
Positioned(
right: 0,
top: 0,
child: Container(
padding: const EdgeInsets.only(left: 5, right: 5),
decoration: BoxDecoration(color: MyColors.redColor, borderRadius: BorderRadius.circular(17)),
child: "3".toText12(color: Colors.white),
),
)
],
),
).onPress(() {
data.update(context);
})
],
).paddingOnly(left: 21, right: 21, top: 48, bottom: 7),
Expanded(
child: SingleChildScrollView(
child: Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.goodMorning.tr().toText14(color: MyColors.grey77Color),
"Mahmoud Shrouf".toText24(isBold: true),
16.height,
Row(
children: [
Expanded(
child: AspectRatio(
aspectRatio: 159 / 159,
child: Consumer<DashboardProviderModel>(
builder: (context, model, child) {
return (model.isAttendanceTrackingLoading
? GetAttendanceTrackingShimmer()
: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
gradient: const LinearGradient(transform: GradientRotation(.46), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [
MyColors.gradiantEndColor,
MyColors.gradiantStartColor,
]),
),
child: Stack(
alignment: Alignment.center,
children: [
if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true),
if (model.isTimeRemainingInSeconds == 0) "01-02-2022".toText12(color: Colors.white),
if (model.isTimeRemainingInSeconds != 0)
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
9.height,
CountdownTimer(
endTime: model.endTime,
onEnd: null,
endWidget: "00:00:00".toText14(color: Colors.white, isBold: true),
textStyle: TextStyle(color: Colors.white, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.bold),
),
LocaleKeys.timeLeftToday.tr().toText12(color: Colors.white),
9.height,
ClipRRect(
borderRadius: BorderRadius.all(
Radius.circular(20),
),
child: LinearProgressIndicator(
value: model.progress,
minHeight: 8,
valueColor: const AlwaysStoppedAnimation<Color>(Colors.white),
backgroundColor: const Color(0xff196D73),
),
),
],
),
],
).paddingOnly(top: 12, right: 15, left: 12),
),
Row(
LocaleKeys.goodMorning.tr().toText14(color: MyColors.grey77Color),
"Mahmoud Shrouf".toText24(isBold: true),
16.height,
Row(
children: [
Expanded(
child: AspectRatio(
aspectRatio: 159 / 159,
child: Consumer<DashboardProviderModel>(
builder: (context, model, child) {
return (model.isAttendanceTrackingLoading
? GetAttendanceTrackingShimmer()
: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
gradient: const LinearGradient(transform: GradientRotation(.46), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [
MyColors.gradiantEndColor,
MyColors.gradiantStartColor,
]),
),
child: Stack(
alignment: Alignment.center,
children: [
if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Column(
LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true),
if (model.isTimeRemainingInSeconds == 0) "01-02-2022".toText12(color: Colors.white),
if (model.isTimeRemainingInSeconds != 0)
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.checkIn.tr().toText12(color: Colors.white),
(model.attendanceTracking!.pSwipeIn == null ? "--:--" : model.attendanceTracking!.pSwipeIn)
.toString()
.toText14(color: Colors.white, isBold: true),
4.height,
9.height,
CountdownTimer(
endTime: model.endTime,
onEnd: null,
endWidget: "00:00:00".toText14(color: Colors.white, isBold: true),
textStyle: TextStyle(color: Colors.white, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.bold),
),
LocaleKeys.timeLeftToday.tr().toText12(color: Colors.white),
9.height,
ClipRRect(
borderRadius: BorderRadius.all(
Radius.circular(20),
),
child: LinearProgressIndicator(
value: model.progress,
minHeight: 8,
valueColor: const AlwaysStoppedAnimation<Color>(Colors.white),
backgroundColor: const Color(0xff196D73),
),
),
],
).paddingOnly(left: 12),
),
Container(
width: 45,
height: 45,
padding: const EdgeInsets.only(left: 14, right: 14),
decoration: const BoxDecoration(
color: Color(0xff259EA4),
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(15),
),
),
child: SvgPicture.asset(model.isTimeRemainingInSeconds == 0 ? "assets/images/play.svg" : "assets/images/stop.svg"),
),
],
),
],
),
],
),
).onPress(() {
Navigator.pushNamed(context, AppRoutes.todayAttendance);
}))
.animatedSwither();
},
),
).paddingOnly(top: 12, right: 15, left: 12),
),
Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.checkIn.tr().toText12(color: Colors.white),
(model.attendanceTracking!.pSwipeIn == null ? "--:--" : model.attendanceTracking!.pSwipeIn)
.toString()
.toText14(color: Colors.white, isBold: true),
4.height,
],
).paddingOnly(left: 12),
),
Container(
width: 45,
height: 45,
padding: const EdgeInsets.only(left: 14, right: 14),
decoration: const BoxDecoration(
color: Color(0xff259EA4),
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(15),
),
),
child: SvgPicture.asset(model.isTimeRemainingInSeconds == 0 ? "assets/images/play.svg" : "assets/images/stop.svg"),
),
],
),
],
),
],
),
).onPress(() {
Navigator.pushNamed(context, AppRoutes.todayAttendance);
}))
.animatedSwither();
},
),
),
9.width,
Expanded(
child: MenusWidget(),
),
],
),
],
).paddingOnly(left: 21, right: 21, top: 7),
ServicesWidget(),
8.height,
Container(
width: double.infinity,
padding: EdgeInsets.only(top: 31),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)),
border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
),
9.width,
Expanded(
child: MenusWidget(),
),
],
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
LocaleKeys.offers.tr().toText12(),
Row(
children: [
LocaleKeys.discounts.tr().toText24(isBold: true),
6.width,
Container(
padding: const EdgeInsets.only(left: 8, right: 8),
decoration: BoxDecoration(
color: MyColors.yellowColor,
borderRadius: BorderRadius.circular(10),
),
child: LocaleKeys.newString.tr().toText10(isBold: true)),
],
),
],
),
),
LocaleKeys.viewAllOffers.tr().toText12(isUnderLine: true),
],
).paddingOnly(left: 21, right: 21),
SizedBox(
height: 103 + 33,
child: ListView.separated(
shrinkWrap: true,
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.only(left: 21, right: 21, top: 13),
scrollDirection: Axis.horizontal,
itemBuilder: (cxt, index) {
return SizedBox(
width: 73,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 73,
height: 73,
],
).paddingOnly(left: 21, right: 21, top: 7),
ServicesWidget(),
8.height,
Container(
width: double.infinity,
padding: EdgeInsets.only(top: 31),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)),
border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
LocaleKeys.offers.tr().toText12(),
Row(
children: [
LocaleKeys.discounts.tr().toText24(isBold: true),
6.width,
Container(
padding: const EdgeInsets.only(left: 8, right: 8),
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(
Radius.circular(100),
),
border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
color: MyColors.yellowColor,
borderRadius: BorderRadius.circular(10),
),
child: ClipRRect(
borderRadius: const BorderRadius.all(
Radius.circular(50),
),
child: Image.network(
"https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo",
fit: BoxFit.cover,
),
child: LocaleKeys.newString.tr().toText10(isBold: true)),
],
),
],
),
),
LocaleKeys.viewAllOffers.tr().toText12(isUnderLine: true),
],
).paddingOnly(left: 21, right: 21),
SizedBox(
height: 103 + 33,
child: ListView.separated(
shrinkWrap: true,
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.only(left: 21, right: 21, top: 13),
scrollDirection: Axis.horizontal,
itemBuilder: (cxt, index) {
return SizedBox(
width: 73,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 73,
height: 73,
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(
Radius.circular(100),
),
border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
),
4.height,
Expanded(
child: namesD[6 % (index + 1)].toText12(isCenter: true, maxLine: 2),
child: ClipRRect(
borderRadius: const BorderRadius.all(
Radius.circular(50),
),
child: Image.network(
"https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo",
fit: BoxFit.cover,
),
),
],
),
);
},
separatorBuilder: (cxt, index) => 8.width,
itemCount: 6),
),
],
),
)
],
),
),
4.height,
Expanded(
child: namesD[6 % (index + 1)].toText12(isCenter: true, maxLine: 2),
),
],
),
);
},
separatorBuilder: (cxt, index) => 8.width,
itemCount: 6),
),
],
),
)
],
),
),
)
],
),
drawer: SafeArea(
child: AppDrawer(),
),
bottomNavigationBar: BottomNavigationBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Padding(
padding: const EdgeInsets.all(4.0),
child: SvgPicture.asset(
"assets/icons/home.svg",
width: 20,
height: 20,
),
)
],
),
label: 'Home',
),
BottomNavigationBarItem(
icon: Padding(
padding: const EdgeInsets.all(4.0),
child: SvgPicture.asset(
"assets/icons/create_req.svg",
width: 20,
height: 20,
),
),
label: 'Create Request',
),
BottomNavigationBarItem(
icon: Padding(
padding: const EdgeInsets.all(4.0),
child: SvgPicture.asset(
"assets/icons/work_list.svg",
width: 20,
height: 20,
),
),
label: 'Work List',
),
BottomNavigationBarItem(
icon: Padding(
padding: const EdgeInsets.all(4.0),
child: SvgPicture.asset(
"assets/icons/item_for_sale.svg",
width: 20,
height: 20,
),
),
label: 'Items for Sale',
),
],
currentIndex: 0,
selectedLabelStyle: TextStyle(
fontSize: 8,
color: Color(0xff989898),
fontWeight: FontWeight.w600,
),
unselectedLabelStyle: TextStyle(
fontSize: 8,
color: Color(0xff989898),
fontWeight: FontWeight.w600,
),
drawer: SafeArea(child: AppDrawer()));
type: BottomNavigationBarType.fixed,
selectedItemColor: Colors.black,
backgroundColor: Color(0xffF8F8F8),
onTap: (v) {},
),
);
}
}

@ -13,15 +13,14 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart';
import 'package:mohem_flutter_app/widgets/location/Location.dart';
import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart';
import 'package:nfc_manager/nfc_manager.dart';
import 'package:provider/provider.dart';
import 'package:wifi_iot/wifi_iot.dart';
import '../../provider/dashboard_provider_model.dart';
import '../../widgets/location/Location.dart';
class TodayAttendanceScreen extends StatefulWidget {
TodayAttendanceScreen({Key? key}) : super(key: key);

@ -12,39 +12,58 @@ class _AppDrawerState extends State<AppDrawer> {
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: Drawer(
child: Column(children: <Widget>[
const SizedBox(
height: 200,
),
Expanded(
child: ListView(padding: const EdgeInsets.all(21), physics: const BouncingScrollPhysics(), children: [
const Divider(),
InkWell(
child: const DrawerItem(
'My Profile',
icon: Icons.person,
color: Colors.grey,
),
onTap: () {
drawerNavigator(context, AppRoutes.profile);
}),
const Divider(),
InkWell(
child: const DrawerItem(
'Mowadhafhi',
icon: Icons.person,
color: Colors.grey,
),
onTap: () {
drawerNavigator(context, AppRoutes.mowadhafhi);
})
]))
])));
color: Colors.white,
child: Drawer(
child: Column(
children: <Widget>[
const SizedBox(
height: 200,
),
Expanded(
child: ListView(
padding: const EdgeInsets.all(21),
physics: const BouncingScrollPhysics(),
children: [
const Divider(),
InkWell(
child: const DrawerItem(
'My Profile',
icon: Icons.person,
color: Colors.grey,
),
onTap: () {
drawerNavigator(context, AppRoutes.profile);
}),
const Divider(),
InkWell(
child: const DrawerItem(
'Mowadhafhi',
icon: Icons.person,
color: Colors.grey,
),
onTap: () {
drawerNavigator(context, AppRoutes.mowadhafhi);
}),
const Divider(),
InkWell(
child: const DrawerItem(
'Pending Transactions',
icon: Icons.person,
color: Colors.grey,
),
onTap: () {
drawerNavigator(context, AppRoutes.pendingTransactions);
})
],
),
)
],
),
),
);
}
drawerNavigator(context, routeName) {
void drawerNavigator(context, routeName) {
Navigator.of(context).pushNamed(routeName);
}
}

@ -1,7 +1,6 @@
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
@ -9,6 +8,7 @@ import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart';
import 'package:provider/provider.dart';
@ -109,17 +109,19 @@ class ServicesWidget extends StatelessWidget {
void handleOnPress(context, GetMenuEntriesList menuEntry) {
var pro = Provider.of<DashboardProviderModel>(context, listen: false);
List<GetMenuEntriesList>? menuList = pro.getMenuEntriesList?.where((element) => element.parentMenuName == menuEntry.menuName && element.menuEntryType == "FUNCTION").toList();
List<GetMenuEntriesList> menuList = pro.getMenuEntriesList?.where((element) => element.parentMenuName == menuEntry.menuName && element.menuEntryType == "FUNCTION").toList() ?? [];
menuEntry.icon = "";
print(menuEntry.toJson());
Navigator.pushNamed(context, AppRoutes.myAttendance, arguments: menuList ?? []);
return;
if (menuEntry.menuName == "HMG_OTL_SS" || menuEntry.menuName == "HMG_PT_OTL_SS") {
Navigator.pushNamed(context, AppRoutes.myAttendance);
if (menuList.isEmpty) {
if (menuEntry.requestType == "EIT") {
Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(menuEntry.prompt!, menuEntry.functionName!));
} else if (menuEntry.requestType == "PAYSLIP") {
Navigator.pushNamed(context, AppRoutes.monthlyPaySlip);
}
} else {
Utils.showToast("In Progress");
Navigator.pushNamed(context, AppRoutes.myAttendance, arguments: menuList);
}
return;
}
String firstWord(String value) {

@ -120,29 +120,32 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
}
void getDefaultValues(GetEITDFFStructureList structureList) async {
if ((structureList.cHILDSEGMENTSDVSplited?.length ?? 0) < 1) {
return;
}
try {
Utils.showLoading(context);
Utils.showLoading(context);
for (int i = 0; i < (structureList.cHILDSEGMENTSDVSplited?.length ?? 0); i++) {
String segmentId = structureList.cHILDSEGMENTSDVSplited![i];
GetEITDFFStructureList? reqObj = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId);
List<PARENTSEGMENTSDVSplited> parentRequired = reqObj.pARENTSEGMENTSDVSplited ?? [];
print("segmentId:${segmentId}");
print("segmentName:${structureList.sEGMENTNAME}");
GetEITDFFStructureList? parent = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId);
List<PARENTSEGMENTSDVSplited> parentRequired = parent.pARENTSEGMENTSDVSplited ?? [];
List<GetEITDFFStructureList> filteredList =
getEitDffStructureList!.where((outerElement) => parentRequired.any((element) => outerElement.sEGMENTNAME == element.name && element.isRequired == "REQUIRED")).toList();
List<Map<String, dynamic>> values = filteredList
.map((e) => GetSetValuesRequestModel(
sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME)
.toJson())
.toList();
print("values:${values}");
ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values);
int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId);
getEitDffStructureList![index].eSERVICESDV = defaultValue;
}
Utils.hideLoading(context);
setState(() {});
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
@ -171,7 +174,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
(getEitDffStructureList == null
? const SizedBox()
: (getEitDffStructureList!.isEmpty
? LocaleKeys.noDataAvailable.tr().toText16().center
? Utils.getNoDataWidget(context)
: ListView.separated(
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(21),
@ -205,9 +208,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
isReadOnly: model.rEADONLY == "Y",
onChange: (text) {
model.fieldAnswer = text;
if (model.eSERVICESDV == null) {
model.eSERVICESDV = ESERVICESDV();
}
model.eSERVICESDV ??= ESERVICESDV();
model.eSERVICESDV!.pIDCOLUMNNAME = text;
},
).paddingOnly(bottom: 12);
@ -219,19 +220,18 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
isInputTypeNum: true,
onChange: (text) {
model.fieldAnswer = text;
if (model.eSERVICESDV == null) {
model.eSERVICESDV = ESERVICESDV();
}
model.eSERVICESDV ??= ESERVICESDV();
model.eSERVICESDV!.pIDCOLUMNNAME = text;
},
).paddingOnly(bottom: 12);
} else if (model.fORMATTYPE == "X") {
String displayText = model.eSERVICESDV?.pIDCOLUMNNAME ?? (getEitDffStructureList![index].fieldAnswer ?? "");
if (getEitDffStructureList![index].isDefaultTypeIsCDPS) {
if (displayText.contains(" 00:00:00")) {
displayText = displayText.replaceAll(" 00:00:00", "");
}
if (!displayText.contains("-")) {
if (displayText.contains("/")) {
displayText = DateFormat('yyyy-MM-dd').format(DateFormat("yyyy/MM/dd").parse(displayText));
}
}
@ -267,9 +267,12 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
}
getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {});
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model);
}
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
getDefaultValues(model);
}
},
).paddingOnly(bottom: 12);
} else if (model.fORMATTYPE == "Y") {
@ -294,7 +297,12 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
if (tempDate.contains("00:00:00")) {
tempDate = tempDate.replaceAll("00:00:00", '').trim();
}
selectedDate = DateFormat("yyyy/MM/dd").parse(tempDate);
if(tempDate.contains("/")) {
selectedDate = DateFormat("yyyy/MM/dd").parse(tempDate);
} else {
selectedDate = DateFormat("yyyy-MM-dd").parse(tempDate);
}
} else {
selectedDate = DateTime.parse(getEitDffStructureList![index].eSERVICESDV!.pVALUECOLUMNNAME!);
}
@ -319,10 +327,11 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {});
if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model);
}
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
if (getEitDffStructureList![index].isDefaultTypeIsCDPS) {
calGetValueSetValues(model);
} else {}
getDefaultValues(model);
}
},
).paddingOnly(bottom: 12);
@ -348,6 +357,9 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
pVALUECOLUMNNAME: model.eSERVICESVS![popipIndex].vALUECOLUMNNAME);
getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {});
if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model);
}
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
getDefaultValues(model);
}
@ -378,6 +390,9 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
pVALUECOLUMNNAME: model.eSERVICESVS![popipIndex].vALUECOLUMNNAME);
getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {});
if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model);
}
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
getDefaultValues(model);
}
@ -425,9 +440,12 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
pVALUECOLUMNNAME: getEitDffStructureList![index].isDefaultTypeIsCDPS ? DateFormat('yyyy-MM-dd hh:mm:ss').format(date) : DateFormat('yyyy-MM-ddThh:mm:ss.s').format(date));
getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {});
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model);
}
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
getDefaultValues(model);
}
},
).paddingOnly(bottom: 12);
} else if (model.fORMATTYPE == "I") {
@ -452,9 +470,12 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
ESERVICESDV eservicesdv = ESERVICESDV(pIDCOLUMNNAME: time, pRETURNMSG: "null", pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, pVALUECOLUMNNAME: time);
getEitDffStructureList![index].eSERVICESDV = eservicesdv;
setState(() {});
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
if (model.cHILDSEGMENTSVSSplited?.isNotEmpty ?? false) {
calGetValueSetValues(model);
}
if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) {
getDefaultValues(model);
}
},
).paddingOnly(bottom: 12);
}

@ -1,13 +1,10 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/my_attendance_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
@ -47,6 +44,8 @@ class _DynamicListViewScreenState extends State<DynamicListViewScreen> {
getEITTransactionList?.forEach((element) {
element.collectionTransaction = element.collectionTransaction?.where((elemen) => elemen.dISPLAYFLAG == "Y").toList() ?? [];
});
getEITTransactionList = getEITTransactionList?.where((element) => element.collectionTransaction?.isNotEmpty ?? false).toList() ?? [];
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
@ -69,14 +68,11 @@ class _DynamicListViewScreenState extends State<DynamicListViewScreen> {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: dynamicParams!.title,
),
appBar: AppBarWidget(context, title: dynamicParams!.title),
body: getEITTransactionList == null
? const SizedBox()
: (getEITTransactionList!.isEmpty
? LocaleKeys.noDataAvailable.tr().toText16().center
? Utils.getNoDataWidget(context)
: ListView.separated(
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(21),

@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
@ -29,7 +30,7 @@ class MyAttendanceScreen extends StatelessWidget {
width: double.infinity,
height: double.infinity,
child: list.isEmpty
? LocaleKeys.noDataAvailable.tr().toText16().center
? Utils.getNoDataWidget(context)
: Column(
children: [
//commenting this because missing wipe coming as duplicate in the screen

@ -0,0 +1,290 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/monthly_pay_slip_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_deductions_List_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_earnings_list_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_pay_slip_list_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_payment_information_list_model.dart';
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_summary_of_payment_list_model.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
class MonthlyPaySlipScreen extends StatefulWidget {
MonthlyPaySlipScreen({Key? key}) : super(key: key);
@override
_MonthlyPaySlipScreenState createState() {
return _MonthlyPaySlipScreenState();
}
}
class _MonthlyPaySlipScreenState extends State<MonthlyPaySlipScreen> {
List<GetPayslipList> paySlipList = [];
List<GetSummaryOfPaymentList> summaryOfPaymentList = [];
List<GetPaymentInformationList> paymentInformationList = [];
List<GetDeductionsList> deductionList = [];
List<GetEarningsList> earningList = [];
int? selectedMonthIndex;
@override
void initState() {
super.initState();
getData();
}
void getData() async {
try {
Utils.showLoading(context);
paySlipList = await MonthlyPaySlipApiClient().getPaySlip();
if (paySlipList.isNotEmpty) {
selectedMonthIndex = 0;
await getDataByActionContextID(paySlipList[selectedMonthIndex!].aCTIONCONTEXTID!);
}
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
Future getDataByActionContextID(int actionContextID, {bool showLoading = false}) async {
try {
if (showLoading) {
Utils.showLoading(context);
}
List results = await Future.wait([
MonthlyPaySlipApiClient().getSummaryOfPayment(actionContextID),
MonthlyPaySlipApiClient().getPaymentInformation(actionContextID),
MonthlyPaySlipApiClient().getDeductions(actionContextID),
MonthlyPaySlipApiClient().getEarnings(actionContextID),
]);
summaryOfPaymentList = results[0];
paymentInformationList = results[1];
deductionList = results[2];
earningList = results[3];
if (showLoading) {
Utils.hideLoading(context);
setState(() {});
}
} catch (ex) {
if (showLoading) {
Utils.hideLoading(context);
}
Utils.handleException(ex, context, null);
}
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: LocaleKeys.monthlyPaySlip.tr(),
),
body: Column(
children: [
if (selectedMonthIndex != null)
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Container(alignment: Alignment.centerLeft, child: LocaleKeys.month.tr().toText17(isBold: true, color: MyColors.darkIconColor)),
Row(
children: [
DateFormat("MMMM-yyyy").format(DateFormat("MM/dd/yyyy").parse(paySlipList[selectedMonthIndex!].pAYMENTDATE!)).toText16(color: MyColors.greyACColor),
const Icon(Icons.keyboard_arrow_down_rounded, color: MyColors.greyACColor),
],
).onPress(() async {
int tempIndex = selectedMonthIndex!;
showModalBottomSheet(
context: context,
builder: (cxt) {
return Container(
height: 200,
color: Colors.white,
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
LocaleKeys.ok.tr().toText16(color: MyColors.gradiantEndColor).paddingOnly(right: 21, top: 16).onPress(() {
if (selectedMonthIndex != tempIndex) {
selectedMonthIndex = tempIndex;
Navigator.pop(context);
getDataByActionContextID(paySlipList[selectedMonthIndex!].aCTIONCONTEXTID!, showLoading: true);
}
}),
CupertinoPicker(
itemExtent: 40,
onSelectedItemChanged: (index) {
tempIndex = index;
},
children: [for (int i = 0; i < paySlipList.length; i++) paySlipList[i].pERIODNAME!.toText16().center]).expanded,
],
),
);
});
})
],
).paddingOnly(left: 21, right: 21),
ListView(
padding: const EdgeInsets.all(21),
children: [
if (summaryOfPaymentList.isNotEmpty) ...[paymentSummaryData(context)],
if (earningList.isNotEmpty) ...[18.height, earningData(context)],
if (deductionList.isNotEmpty) ...[18.height, deductionData(context)],
if (paymentInformationList.isNotEmpty) ...[12.height, paymentInformationData(context)]
],
).expanded,
],
),
);
}
Widget earningData(context) {
List<TableRow> tableRow = [];
tableRow.add(
TableRow(
children: [
Utils.tableColumnTitle(LocaleKeys.particular.tr()),
Utils.tableColumnTitle(LocaleKeys.amount.tr(), alignCenter: true),
],
),
);
for (int i = 0; i < earningList.length; i++) {
tableRow.add(
TableRow(children: [
Utils.tableColumnValue('${earningList[i].eLEMENTNAME}'),
Utils.tableColumnValue('${earningList[i].aMOUNT}', alignCenter: true),
]),
);
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
LocaleKeys.earnings.tr().toSectionHeading(),
12.height,
Table(
columnWidths: const {0: FlexColumnWidth(1.5), 1: FlexColumnWidth(1.0)},
children: tableRow,
).objectContainerView(),
],
);
}
Widget deductionData(context) {
List<TableRow> tableRow = [];
tableRow.add(
TableRow(
children: [
Utils.tableColumnTitle(LocaleKeys.particular.tr()),
Utils.tableColumnTitle(LocaleKeys.amount.tr(), alignCenter: true),
],
),
);
for (int i = 0; i < deductionList.length; i++) {
tableRow.add(
TableRow(children: [
Utils.tableColumnValue('${deductionList[i].eLEMENTNAME}'),
Utils.tableColumnValue('${deductionList[i].aMOUNT}', alignCenter: true),
]),
);
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
LocaleKeys.deductions.tr().toSectionHeading(),
12.height,
Table(
columnWidths: const {0: FlexColumnWidth(1.5), 1: FlexColumnWidth(1.0)},
children: tableRow,
).objectContainerView(),
],
);
}
Widget paymentSummaryData(context) {
List<TableRow> tableRow = [];
tableRow.add(
TableRow(
children: [
Utils.tableColumnTitle(LocaleKeys.particular.tr()),
Utils.tableColumnTitle("%", alignCenter: true),
Utils.tableColumnTitle(LocaleKeys.amount.tr(), alignCenter: true),
],
),
);
tableRow.add(
TableRow(children: [
Utils.tableColumnValue(LocaleKeys.deductions.tr()),
Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALDEDUCTIONSPERCENTAGE}', alignCenter: true),
Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALDEDUCTIONSAMOUNT}', alignCenter: true),
]),
);
tableRow.add(
TableRow(children: [
Utils.tableColumnValue(LocaleKeys.earnings.tr()),
Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALEARNINGSPERCENTAGE}', alignCenter: true),
Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALEARNINGSAMOUNT}', alignCenter: true),
]),
);
tableRow.add(
TableRow(children: [
Utils.tableColumnValue(LocaleKeys.totalPayAmount.tr()),
Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALPAYPERCENTAGE}', alignCenter: true),
Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALPAYAMOUNT}', alignCenter: true),
]),
);
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
LocaleKeys.summaryOfInformation.tr().toSectionHeading(),
12.height,
Table(
columnWidths: const {0: FlexColumnWidth(2.0), 1: FlexColumnWidth(1.0), 2: FlexColumnWidth(1.0)},
children: tableRow,
).objectContainerView(),
],
);
}
Widget paymentInformationData(context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
LocaleKeys.paymentInformation.tr().toSectionHeading(),
12.height,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
ItemDetailView(LocaleKeys.paymentMethodName.tr(), paymentInformationList[0].pAYMENTMETHODNAME ?? ""),
ItemDetailView(LocaleKeys.bankName.tr(), paymentInformationList[0].bANKNAME ?? ""),
ItemDetailView(LocaleKeys.branchCode.tr(), paymentInformationList[0].bRANCHNAME ?? ""),
ItemDetailView(LocaleKeys.accountNo.tr(), paymentInformationList[0].aCCOUNTNUMBER ?? ""),
ItemDetailView(LocaleKeys.amount.tr(), paymentInformationList[0].aMOUNT ?? ""),
],
).objectContainerView(),
],
);
}
}

@ -41,8 +41,6 @@ class _BasicDetailsState extends State<BasicDetails> {
getEmployeeBasicDetailsList = await ProfileApiClient().getEmployeeBasicDetails();
Utils.hideLoading(context);
basicDetails();
print("getEmployeeBasicDetailsList.length");
print(getEmployeeBasicDetailsList.length);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
@ -50,7 +48,7 @@ class _BasicDetailsState extends State<BasicDetails> {
}
}
basicDetails() {
void basicDetails() {
for (int i = 0; i < getEmployeeBasicDetailsList.length; i++) {
if (getEmployeeBasicDetailsList[i].aPPLICATIONCOLUMNNAME == 'FULL_NAME') {
fullName = getEmployeeBasicDetailsList[i].sEGMENTVALUEDSP;
@ -119,7 +117,7 @@ class _BasicDetailsState extends State<BasicDetails> {
));
}
footer() {
Widget footer() {
return Container(
decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10),
@ -134,7 +132,7 @@ class _BasicDetailsState extends State<BasicDetails> {
);
}
showAlertDialog(BuildContext context) {
void showAlertDialog(BuildContext context) {
Widget cancelButton = TextButton(
child: Text("Cancel"),
onPressed: () {

@ -4,9 +4,7 @@ import 'package:mohem_flutter_app/api/profile_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_employee_address_model.dart';
import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart';
@ -176,7 +174,7 @@ class _ContactDetailsState extends State<ContactDetails> {
])));
}
footer() {
Widget footer() {
return Container(
decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10),

@ -1,20 +1,6 @@
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/profile_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/dialogs/otp_dialog.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart';
import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart';
import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart';
import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
class DeleteFamilyMember extends StatefulWidget {
const DeleteFamilyMember({Key? key}) : super(key: key);
@ -38,7 +24,7 @@ class _DeleteFamilyMemberState extends State<DeleteFamilyMember> {
));
}
footer() {
Widget footer() {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [

@ -128,7 +128,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreenProfile> {
(getBasicDetDffStructureList == null && getBasicDetColsStructureList == null
? const SizedBox()
: (getBasicDetDffStructureList!.isEmpty && getBasicDetColsStructureList!.isEmpty
? LocaleKeys.noDataAvailable.tr().toText16().center
? Utils.getNoDataWidget(context)
: ListView(
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.all(21),

@ -70,7 +70,7 @@ class _DynamicListViewScreenState extends State<DynamicListViewScreen> {
body: getEITTransactionList == null
? const SizedBox()
: (getEITTransactionList!.isEmpty
? LocaleKeys.noDataAvailable.tr().toText16().center
? Utils.getNoDataWidget(context)
: ListView.separated(
physics: const BouncingScrollPhysics(),
padding: EdgeInsets.all(21),

@ -4,15 +4,10 @@ import 'package:mohem_flutter_app/api/profile_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/dialogs/otp_dialog.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart';
import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart';
import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart';
import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart';
import 'package:mohem_flutter_app/ui/screens/profile/profile_screen.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
@ -28,6 +23,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
List<GetEmployeeContactsList> getEmployeeContactsList = [];
int? relationId;
@override
void initState() {
super.initState();
@ -202,7 +198,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
));
}
footer() {
Widget footer() {
return Container(
decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10),
@ -218,7 +214,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
);
}
showUpdateAlertDialog(BuildContext context) {
void showUpdateAlertDialog(BuildContext context) {
Widget cancelButton = TextButton(
child: Text(
LocaleKeys.cancel.tr(),
@ -253,7 +249,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
);
}
showRemoveAlertDialog(BuildContext context, int relationId) {
void showRemoveAlertDialog(BuildContext context, int relationId) {
Widget cancelButton = TextButton(
child: Text(
LocaleKeys.cancel.tr(),

@ -6,7 +6,6 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart';
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
@ -98,7 +97,7 @@ class _PesonalInfoState extends State<PesonalInfo> {
));
}
footer() {
Widget footer() {
return Container(
decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10),

@ -1,17 +1,12 @@
import 'dart:convert';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/profile_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_employee_address_model.dart';
import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart';
import 'package:mohem_flutter_app/models/get_employee_phones_model.dart';
import 'package:mohem_flutter_app/models/profile/phone_number_types_model.dart';
import 'package:mohem_flutter_app/models/profile/submit_phone_transactions.dart';
@ -47,117 +42,121 @@ class _PhoneNumbersState extends State<PhoneNumbers> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBarWidget(
context,
title: LocaleKeys.profile_contactDetails.tr(),
),
backgroundColor: MyColors.backgroundColor,
bottomSheet: footer(),
body: SingleChildScrollView(
child: Column(children: [
Container(
width: double.infinity,
margin: EdgeInsets.only(left: 25, right: 25, top: 25),
padding: EdgeInsets.all(20),
// height: 400,
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10.0), border: Border.all(color: Color.fromARGB(255, 209, 207, 207))),
child: InkWell(
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Icon(
Icons.add,
color: Color(0xff259CB8),
),
Text(
'Add new row',
style: TextStyle(color: Color(0xff259CB8), fontWeight: FontWeight.bold),
)
]),
onTap: () {
addNewRow();
},
appBar: AppBarWidget(
context,
title: LocaleKeys.profile_contactDetails.tr(),
),
backgroundColor: MyColors.backgroundColor,
bottomSheet: footer(),
body: SingleChildScrollView(
child: Column(
children: [
Container(
width: double.infinity,
margin: EdgeInsets.only(left: 25, right: 25, top: 25),
padding: EdgeInsets.all(20),
// height: 400,
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10.0), border: Border.all(color: Color.fromARGB(255, 209, 207, 207))),
child: InkWell(
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Icon(
Icons.add,
color: Color(0xff259CB8),
),
Text(
'Add new row',
style: TextStyle(color: Color(0xff259CB8), fontWeight: FontWeight.bold),
)
]),
onTap: () {
addNewRow();
},
),
),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: widget.getEmployeePhonesList
.map((e) => e.aCTION != 'DELETE_ROW'
? Container(
width: double.infinity,
margin: EdgeInsets.only(
top: 20,
left: 26,
right: 26,
),
padding: EdgeInsets.only(left: 14, right: 14, top: 15, bottom: 15),
// height: 400,
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),
spreadRadius: 5,
blurRadius: 26,
offset: Offset(0, 3),
),
],
color: Colors.white,
borderRadius: BorderRadius.circular(10.0),
),
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
PopupMenuButton(
child: DynamicTextFieldWidget(
"Please Select *",
e.pHONETYPEMEANING ?? "",
isEnable: false,
isPopup: true,
).paddingOnly(bottom: 12),
itemBuilder: (_) => <PopupMenuItem<int>>[
for (int i = 0; i < getPhoneNumberTypesList.length; i++) PopupMenuItem<int>(child: Text(getPhoneNumberTypesList![i].mEANING!), value: i),
],
onSelected: (int index) {
e.pHONETYPEMEANING = getPhoneNumberTypesList[index].mEANING;
e.pHONETYPE = getPhoneNumberTypesList[index].cODE;
setState(() {});
}),
DynamicTextFieldWidget(
"",
e.pHONENUMBER ?? "",
isReadOnly: false,
onChange: (text) {
e.pHONENUMBER = text;
},
).paddingOnly(bottom: 12),
InkWell(
child: Row(mainAxisAlignment: MainAxisAlignment.end, children: [
Icon(
Icons.delete,
color: Colors.red,
size: 18,
),
Text(
'Delete',
style: TextStyle(color: Colors.red, fontWeight: FontWeight.bold),
)
]),
onTap: () {
// widget.getEmployeePhonesList.removeWhere((item) => item.pHONEID == e.pHONEID);
setState(() {
deleteRow(e);
});
},
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: widget.getEmployeePhonesList
.map((e) => e.aCTION != 'DELETE_ROW'
? Container(
width: double.infinity,
margin: EdgeInsets.only(
top: 20,
left: 26,
right: 26,
),
SizedBox(
height: 10,
padding: EdgeInsets.only(left: 14, right: 14, top: 15, bottom: 15),
// height: 400,
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),
spreadRadius: 5,
blurRadius: 26,
offset: Offset(0, 3),
),
],
color: Colors.white,
borderRadius: BorderRadius.circular(10.0),
),
]))
: Container())
.toList()),
SizedBox(
height: 80,
)
])));
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
PopupMenuButton(
child: DynamicTextFieldWidget(
"Please Select *",
e.pHONETYPEMEANING ?? "",
isEnable: false,
isPopup: true,
).paddingOnly(bottom: 12),
itemBuilder: (_) => <PopupMenuItem<int>>[
for (int i = 0; i < getPhoneNumberTypesList.length; i++) PopupMenuItem<int>(child: Text(getPhoneNumberTypesList![i].mEANING!), value: i),
],
onSelected: (int index) {
e.pHONETYPEMEANING = getPhoneNumberTypesList[index].mEANING;
e.pHONETYPE = getPhoneNumberTypesList[index].cODE;
setState(() {});
}),
DynamicTextFieldWidget(
"",
e.pHONENUMBER ?? "",
isReadOnly: false,
onChange: (text) {
e.pHONENUMBER = text;
},
).paddingOnly(bottom: 12),
InkWell(
child: Row(mainAxisAlignment: MainAxisAlignment.end, children: [
Icon(
Icons.delete,
color: Colors.red,
size: 18,
),
Text(
'Delete',
style: TextStyle(color: Colors.red, fontWeight: FontWeight.bold),
)
]),
onTap: () {
// widget.getEmployeePhonesList.removeWhere((item) => item.pHONEID == e.pHONEID);
setState(() {
deleteRow(e);
});
},
),
SizedBox(
height: 10,
),
]))
: Container())
.toList()),
SizedBox(
height: 80,
)
],
),
),
);
}
footer() {
Widget footer() {
return Container(
decoration: BoxDecoration(
color: MyColors.white,

@ -0,0 +1,106 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:mohem_flutter_app/api/pending_transactions_api_client.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/models/get_announcement_details.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
class AnnouncementDetails extends StatefulWidget {
const AnnouncementDetails({Key? key}) : super(key: key);
@override
_AnnouncementDetailsState createState() => _AnnouncementDetailsState();
}
class _AnnouncementDetailsState extends State<AnnouncementDetails> {
String jsonResponse = "";
int currentPageNo = 0;
int rowID = 0;
GetAnnouncementDetails? getAnnouncementDetailsObj;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
getRequestID();
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: "Announcements",
),
body: SingleChildScrollView(
child: Container(
width: double.infinity,
padding: const EdgeInsets.all(10.0),
margin: const EdgeInsets.all(12.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.05),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
width: double.infinity,
height: 150.0,
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Image.memory(
base64Decode(Utils.getBase64FromJpeg(getAnnouncementDetailsObj?.bannerImage)),
fit: BoxFit.cover,
),
),
),
Container(
margin: const EdgeInsets.only(top: 12.0),
child: Html(
data: getAnnouncementDetailsObj?.bodyEN,
),
),
],
),
),
),
);
}
void getRequestID() {
if (currentPageNo == 0) {
final arguments = (ModalRoute.of(context)?.settings.arguments ?? <String, dynamic>{}) as Map;
currentPageNo = arguments["currentPageNo"];
rowID = arguments["rowID"];
getAnnouncementDetails(0, rowID);
}
}
void getAnnouncementDetails(int itgAwarenessID, int itgRowID) async {
try {
Utils.showLoading(context);
jsonResponse = await PendingTransactionsApiClient().getAnnouncements(itgAwarenessID, currentPageNo, itgRowID);
// todo '@haroon' move below post processing code to above method and get exact model which you need,
var jsonDecodedData = jsonDecode(jsonDecode(jsonResponse)['result']['data']);
getAnnouncementDetailsObj = GetAnnouncementDetails.fromJson(jsonDecodedData[0]);
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
}

@ -0,0 +1,168 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/pending_transactions_api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/models/get_announcements.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart';
class Announcements extends StatefulWidget {
const Announcements({Key? key}) : super(key: key);
@override
_AnnouncementsState createState() => _AnnouncementsState();
}
class _AnnouncementsState extends State<Announcements> {
String jsonResponse = "";
int currentPageNo = 1;
int currentOpenIndex = -1;
List<GetAnnouncementsObject> getAnnouncementsObject = [];
List<GetAnnouncementsObject> _foundAnnouncements = [];
TextEditingController searchController = TextEditingController();
@override
void initState() {
getAnnouncements(0, 0);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: "Announcements",
),
body: getAnnouncementsObject.isNotEmpty
? Container(
margin: const EdgeInsets.only(top: 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
12.height,
Container(
margin: const EdgeInsets.fromLTRB(12.0, 0.0, 12.0, 0.0),
child: DynamicTextFieldWidget(
"Search",
"Search Announcements",
isEnable: true,
suffixIconData: Icons.search,
isPopup: false,
lines: 1,
isInputTypeNum: false,
isReadOnly: false,
onChange: (String value) {
_runFilter(value);
},
),
),
12.height,
Expanded(
child: ListView.separated(
physics: const BouncingScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
openAnnouncementsDetails(int.parse(_foundAnnouncements[index].rowID!));
},
child: Container(
width: double.infinity,
padding: const EdgeInsets.all(10.0),
margin: const EdgeInsets.only(left: 12, right: 12, top: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.05),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
width: 80.0,
height: 80.0,
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Image.memory(
base64Decode(Utils.getBase64FromJpeg(_foundAnnouncements[index].bannerImage)),
fit: BoxFit.cover,
),
),
),
12.width,
SizedBox(
height: 80.0,
width: 200.0,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppState().isArabic(context) ? _foundAnnouncements[index].titleAR!.toText13() : getAnnouncementsObject[index].titleEN!.toText13(),
8.height,
_foundAnnouncements[index].created!.toText10(color: MyColors.grey98Color)
],
),
),
],
),
),
);
},
separatorBuilder: (BuildContext context, int index) => 1.height,
itemCount: _foundAnnouncements.length ?? 0))
],
),
)
: Utils.getNoDataWidget(context),
);
}
void _runFilter(String enteredKeyword) {
List<GetAnnouncementsObject> results = [];
if (enteredKeyword.isEmpty) {
results = getAnnouncementsObject;
} else {
results = getAnnouncementsObject.where((user) => user.titleEN!.toLowerCase().contains(enteredKeyword.toLowerCase())).toList();
}
setState(() {
_foundAnnouncements = results;
});
}
void getAnnouncements(int itgAwarenessID, int itgRowID) async {
try {
Utils.showLoading(context);
jsonResponse = await PendingTransactionsApiClient().getAnnouncements(itgAwarenessID, currentPageNo, itgRowID);
var jsonDecodedData = jsonDecode(jsonDecode(jsonResponse)['result']['data']);
for (int i = 0; i < jsonDecodedData.length; i++) {
getAnnouncementsObject.add(GetAnnouncementsObject.fromJson(jsonDecodedData[i]));
}
_foundAnnouncements = getAnnouncementsObject;
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
void openAnnouncementsDetails(int rowID) async {
await Navigator.pushNamed(context, AppRoutes.announcementsDetails, arguments: {"currentPageNo": currentPageNo, "rowID": rowID});
}
}

@ -9,10 +9,9 @@ import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import '../../../widgets/app_bar_widget.dart';
class MowadhafhiHome extends StatefulWidget {
const MowadhafhiHome({Key? key}) : super(key: key);
@ -32,93 +31,92 @@ class _MowadhafhiHomeState extends State<MowadhafhiHome> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: "Mowadhafhi Request",
),
body: Container(
margin: const EdgeInsets.only(top: 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: ListView.separated(
physics: const BouncingScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
openRequestDetails(getTicketsByEmployeeList[index].ticketId!);
},
child: Container(
width: double.infinity,
// height: 100.0,
padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
margin: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.05),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
getTicketsByEmployeeList[index].ticketTypeName!.toText14(color: MyColors.grey57Color),
getTicketsByEmployeeList[index].created!.split(" ")[0].toText12(color: MyColors.grey70Color),
],
),
Container(
padding: const EdgeInsets.only(top: 10.0),
child: getTicketsByEmployeeList[index].description!.toText12(color: MyColors.grey57Color),
),
Container(
padding: const EdgeInsets.only(top: 10.0),
child: Row(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: "Mowadhafhi Request",
),
body: Container(
margin: const EdgeInsets.only(top: 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: ListView.separated(
physics: const BouncingScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
openRequestDetails(getTicketsByEmployeeList[index].ticketId!);
},
child: Container(
width: double.infinity,
// height: 100.0,
padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
margin: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.05),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
getTicketsByEmployeeList[index].ticketStatusInternalName!.toText14(color: MyColors.gradiantEndColor),
SvgPicture.asset(
"assets/images/arrow_next.svg",
color: MyColors.darkIconColor,
)
getTicketsByEmployeeList[index].ticketTypeName!.toText14(color: MyColors.grey57Color),
getTicketsByEmployeeList[index].created!.split(" ")[0].toText12(color: MyColors.grey70Color),
],
),
),
],
Container(
padding: const EdgeInsets.only(top: 10.0),
child: getTicketsByEmployeeList[index].description!.toText12(color: MyColors.grey57Color),
),
Container(
padding: const EdgeInsets.only(top: 10.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
getTicketsByEmployeeList[index].ticketStatusInternalName!.toText14(color: MyColors.gradiantEndColor),
SvgPicture.asset(
"assets/images/arrow_next.svg",
color: MyColors.darkIconColor,
)
],
),
),
],
),
),
),
);
},
separatorBuilder: (BuildContext context, int index) => 12.height,
itemCount: getTicketsByEmployeeList.length ?? 0)),
80.height
],
),
),
bottomSheet: Container(
decoration: const BoxDecoration(
color: MyColors.white,
boxShadow: [
BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3),
],
);
},
separatorBuilder: (BuildContext context, int index) => 12.height,
itemCount: getTicketsByEmployeeList.length ?? 0)),
80.height
],
),
),
child: DefaultButton(LocaleKeys.createRequest.tr(), () async {
openHRRequest();
}).insideContainer,
)
);
bottomSheet: Container(
decoration: const BoxDecoration(
color: MyColors.white,
boxShadow: [
BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3),
],
),
child: DefaultButton(LocaleKeys.createRequest.tr(), () async {
openHRRequest();
}).insideContainer,
));
}
void openRequestDetails(String itgTicketID) async {

@ -26,7 +26,7 @@ class _RequestDetailsState extends State<MowadhafhiRequestDetails> {
super.initState();
}
getRequestID() {
void getRequestID() {
if (itgTicketID == null) {
itgTicketID = ModalRoute.of(context)?.settings.arguments as String;
debugPrint(itgTicketID);

@ -0,0 +1,182 @@
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/pending_transactions_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/date_uitl.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/pending_transactions/get_req_functions.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart';
class PendingTransactions extends StatefulWidget {
const PendingTransactions({Key? key}) : super(key: key);
@override
_PendingTransactionsState createState() => _PendingTransactionsState();
}
class _PendingTransactionsState extends State<PendingTransactions> {
List<GetPendingTransactionsFunctions> getPendingTransactionsFunctions = [];
GetPendingTransactionsFunctions? selectedFunction;
DateTime selectedDateFrom = DateTime.now();
DateTime selectedDateTo = DateTime.now();
@override
void initState() {
getRequestTypes();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: "Pending Transactions",
),
body: SingleChildScrollView(
child: Container(
width: double.infinity,
padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
margin: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.05),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
child: Column(
children: [
12.height,
PopupMenuButton(
child: DynamicTextFieldWidget(
"Please select request type",
selectedFunction?.fUNCTIONPROMPT ?? "",
isEnable: false,
isPopup: true,
isInputTypeNum: true,
isReadOnly: false,
).paddingOnly(bottom: 12),
itemBuilder: (_) => <PopupMenuItem<int>>[
for (int i = 0; i < getPendingTransactionsFunctions!.length; i++) PopupMenuItem<int>(child: Text(getPendingTransactionsFunctions![i].fUNCTIONPROMPT!), value: i),
],
onSelected: (int popupIndex) {
selectedFunction = getPendingTransactionsFunctions![popupIndex];
setState(() {});
}),
12.height,
DynamicTextFieldWidget(
"Date From: ",
selectedDateFrom.toString().split(" ")[0],
suffixIconData: Icons.calendar_today,
isEnable: false,
onTap: () async {
selectedDateFrom = await _selectDate(context, DateTime.now());
setState(() {});
},
).paddingOnly(bottom: 12),
12.height,
DynamicTextFieldWidget(
"Date To: ",
selectedDateTo.toString().split(" ")[0],
suffixIconData: Icons.calendar_today,
isEnable: false,
onTap: () async {
selectedDateTo = await _selectDate(context, DateTime.now());
setState(() {});
},
).paddingOnly(bottom: 12),
],
),
),
),
bottomSheet: Container(
decoration: const BoxDecoration(
color: MyColors.white,
boxShadow: [
BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3),
],
),
child: DefaultButton(
LocaleKeys.submit.tr(),
selectedFunction == null
? null
: () async {
openRequestDetails();
})
.insideContainer,
));
}
Future<DateTime> _selectDate(BuildContext context, DateTime selectedDate) async {
DateTime time = selectedDate;
if (!Platform.isIOS) {
await showCupertinoModalPopup(
context: context,
builder: (cxt) => Container(
height: 250,
color: Colors.white,
child: CupertinoDatePicker(
backgroundColor: Colors.white,
mode: CupertinoDatePickerMode.date,
onDateTimeChanged: (value) {
if (value != null && value != selectedDate) {
time = value;
}
},
initialDateTime: selectedDate,
),
),
);
} else {
final DateTime? picked =
await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101));
if (picked != null && picked != selectedDate) {
time = picked;
}
}
return time;
}
void getRequestTypes() async {
try {
Utils.showLoading(context);
getPendingTransactionsFunctions = await PendingTransactionsApiClient().getPendingReqFunctions();
Utils.hideLoading(context);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
void openRequestDetails() async {
await Navigator.pushNamed(context, AppRoutes.pendingTransactionsDetails,
arguments: {"selectedFunctionID": selectedFunction?.fUNCTIONID, "dateFrom": DateUtil.convertDateToString(selectedDateFrom), "dateTo": DateUtil.convertDateToString(selectedDateTo)});
}
void getPendingReqDetails() async {
try {
Utils.showLoading(context);
getPendingTransactionsFunctions = await PendingTransactionsApiClient().getPendingReqFunctions();
Utils.hideLoading(context);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
}

@ -0,0 +1,137 @@
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/pending_transactions_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/models/pending_transactions/get_pending_transactions_details.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
class PendingTransactionsDetails extends StatefulWidget {
const PendingTransactionsDetails({Key? key}) : super(key: key);
@override
_PendingTransactionsDetailsState createState() => _PendingTransactionsDetailsState();
}
class _PendingTransactionsDetailsState extends State<PendingTransactionsDetails> {
String functionID = "";
String dateFrom = "";
String dateTo = "";
List<GetPendingTransactionsDetails> getPendingTransactionsDetails = [];
@override
void initState() {
super.initState();
}
void getFunctionID() {
if (functionID == "") {
final arguments = (ModalRoute.of(context)?.settings.arguments ?? <String, dynamic>{}) as Map;
functionID = arguments["selectedFunctionID"].toString();
dateFrom = arguments["dateFrom"];
dateTo = arguments["dateTo"];
getTicketTransactions();
}
}
@override
Widget build(BuildContext context) {
getFunctionID();
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(
context,
title: "Pending Transactions",
),
body: getPendingTransactionsDetails.isNotEmpty
? Container(
margin: const EdgeInsets.only(top: 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: ListView.separated(
physics: const BouncingScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
return Container(
width: double.infinity,
padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
margin: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.05),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
"Created For ".toText14(color: MyColors.grey57Color),
getPendingTransactionsDetails[index].tRANSACTIONCREATEDFOR!.toText14(color: MyColors.grey57Color),
],
),
Column(
children: [
getPendingTransactionsDetails[index].cREATIONDATE!.split(" ")[0].toText12(color: MyColors.grey70Color),
getPendingTransactionsDetails[index].cREATIONDATE!.split(" ")[1].toText12(color: MyColors.grey70Color),
],
),
],
),
Container(
child: Row(
children: [
"Request Name: ".toText14(color: MyColors.grey57Color),
getPendingTransactionsDetails[index].uSERFUNCTIONNAME!.toText12(color: MyColors.grey57Color),
],
),
),
Container(
padding: const EdgeInsets.only(top: 0.0),
child: Row(
children: [
"Request Type: ".toText14(color: MyColors.grey57Color),
getPendingTransactionsDetails[index].rEQUESTTYPE!.toText14(color: MyColors.redColor),
],
),
),
],
),
);
},
separatorBuilder: (BuildContext context, int index) => 12.height,
itemCount: getPendingTransactionsDetails.length ?? 0))
],
),
)
: Utils.getNoDataWidget(context),
);
}
void getTicketTransactions() async {
try {
Utils.showLoading(context);
getPendingTransactionsDetails = await PendingTransactionsApiClient().getPendingTransactionsDetails(functionID, dateFrom, dateTo);
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
}

@ -1,5 +1,6 @@
import 'dart:ui';
import 'dart:convert';
import 'dart:ui';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
@ -12,6 +13,7 @@ import 'package:mohem_flutter_app/ui/screens/profile/widgets/header.dart';
import 'package:mohem_flutter_app/ui/screens/profile/widgets/profile_panel.dart';
import 'package:mohem_flutter_app/widgets/bottom_sheet.dart';
// todo '@sultan' kindly follow structure of code written. use extension methods for widgets and dont hard code strings, use localizations
class ProfileScreen extends StatefulWidget {
const ProfileScreen({Key? key}) : super(key: key);
@ -92,7 +94,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
]));
}
startImageSheet() {
void startImageSheet() {
showMyBottomSheet(context,
child: Column(
children: [

@ -9,6 +9,8 @@ import 'package:mohem_flutter_app/models/profile_menu.model.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
// todo '@sultan' kindly follow structure of code written. use extension methods for widgets, also format code
class ProfileInFo extends StatelessWidget {
ProfileInFo(this.memberInfo);
MemberInformationListModel memberInfo;

@ -6,7 +6,6 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/itg_forms_models/wf_history_model.dart';
import 'package:mohem_flutter_app/ui/work_list/sheets/delegate_sheet.dart';
import 'package:mohem_flutter_app/ui/work_list/sheets/request_more_info_sheet.dart';
import 'package:mohem_flutter_app/widgets/bottom_sheet.dart';
import 'package:mohem_flutter_app/widgets/circular_avatar.dart';

@ -5,8 +5,12 @@ import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/get_action_history_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart';
import 'package:mohem_flutter_app/ui/work_list/sheets/search_options_sheet.dart';
import 'package:mohem_flutter_app/ui/work_list/sheets/selected_item_sheet.dart';
@ -14,19 +18,13 @@ import 'package:mohem_flutter_app/widgets/bottom_sheet.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/circular_avatar.dart';
import 'package:mohem_flutter_app/widgets/input_widget.dart';
import 'package:mohem_flutter_app/widgets/radio/show_radio.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import '../../../models/generic_response_model.dart';
import '../../../models/get_action_history_list_model.dart';
import '../../../models/worklist/get_favorite_replacements_model.dart';
class DelegateSheet extends StatefulWidget {
int? notificationID;
String title,apiMode;
String title, apiMode;
List<GetActionHistoryList>? actionHistoryList;
DelegateSheet({required this.title,required this.apiMode,this.notificationID, this.actionHistoryList});
DelegateSheet({required this.title, required this.apiMode, this.notificationID, this.actionHistoryList});
@override
State<DelegateSheet> createState() => _DelegateSheetState();
@ -69,7 +67,7 @@ class _DelegateSheetState extends State<DelegateSheet> {
return null;
}
fetchChangeFav({required String email, required String employeName, required String image, required String userName, bool isFav = false, bool isNeedToRefresh = false}) async {
void fetchChangeFav({required String email, required String employeName, required String image, required String userName, bool isFav = false, bool isNeedToRefresh = false}) async {
Utils.showLoading(context);
favLetters = null;
selectedFavLetter = null;

@ -1,10 +1,9 @@
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import '../../../classes/colors.dart';
import '../../../widgets/radio/show_radio.dart';
import 'package:mohem_flutter_app/widgets/radio/show_radio.dart';
class SearchOptionsSheet extends StatelessWidget {
String selectedType;

@ -1,19 +1,15 @@
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/models/get_action_history_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/circular_avatar.dart';
import 'package:mohem_flutter_app/widgets/input_widget.dart';
import 'package:mohem_flutter_app/widgets/radio/show_radio.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import '../../../app_state/app_state.dart';
import '../../../classes/utils.dart';
import '../../../models/get_action_history_list_model.dart';
import '../../../models/worklist/get_favorite_replacements_model.dart';
import '../../../models/worklist/replacement_list_model.dart';
class SelectedItemSheet extends StatelessWidget {
String title, apiMode;
@ -115,13 +111,13 @@ class SelectedItemSheet extends StatelessWidget {
Future<void> performNetworkCall(BuildContext context, {String? email, String? userId}) async {
Utils.showLoading(context);
try{
try {
await WorkListApiClient().submitComment(comment: comment, email: email, userId: userId, notificationId: notificationID, apiMode: apiMode);
Utils.hideLoading(context);
Navigator.pop(context);
Navigator.pop(context);
Navigator.pop(context, "delegate_reload");
}catch (ex) {
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}

@ -23,6 +23,10 @@ import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_mod
import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist_response_model.dart';
import 'package:mohem_flutter_app/ui/work_list/sheets/delegate_sheet.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/actions_fragment.dart';
@ -31,15 +35,10 @@ import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/detail_fragmen
import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/info_fragments.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_fragments/request_fragment.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/bottom_sheet.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/dialogs/accept_reject_input_dialog.dart';
import '../../models/worklist/hr/eit_otification_body_model.dart';
import '../../models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
import '../../models/worklist/hr/get_contact_notification_body_list_model.dart';
import '../../models/worklist/hr/get_phones_notification_body_list_model.dart';
import '../../widgets/bottom_sheet.dart';
import '../../widgets/dialogs/confirm_dialog.dart';
import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart';
class WorkListDetailScreen extends StatefulWidget {
WorkListDetailScreen({Key? key}) : super(key: key);

@ -1,6 +1,5 @@
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/date_uitl.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
@ -11,14 +10,13 @@ import 'package:mohem_flutter_app/models/get_item_creation_ntf_body_list_model.d
import 'package:mohem_flutter_app/models/get_po_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/get_stamp_ms_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/eit_otification_body_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_contact_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/hr/get_phones_notification_body_list_model.dart';
import 'package:mohem_flutter_app/models/worklist_response_model.dart';
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
import '../../../models/worklist/hr/eit_otification_body_model.dart';
import '../../../models/worklist/hr/get_basic_det_ntf_body_list_model.dart';
import '../../../models/worklist/hr/get_contact_notification_body_list_model.dart';
import '../../../models/worklist/hr/get_phones_notification_body_list_model.dart';
class InfoFragment extends StatelessWidget {
WorkListResponseModel? workListData;
List<POHeader> poHeaderList;

@ -28,7 +28,7 @@ class Updater<T> extends StatelessWidget{
});
}
pushData(T? data) {
void pushData(T? data) {
_history.add(data);
sink?.sink.add(data);
}

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
showMyBottomSheet(BuildContext context, {required Widget child}) {
void showMyBottomSheet(BuildContext context, {required Widget child}) {
showModalBottomSheet<void>(
context: context,
isScrollControlled: true,

@ -502,7 +502,7 @@ class _CircularIndicatorPainter implements CustomPainter {
void removeListener(listener) {}
@override
get semanticsBuilder => null;
Null get semanticsBuilder => null;
@override
bool shouldRebuildSemantics(CustomPainter oldDelegate) => false;

@ -1,23 +1,22 @@
import 'dart:async';
import 'dart:math';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_directions_api/google_directions_api.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:mohem_flutter_app/classes/app_permissions.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/theme/colors.dart';
// import 'package:geodesy/geodesy.dart' as geodesy;
import '../../classes/app_permissions.dart';
import '../../theme/colors.dart';
//Created By Mr.Zohaib
class Location {
static _Map map = _Map();
static havePermission(Function(bool) callback) {
static void havePermission(Function(bool) callback) {
Geolocator.checkPermission().then((value) async {
if (value == LocationPermission.denied) {
value = await Geolocator.requestPermission();
@ -28,13 +27,13 @@ class Location {
});
}
static isEnabled(Function(bool) callback) {
static void isEnabled(Function(bool) callback) {
Geolocator.isLocationServiceEnabled().then((value) => callback(value));
}
static bool _listeningSettingChange = true;
static listenGPS({bool change = true, Function(bool)? onChange}) async {
static void listenGPS({bool change = true, Function(bool)? onChange}) async {
_listeningSettingChange = change;
if (change == false) return;
@ -46,8 +45,8 @@ class Location {
});
}
static getCurrentLocation(Function(LatLng?) callback) {
done(Position position) {
static void getCurrentLocation(Function(LatLng?) callback) {
void done(Position position) {
//AppStorage.sp.saveLocation(position);
LatLng? myCurrentLocation = LatLng(position.latitude, position.longitude);
@ -55,8 +54,7 @@ class Location {
}
AppPermissions.location((granted) {
if (granted)
if (granted) {
Geolocator.getLastKnownPosition(forceAndroidLocationManager: true).then((value) {
if (value == null) {
Geolocator.getCurrentPosition().then((value) {
@ -66,6 +64,7 @@ class Location {
done(value);
}
});
}
});
}
@ -125,20 +124,20 @@ class _Map {
return camera;
}
moveCamera(CameraPosition camera, @required Completer<GoogleMapController> mapController, bool animation) {
void moveCamera(CameraPosition camera, @required Completer<GoogleMapController> mapController, bool animation) {
mapController.future.then((controller) {
animation ? controller.animateCamera(CameraUpdate.newCameraPosition(camera)) : controller.moveCamera(CameraUpdate.newCameraPosition(camera));
});
}
scrollBy({double x = 0, double y = 0, required Completer<GoogleMapController> mapController, bool animation = true}) {
void scrollBy({double x = 0, double y = 0, required Completer<GoogleMapController> mapController, bool animation = true}) {
var camera = CameraUpdate.scrollBy(x, y);
mapController.future.then((controller) {
animation ? controller.animateCamera(camera) : controller.moveCamera(camera);
});
}
goToCurrentLocation({Completer<GoogleMapController>? mapController, double? direction = 0.0, bool? animation}) {
void goToCurrentLocation({Completer<GoogleMapController>? mapController, double? direction = 0.0, bool? animation}) {
Location.getCurrentLocation((location) {
moveTo(location!, zoom: 17, mapController: mapController!, animation: animation, direction: direction!);
});
@ -146,7 +145,7 @@ class _Map {
var routes = Map<String, DirectionsRoute>();
setRoutePolylines(LatLng? source, LatLng? destination, Set<Polyline> polylines, Completer<GoogleMapController> mapController, Function(DirectionsRoute?) completion) {
void setRoutePolylines(LatLng? source, LatLng? destination, Set<Polyline> polylines, Completer<GoogleMapController> mapController, Function(DirectionsRoute?) completion) {
if (source == null || destination == null) {
completion(null);
return;
@ -156,7 +155,7 @@ class _Map {
var destin = '${destination.latitude},${destination.longitude}';
var routeId = '$origin->$destination';
createPolyline(DirectionsRoute results) {
void createPolyline(DirectionsRoute results) {
List<LatLng> polylineCoordinates = results.overviewPath!.map((e) => LatLng(e.latitude, e.longitude)).toList();
PolylineId id = PolylineId("route");
Polyline polyline = Polyline(
@ -221,7 +220,7 @@ class _Map {
return LatLngBounds(northeast: LatLng(x1!, y1!), southwest: LatLng(x0!, y0!));
}
focusCameraToLatLngBounds({LatLngBounds? bound, Completer<GoogleMapController>? mapController, double? padding}) async {
void focusCameraToLatLngBounds({LatLngBounds? bound, Completer<GoogleMapController>? mapController, double? padding}) async {
if (bound == null) return;
CameraUpdate camera = CameraUpdate.newLatLngBounds(bound, padding!);
@ -229,7 +228,7 @@ class _Map {
controller.animateCamera(camera);
}
focusCameraTo2Points({LatLng? point1, LatLng? point2, Completer<GoogleMapController>? mapController, double? padding}) async {
void focusCameraTo2Points({LatLng? point1, LatLng? point2, Completer<GoogleMapController>? mapController, double? padding}) async {
var source = point1;
var destination = point2;
if (source != null && destination != null) {

@ -108,7 +108,7 @@ class OTPWidgetState extends State<OTPWidget> with SingleTickerProviderStateMixi
}
}
_calculateStrList() {
void calculateStrList() {
if (strList.length > widget.maxLength) {
strList.length = widget.maxLength;
}
@ -123,7 +123,7 @@ class OTPWidgetState extends State<OTPWidget> with SingleTickerProviderStateMixi
focusNode = widget.focusNode ?? FocusNode();
_initTextController();
_calculateStrList();
calculateStrList();
widget.controller?.addListener(_controllerListener);
focusNode?.addListener(_focusListener);
}
@ -291,7 +291,7 @@ class OTPWidgetState extends State<OTPWidget> with SingleTickerProviderStateMixi
}
Widget _pinBoxRow(BuildContext context) {
_calculateStrList();
calculateStrList();
List<Widget> pinCodes = List.generate(widget.maxLength, (int i) {
return _buildPinCode(i, context);
});

@ -40,7 +40,7 @@ dependencies:
easy_localization: ^3.0.0
http: ^0.13.4
permission_handler: ^9.2.0
flutter_svg: ^1.0.0
flutter_svg: ^0.23.0+1
sizer: ^2.0.15
local_auth: ^1.1.9
fluttertoast: ^8.0.8
@ -67,6 +67,7 @@ dependencies:
month_picker_dialog: ^0.4.0
open_file: ^3.2.1
wifi_iot: ^0.3.16
flutter_html: ^2.2.1
dev_dependencies:
flutter_test:

Loading…
Cancel
Save