Merge branch 'master' into Fatima
# Conflicts: # assets/langs/ar-SA.json # assets/langs/en-US.json # lib/config/routes.dart # lib/extensions/string_extensions.dart # lib/extensions/widget_extensions.dart # lib/generated/codegen_loader.g.dart # lib/generated/locale_keys.g.dart # lib/ui/landing/dashboard.dart # pubspec.lock # pubspec.yamlmerge-requests/1/merge
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "679409052782",
|
||||||
|
"firebase_url": "https://mohemm-dce93.firebaseio.com",
|
||||||
|
"project_id": "mohemm-dce93",
|
||||||
|
"storage_bucket": "mohemm-dce93.appspot.com"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:679409052782:android:dba155ac0859d7fea78a7f",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "hmg.cloudSolutions.mohem"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "679409052782-mtd6d8rjltucnm9uatn6g7et08sm6lbv.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyDgWjuSBIKGghWxYg_KGBRIZTi-O_UA8mU"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "679409052782-mtd6d8rjltucnm9uatn6g7et08sm6lbv.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
@ -1,6 +1,17 @@
|
|||||||
package com.mohem_flutter_app
|
package com.mohem_flutter_app
|
||||||
|
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
//import io.flutter.embedding.android.FlutterActivity
|
||||||
|
//
|
||||||
|
//class MainActivity: FlutterActivity() {
|
||||||
|
//}
|
||||||
|
|
||||||
class MainActivity: FlutterActivity() {
|
|
||||||
|
import io.flutter.embedding.android.FlutterFragmentActivity
|
||||||
|
import io.flutter.embedding.engine.FlutterEngine
|
||||||
|
import io.flutter.plugins.GeneratedPluginRegistrant
|
||||||
|
|
||||||
|
class MainActivity: FlutterFragmentActivity() {
|
||||||
|
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||||
|
GeneratedPluginRegistrant.registerWith(flutterEngine)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
<svg id="interview_3_" data-name="interview (3)" xmlns="http://www.w3.org/2000/svg" width="27.258" height="27.258" viewBox="0 0 27.258 27.258">
|
||||||
|
<path id="Path_4667" data-name="Path 4667" d="M7.663,248.55a4.22,4.22,0,1,0-5.175,0A5.07,5.07,0,0,0,0,252.918v1.711a.8.8,0,0,0,.8.8H9.352a.8.8,0,0,0,.8-.8v-1.711A5.07,5.07,0,0,0,7.663,248.55Zm-5.21-3.33a2.623,2.623,0,1,1,2.623,2.623A2.626,2.626,0,0,1,2.452,245.22Zm6.1,8.61H1.6v-.912a3.478,3.478,0,1,1,6.956,0v.912Zm0,0" transform="translate(0 -228.17)" fill="#989898"/>
|
||||||
|
<path id="Path_4668" data-name="Path 4668" d="M206.43,0H196.165A3.363,3.363,0,0,0,192.8,3.365v15.4a.8.8,0,0,0,1.278.639l3.208-2.406h9.143a3.363,3.363,0,0,0,3.365-3.365V3.365A3.363,3.363,0,0,0,206.43,0ZM208.2,13.629A1.766,1.766,0,0,1,206.43,15.4h-9.409a.8.8,0,0,0-.479.16L194.4,17.164V3.365A1.766,1.766,0,0,1,196.165,1.6H206.43A1.766,1.766,0,0,1,208.2,3.365Zm0,0" transform="translate(-182.536 0)" fill="#989898"/>
|
||||||
|
<path id="Path_4669" data-name="Path 4669" d="M266.419,80.332h-8.554a.8.8,0,1,0,0,1.6h8.554a.8.8,0,0,0,0-1.6Zm0,0" transform="translate(-243.381 -76.055)" fill="#989898"/>
|
||||||
|
<path id="Path_4670" data-name="Path 4670" d="M266.419,144.6h-8.554a.8.8,0,1,0,0,1.6h8.554a.8.8,0,0,0,0-1.6Zm0,0" transform="translate(-243.381 -136.903)" fill="#989898"/>
|
||||||
|
<path id="Path_4671" data-name="Path 4671" d="M262.142,208.867h-4.277a.8.8,0,1,0,0,1.6h4.277a.8.8,0,1,0,0-1.6Zm0,0" transform="translate(-243.381 -197.747)" fill="#989898"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
@ -0,0 +1,7 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="25.898" height="25.9" viewBox="0 0 25.898 25.9">
|
||||||
|
<g id="home_12_" data-name="home (12)" transform="translate(-0.022)">
|
||||||
|
<path id="Path_4683" data-name="Path 4683" d="M351.362.759A.759.759,0,0,0,350.6,0h-3.251a.759.759,0,0,0-.759.759v.687l4.769,4.769Z" transform="translate(-329.039 0)" fill="#2e303a"/>
|
||||||
|
<path id="Path_4684" data-name="Path 4684" d="M25.221,11.259,14.661.7A2.391,2.391,0,0,0,11.28.7L.721,11.26A2.391,2.391,0,1,0,4.1,14.641l8.869-8.869,8.869,8.869a2.375,2.375,0,0,0,1.69.7h0a2.391,2.391,0,0,0,1.691-4.081Z" fill="#2e303a"/>
|
||||||
|
<path id="Path_4685" data-name="Path 4685" d="M65.238,156.525l-7.8,7.8a3.878,3.878,0,0,1-2.369,1.125v6.271a2.794,2.794,0,0,0,2.791,2.791H62.8a.759.759,0,0,0,.759-.759v-5.743h3.359v5.743a.759.759,0,0,0,.759.759h4.935a2.794,2.794,0,0,0,2.791-2.791v-6.271a3.879,3.879,0,0,1-2.368-1.125Z" transform="translate(-52.267 -148.607)" fill="#2e303a"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 955 B |
@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="25.974" height="24.23" viewBox="0 0 25.974 24.23">
|
||||||
|
<path id="shipping_2_" data-name="shipping (2)" d="M23.959,29.714V17.886a.764.764,0,0,0-.764-.764H2.724a.764.764,0,0,0-.764.764V30.657A2.294,2.294,0,0,0,.512,34.381l3.442,4.172c2.13,2.493,4.393,2.8,7.758,2.8a25.054,25.054,0,0,0,6.694-.561l2.45-.586a2.138,2.138,0,0,0,1.737.914H23.8a2.238,2.238,0,0,0,2.175-2.291V32A2.248,2.248,0,0,0,23.959,29.714Zm-3.434,1.572-1.018-.517a6.053,6.053,0,0,0-5.309-.086,7.3,7.3,0,0,1-2,.774H8.664a2.128,2.128,0,0,0-2.125,2.125v.557l-.02-.021L4,31.381a2.327,2.327,0,0,0-.508-.416v-7.58H9.741v2.8a.764.764,0,0,0,.764.764h4.821a.764.764,0,0,0,.764-.764v-2.8h6.341v6.329A2.2,2.2,0,0,0,20.525,31.286Zm-9.256-7.9h3.293v2.037H11.269Zm11.162-1.528H16.091V18.65h6.341v3.206ZM14.563,18.65v3.206H11.269V18.65Zm-4.821,0v3.206H3.488V18.65ZM18.05,39.3a24.308,24.308,0,0,1-6.312.511c-3.158,0-4.684-.051-6.606-2.235L1.691,33.408a.773.773,0,0,1,1.182-.993L5.4,35.154a3.469,3.469,0,0,0,2.54,1.113h6.994a.764.764,0,0,0,0-1.528H8.067V33.582a.6.6,0,0,1,.6-.6H12.2a6.994,6.994,0,0,0,2.645-.917,4.533,4.533,0,0,1,3.975.063l1.6.813v5.794Zm6.4-.477a.713.713,0,0,1-.647.763H22.592a.713.713,0,0,1-.647-.763V32a.713.713,0,0,1,.647-.763H23.8a.713.713,0,0,1,.647.763Z" transform="translate(0.001 -17.122)" fill="#989898"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 19 KiB |
@ -0,0 +1,15 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="21.12" height="26.881" viewBox="0 0 21.12 26.881">
|
||||||
|
<g id="clipboard_5_" data-name="clipboard (5)" transform="translate(-47.037 0)">
|
||||||
|
<g id="Group_7687" data-name="Group 7687" transform="translate(47.037 0)">
|
||||||
|
<g id="Group_7686" data-name="Group 7686" transform="translate(0 0)">
|
||||||
|
<path id="Path_4672" data-name="Path 4672" d="M65.469,3.522H63.037V2.434c0-.352-.384-.512-.736-.512H60.413A2.862,2.862,0,0,0,57.565,0a2.912,2.912,0,0,0-2.848,1.92H52.861c-.352,0-.7.16-.7.512V3.522H49.725a2.72,2.72,0,0,0-2.688,2.592V24.45a2.575,2.575,0,0,0,2.688,2.432H65.469a2.575,2.575,0,0,0,2.688-2.432V6.114A2.72,2.72,0,0,0,65.469,3.522ZM53.437,3.2H55.2a.7.7,0,0,0,.608-.576,1.856,1.856,0,0,1,1.76-1.44,1.824,1.824,0,0,1,1.728,1.44.7.7,0,0,0,.64.576h1.824v2.56h-8.32ZM66.877,24.45A1.3,1.3,0,0,1,65.469,25.6H49.725a1.3,1.3,0,0,1-1.408-1.152V6.114A1.44,1.44,0,0,1,49.725,4.8h2.432V6.434a.672.672,0,0,0,.7.608H62.3a.7.7,0,0,0,.736-.608V4.8h2.432a1.44,1.44,0,0,1,1.408,1.312V24.45Z" transform="translate(-47.037 0)" fill="#989898"/>
|
||||||
|
<path id="Path_4673" data-name="Path 4673" d="M104.271,230.511a.64.64,0,0,0-.9-.032l-2.048,1.952-.864-.9a.64.64,0,0,0-.9-.032.672.672,0,0,0,0,.928l1.312,1.344a.576.576,0,0,0,.448.192.64.64,0,0,0,.448-.192l2.5-2.368a.608.608,0,0,0,.037-.859C104.3,230.535,104.283,230.523,104.271,230.511Z" transform="translate(-96.175 -216.205)" fill="#989898"/>
|
||||||
|
<path id="Path_4674" data-name="Path 4674" d="M206.548,256.034h-7.36a.64.64,0,0,0,0,1.28h7.36a.64.64,0,1,0,0-1.28Z" transform="translate(-189.268 -240.352)" fill="#989898"/>
|
||||||
|
<path id="Path_4675" data-name="Path 4675" d="M104.271,146.919a.64.64,0,0,0-.9-.032l-2.048,1.952-.864-.9a.64.64,0,0,0-.9-.032.672.672,0,0,0,0,.928l1.312,1.344a.576.576,0,0,0,.448.192.64.64,0,0,0,.448-.192l2.5-2.368a.608.608,0,0,0,.037-.859C104.3,146.943,104.283,146.931,104.271,146.919Z" transform="translate(-96.175 -137.733)" fill="#989898"/>
|
||||||
|
<path id="Path_4676" data-name="Path 4676" d="M206.548,172.442h-7.36a.64.64,0,0,0,0,1.28h7.36a.64.64,0,1,0,0-1.28Z" transform="translate(-189.268 -161.88)" fill="#989898"/>
|
||||||
|
<path id="Path_4677" data-name="Path 4677" d="M104.271,314.1a.64.64,0,0,0-.9-.032l-2.048,1.952-.864-.9a.64.64,0,0,0-.9-.032.672.672,0,0,0,0,.928l1.312,1.344a.576.576,0,0,0,.448.192.64.64,0,0,0,.448-.192l2.5-2.368a.608.608,0,0,0,.037-.859C104.3,314.126,104.283,314.114,104.271,314.1Z" transform="translate(-96.175 -294.677)" fill="#989898"/>
|
||||||
|
<path id="Path_4678" data-name="Path 4678" d="M206.548,339.626h-7.36a.64.64,0,0,0,0,1.28h7.36a.64.64,0,1,0,0-1.28Z" transform="translate(-189.268 -318.824)" fill="#989898"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="21.655" height="24.033" viewBox="0 0 21.655 24.033">
|
||||||
|
<path id="Path_4726" data-name="Path 4726" d="M12.03.53C9.864-.713,8.107.305,8.107,2.8V21.229c0,2.5,1.757,3.516,3.923,2.275l16.106-9.237c2.167-1.243,2.167-3.258,0-4.5Z" transform="translate(-8.107 0)" fill="#fff"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 324 B |
@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="93.613" height="93.613" viewBox="0 0 93.613 93.613">
|
||||||
|
<g id="fingerprint-scan_1_" data-name="fingerprint-scan (1)" transform="translate(0 0)" opacity="0.049">
|
||||||
|
<path id="Path_4635" data-name="Path 4635" d="M243.282,223.494a2.743,2.743,0,0,0,2.743-2.742V207.5a2.743,2.743,0,1,0-5.485,0v13.255A2.743,2.743,0,0,0,243.282,223.494Z" transform="translate(-196.559 -167.317)" fill="#fff"/>
|
||||||
|
<path id="Path_4636" data-name="Path 4636" d="M167.739,215.135A2.743,2.743,0,0,0,165,217.877c0,11.945-8.538,21.664-19.032,21.664s-19.032-9.718-19.032-21.664V202.967a2.743,2.743,0,1,0-5.485,0v14.911c0,14.97,11,27.149,24.517,27.149s24.517-12.179,24.517-27.149A2.743,2.743,0,0,0,167.739,215.135Z" transform="translate(-99.243 -163.615)" fill="#fff"/>
|
||||||
|
<path id="Path_4637" data-name="Path 4637" d="M243.282,232.819c7.516,0,13.63-6.7,13.63-14.946V202.96a2.743,2.743,0,0,0-5.485,0v14.911c0,5.217-3.654,9.461-8.145,9.461a2.743,2.743,0,0,0,0,5.485Z" transform="translate(-196.559 -163.611)" fill="#fff"/>
|
||||||
|
<path id="Path_4638" data-name="Path 4638" d="M90.871,24.37H79.481a39.852,39.852,0,0,0-7.619-12.733A33.489,33.489,0,0,0,46.722,0,33.49,33.49,0,0,0,21.581,11.639a39.854,39.854,0,0,0-7.617,12.73H2.743a2.743,2.743,0,1,0,0,5.485h9.609a43.839,43.839,0,0,0-1.033,9.5V54.262A41.449,41.449,0,0,0,21.581,81.974,33.49,33.49,0,0,0,46.722,93.613,33.49,33.49,0,0,0,71.864,81.974,41.45,41.45,0,0,0,82.126,54.262V39.345a43.839,43.839,0,0,0-1.033-9.49h9.777a2.743,2.743,0,0,0,0-5.485ZM46.722,5.485c11.747,0,21.933,7.705,26.826,18.885H67.158C62.762,17.043,55.243,12.2,46.722,12.2a2.743,2.743,0,0,0,0,5.485A17.967,17.967,0,0,1,60.456,24.37H19.9C24.788,13.19,34.974,5.485,46.722,5.485ZM76.641,54.262c0,18.674-13.421,33.866-29.919,33.866S16.8,72.936,16.8,54.262V39.351a37.925,37.925,0,0,1,1.2-9.5H36.2a15.572,15.572,0,0,0-3.107,9.5V54.262a2.743,2.743,0,1,0,5.485,0V39.351c0-5.217,3.654-9.461,8.145-9.461l17.1-.035a24.013,24.013,0,0,1,1.929,9.493h0a2.743,2.743,0,0,0,5.485,0h0a29.615,29.615,0,0,0-1.549-9.492h5.752a37.927,37.927,0,0,1,1.2,9.491V54.262Z" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.1 KiB |
@ -0,0 +1,116 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
DashboardApiClient._internal();
|
||||||
|
|
||||||
|
factory DashboardApiClient() => _instance;
|
||||||
|
|
||||||
|
Future<GetAttendanceTracking?> getAttendanceTracking() async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_Attendance_Tracking";
|
||||||
|
Map<String, dynamic> postParams = {};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getAttendanceTrackingList;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GenericResponseModel?> getOpenNotifications() async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_OPEN_NOTIFICATIONS";
|
||||||
|
Map<String, dynamic> postParams = {};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ItgFormsModel?> getItgFormsPendingTask() async {
|
||||||
|
String url = "${ApiConsts.cocRest}ITGFormsPendingTasks";
|
||||||
|
Map<String, dynamic> postParams = {};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
ItgFormsModel responseData = ItgFormsModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GenericResponseModel?> getAccrualBalances() async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_ACCRUAL_BALANCES";
|
||||||
|
Map<String, dynamic> postParams = {"P_EFFECTIVE_DATE": "1/30/2022"};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GenericResponseModel?> getOpenMissingSwipes() async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_OPEN_MISSING_SWIPES";
|
||||||
|
Map<String, dynamic> postParams = {};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Menus List
|
||||||
|
Future<GenericResponseModel?> getListMenu() async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_MENU";
|
||||||
|
Map<String, dynamic> postParams = {};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
//GET_MENU_ENTRIES
|
||||||
|
Future<GenericResponseModel?> getGetMenuEntries() async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_MENU_ENTRIES";
|
||||||
|
Map<String, dynamic> postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E"};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Mark Attendance
|
||||||
|
Future<GenericResponseModel?> markAttendance({String lat = "0", String? long = "0", required int pointType, String nfcValue = "", bool isGpsRequired = false}) async {
|
||||||
|
String url = "${ApiConsts.swpRest}AuthenticateAndSwipeUserSupportNFC";
|
||||||
|
var uuid = Uuid();
|
||||||
|
// Generate a v4 (random) id
|
||||||
|
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"UID": uuid.v4(), //Mobile Id
|
||||||
|
"Latitude": lat,
|
||||||
|
"Longitude": long,
|
||||||
|
"QRValue": "",
|
||||||
|
"PointType": pointType, // NFC=2, Wifi = 3, QR= 1,
|
||||||
|
"NFCValue": nfcValue,
|
||||||
|
"WifiValue": "",
|
||||||
|
"IsGpsRequired": isGpsRequired
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,282 @@
|
|||||||
|
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/dashboard/itg_forms_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/generic_response_model.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_attachement_list_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_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';
|
||||||
|
import 'package:mohem_flutter_app/models/get_quotation_analysis_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/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_response_model.dart';
|
||||||
|
|
||||||
|
class WorkListApiClient {
|
||||||
|
static final WorkListApiClient _instance = WorkListApiClient._internal();
|
||||||
|
|
||||||
|
WorkListApiClient._internal();
|
||||||
|
|
||||||
|
factory WorkListApiClient() => _instance;
|
||||||
|
|
||||||
|
Future<List<WorkListResponseModel>?> getWorkList(int pPageNum, String pItemType) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_WORKLIST";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_NOTIFICATION_TYPE": "1",
|
||||||
|
"P_PAGE_NUM": pPageNum,
|
||||||
|
"P_PAGE_LIMIT": 50,
|
||||||
|
"P_ITEM_TYPE": pItemType,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getWorkList;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ItgFormsModel?> getITGTaskCountRequestType() async {
|
||||||
|
String url = "${ApiConsts.cocRest}ITGGetTaskCountRequestType";
|
||||||
|
Map<String, dynamic> postParams = {};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
ItgFormsModel responseData = ItgFormsModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GenericResponseModel> getSubordinatesLeaves(String fromDate, String toDate) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_SUBORDINATES_LEAVES";
|
||||||
|
Map<String, dynamic> postParams = {"P_DATE_FROM": "/Date(1639861200000+0300)/", "P_DATE_TO": "/Date(1640120400000+0300)/"};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetAttachementList>> getAttachments(int pNotificationID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_ATTACHMENTS";
|
||||||
|
Map<String, dynamic> postParams = {"P_NOTIFICATION_ID": pNotificationID};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getAttachementList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetActionHistoryList>> getActionHistory(int pNotificationID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_ACTION_HISTORY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_NOTIFICATION_ID": pNotificationID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getActionHistoryList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetNotificationButtonsList>> getNotificationButtons(int pNotificationID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_NOTIFICATION_BUTTONS";
|
||||||
|
Map<String, dynamic> postParams = {"P_NOTIFICATION_ID": pNotificationID};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getNotificationButtonsList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<NotificationGetRespondAttributesList>> notificationGetRespondAttributes(int pNotificationID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}NOTIFICATION_GET_RESPOND_ATTRIBUTES";
|
||||||
|
Map<String, dynamic> postParams = {"P_NOTIFICATION_ID": pNotificationID};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.notificationGetRespondAttributesList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GenericResponseModel> getBasicDetNTFBody(int pNotificationID, int pTransactionID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_BASIC_DET_NTF_BODY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_NOTIFICATION_ID": pNotificationID,
|
||||||
|
"P_TRANSACTION_ID": pTransactionID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<MemberInformationListModel> getUserInformation(int pSelectedResopID, String selectedEmployeeNumber) async {
|
||||||
|
String url = "${ApiConsts.erpRest}Get_UserInformation";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_SELECTED_RESP_ID": pSelectedResopID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
postParams["P_SELECTED_EMPLOYEE_NUMBER"] = selectedEmployeeNumber;
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.memberInformationList![0];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetStampMsNotificationBodyList>> getStampMsNotificationBody(int pNotificationID, int pTransactionID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_STAMP_MS_NOTIFICATION_BODY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_NOTIFICATION_ID": pNotificationID,
|
||||||
|
"P_TRANSACTION_ID": pTransactionID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getStampMsNotificationBodyList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetStampNsNotificationBodyList>> getStampNsNotificationBody(int pNotificationID, int pTransactionID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_STAMP_NS_NOTIFICATION_BODY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_NOTIFICATION_ID": pNotificationID,
|
||||||
|
"P_TRANSACTION_ID": pTransactionID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getStampNsNotificationBodyList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetAbsenceCollectionNotificationBodyList>> getAbsenceNotificationBody(int pNotificationID, int pTransactionID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_ABSENCE_NOTIFICATION_BODY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_NOTIFICATION_ID": pNotificationID,
|
||||||
|
"P_TRANSACTION_ID": pTransactionID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getAbsenceCollectionNotificationBodyList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GenericResponseModel> postNotificationActions(Map<String, dynamic> postParams) async {
|
||||||
|
String url = "${ApiConsts.erpRest}NOTIFICATION_ACTIONS";
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetMoNotificationBodyList>> getMoNotificationBody(int pNotificationID, int pTransactionID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_MO_NOTIFICATION_BODY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_NOTIFICATION_ID": pNotificationID,
|
||||||
|
"P_TRANSACTION_ID": pTransactionID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getMoNotificationBodyList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GetPoNotificationBodyList?> getPoNotificationBody(int pNotificationID, int pTransactionID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_PO_NOTIFICATION_BODY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_NOTIFICATION_ID": pNotificationID,
|
||||||
|
"P_TRANSACTION_ID": pTransactionID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getPoNotificationBodyList;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetMoItemHistoryList>> getMoItemHistory(int pItemID, int pOrgID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_MO_ITEM_HISTORY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_ITEM_ID": pItemID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
"P_ORG_ID": pOrgID,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getMoItemHistoryList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetPoItemHistoryList>> getPoItemHistory(int pItemID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_PO_ITEM_HISTORY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_ITEM_ID": pItemID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getPoItemHistoryList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<GetQuotationAnalysisList>> getQuotationAnalysis(int pItemID, int pPoHeaderId) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_QUOTATION_ANALYSIS";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_ITEM_ID": pItemID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
"P_PO_HEADER_ID": pPoHeaderId,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getQuotationAnalysisList ?? [];
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<GetItemCreationNtfBodyList?> getItemCreationNtfBody(int pNotificationID, int pTransactionID) async {
|
||||||
|
String url = "${ApiConsts.erpRest}GET_ITEM_CREATION_NTF_BODY";
|
||||||
|
Map<String, dynamic> postParams = {
|
||||||
|
"P_NOTIFICATION_ID": pNotificationID,
|
||||||
|
"P_TRANSACTION_ID": pTransactionID,
|
||||||
|
"P_PAGE_LIMIT": 100,
|
||||||
|
"P_PAGE_NUM": 1,
|
||||||
|
};
|
||||||
|
postParams.addAll(AppState().postParamsJson);
|
||||||
|
return await ApiClient().postJsonForObject((json) {
|
||||||
|
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||||
|
return responseData.getItemCreationNtfBodyList;
|
||||||
|
}, url, postParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
|
|
||||||
|
class AppPermissions{
|
||||||
|
static location(Function(bool) completion) {
|
||||||
|
Permission.location.isGranted.then((isGranted){
|
||||||
|
if(!isGranted){
|
||||||
|
Permission.location.request().then((granted){
|
||||||
|
completion(granted == PermissionStatus.granted);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
completion(isGranted);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static checkAll(Function(bool) completion){
|
||||||
|
[
|
||||||
|
Permission.location
|
||||||
|
].request().then((value){
|
||||||
|
|
||||||
|
bool allGranted = false;
|
||||||
|
value.values.forEach((element) {
|
||||||
|
allGranted = allGranted && element == PermissionStatus.granted;
|
||||||
|
});
|
||||||
|
|
||||||
|
completion(allGranted);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,19 +1,23 @@
|
|||||||
class ApiConsts {
|
class ApiConsts {
|
||||||
//static String baseUrl = "http://10.200.204.20:2801/"; // Local server
|
//static String baseUrl = "http://10.200.204.20:2801/"; // Local server
|
||||||
static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server
|
static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server
|
||||||
static String baseUrlServices = baseUrl + "/services/"; // server
|
// static String baseUrl = "https://hmgwebservices.com"; // Live server
|
||||||
|
static String baseUrlServices = baseUrl + "/Services/"; // server
|
||||||
// static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server
|
// static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server
|
||||||
static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/";
|
static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/";
|
||||||
static String erpRest = baseUrlServices + "ERP.svc/REST/";
|
static String erpRest = baseUrlServices + "ERP.svc/REST/";
|
||||||
|
static String swpRest = baseUrlServices + "SWP.svc/REST/";
|
||||||
static String user = baseUrlServices + "api/User/";
|
static String user = baseUrlServices + "api/User/";
|
||||||
|
static String cocRest = baseUrlServices + "COCWS.svc/REST/";
|
||||||
}
|
}
|
||||||
|
|
||||||
class GlobalConsts {
|
class SharedPrefsConsts {
|
||||||
static String isRememberMe = "remember_me";
|
static String isRememberMe = "remember_me";
|
||||||
static String email = "email";
|
static String username = "username";
|
||||||
static String password = "password";
|
static String password = "password";
|
||||||
static String bookmark = "bookmark";
|
static String privilegeList = "privilegeList";
|
||||||
static String fontZoomSize = "font_zoom_size";
|
static String firebaseToken = "firebaseToken";
|
||||||
|
static String memberInformation = "memberInformation";
|
||||||
static String welcomeVideoUrl = "welcomeVideoUrl";
|
static String welcomeVideoUrl = "welcomeVideoUrl";
|
||||||
static String doNotShowWelcomeVideo = "doNotShowWelcomeVideo";
|
static String doNotShowWelcomeVideo = "doNotShowWelcomeVideo";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,448 @@
|
|||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
class DateUtil {
|
||||||
|
/// convert String To Date function
|
||||||
|
/// [date] String we want to convert
|
||||||
|
static DateTime convertStringToDate(String date) {
|
||||||
|
// /Date(1585774800000+0300)/
|
||||||
|
if (date != null) {
|
||||||
|
const start = "/Date(";
|
||||||
|
const end = "+0300)";
|
||||||
|
final startIndex = date.indexOf(start);
|
||||||
|
final endIndex = date.indexOf(end, startIndex + start.length);
|
||||||
|
return DateTime.fromMillisecondsSinceEpoch(
|
||||||
|
int.parse(
|
||||||
|
date.substring(startIndex + start.length, endIndex),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else
|
||||||
|
return DateTime.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
static DateTime convertSimpleStringDateToDate(String date) {
|
||||||
|
return DateFormat("MM/dd/yyyy hh:mm:ss").parse(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
static DateTime convertSimpleStringDateToDateddMMyyyy(String date) {
|
||||||
|
return DateFormat("MM/dd/yyyy hh:mm:ss").parse(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
static DateTime convertStringToDateNoTimeZone(String date) {
|
||||||
|
// /Date(1585774800000+0300)/
|
||||||
|
if (date != null) {
|
||||||
|
const start = "/Date(";
|
||||||
|
const end = ")";
|
||||||
|
final startIndex = date.indexOf(start);
|
||||||
|
final endIndex = date.indexOf(end, startIndex + start.length);
|
||||||
|
return DateTime.fromMillisecondsSinceEpoch(
|
||||||
|
int.parse(
|
||||||
|
date.substring(startIndex + start.length, endIndex),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else
|
||||||
|
return DateTime.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
static DateTime convertStringToDateTime(String date) {
|
||||||
|
if (date != null) {
|
||||||
|
try {
|
||||||
|
var dateT = date.split('/');
|
||||||
|
var year = dateT[2].substring(0, 4);
|
||||||
|
var dateP = DateTime(int.parse(year), int.parse(dateT[1]), int.parse(dateT[0]));
|
||||||
|
return dateP;
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return DateTime.now();
|
||||||
|
} else
|
||||||
|
return DateTime.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
static String convertDateToString(DateTime date) {
|
||||||
|
const start = "/Date(";
|
||||||
|
const end = "+0300)";
|
||||||
|
int milliseconds = date.millisecondsSinceEpoch;
|
||||||
|
|
||||||
|
return start + "$milliseconds" + end;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String convertDateToStringLocation(DateTime date) {
|
||||||
|
const start = "/Date(";
|
||||||
|
const end = ")/";
|
||||||
|
int milliseconds = date.millisecondsSinceEpoch;
|
||||||
|
|
||||||
|
return start + "$milliseconds" + end;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String formatDateToDate(DateTime date, bool isArabic) {
|
||||||
|
return DateFormat('dd MMM yyy', isArabic ? "ar_SA" : "en_US").format(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
static String formatDateToTime(DateTime date) {
|
||||||
|
return DateFormat('hh:mm a').format(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
static String yearMonthDay(DateTime dateTime) {
|
||||||
|
String dateFormat = '${dateTime.year}-${dateTime.month}-${dateTime.day}';
|
||||||
|
return dateFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String time(DateTime dateTime) {
|
||||||
|
String dateFormat = '${dateTime.hour}:${dateTime.minute}:00';
|
||||||
|
return dateFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String convertDateMSToJsonDate(utc) {
|
||||||
|
var dt = new DateTime.fromMicrosecondsSinceEpoch(utc);
|
||||||
|
|
||||||
|
return "/Date(" + (dt.millisecondsSinceEpoch * 1000).toString() + '+0300' + ")/";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// check Date
|
||||||
|
/// [dateString] String we want to convert
|
||||||
|
static String checkDate(DateTime checkedTime) {
|
||||||
|
DateTime currentTime = DateTime.now();
|
||||||
|
if ((currentTime.year == checkedTime.year) && (currentTime.month == checkedTime.month) && (currentTime.day == checkedTime.day)) {
|
||||||
|
return "Today";
|
||||||
|
} else if ((currentTime.year == checkedTime.year) && (currentTime.month == checkedTime.month)) {
|
||||||
|
if ((currentTime.day - checkedTime.day) == 1) {
|
||||||
|
return "YESTERDAY";
|
||||||
|
} else if ((currentTime.day - checkedTime.day) == -1) {
|
||||||
|
return "Tomorrow";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((currentTime.day - checkedTime.day) <= -2) {
|
||||||
|
return "Next Week";
|
||||||
|
} else {
|
||||||
|
return "Old Date";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Old Date";
|
||||||
|
}
|
||||||
|
|
||||||
|
static String getDateFormatted(String date) {
|
||||||
|
DateTime dateObj = DateUtil.convertStringToDate(date);
|
||||||
|
return DateUtil.getWeekDay(dateObj.weekday) + ", " + dateObj.day.toString() + " " + DateUtil.getMonth(dateObj.month) + " " + dateObj.year.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
static String getISODateFormat(DateTime dateTime) {
|
||||||
|
// 2020-04-30T00:00:00.000
|
||||||
|
return dateTime.toIso8601String();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get month by
|
||||||
|
/// [month] convert month number in to month name
|
||||||
|
static getMonth(int month) {
|
||||||
|
switch (month) {
|
||||||
|
case 1:
|
||||||
|
return "January";
|
||||||
|
case 2:
|
||||||
|
return "February";
|
||||||
|
case 3:
|
||||||
|
return "March";
|
||||||
|
case 4:
|
||||||
|
return "April";
|
||||||
|
case 5:
|
||||||
|
return "May";
|
||||||
|
case 6:
|
||||||
|
return "June";
|
||||||
|
case 7:
|
||||||
|
return "July";
|
||||||
|
case 8:
|
||||||
|
return "August";
|
||||||
|
case 9:
|
||||||
|
return "September";
|
||||||
|
case 10:
|
||||||
|
return "October";
|
||||||
|
case 11:
|
||||||
|
return "November";
|
||||||
|
case 12:
|
||||||
|
return "December";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get month by
|
||||||
|
/// [month] convert month number in to month name in Arabic
|
||||||
|
static getMonthArabic(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 getMonthByName(String month) {
|
||||||
|
switch (month.toLowerCase()) {
|
||||||
|
case 'january':
|
||||||
|
return 1;
|
||||||
|
case 'february':
|
||||||
|
return 2;
|
||||||
|
case 'march':
|
||||||
|
return 3;
|
||||||
|
case 'april':
|
||||||
|
return 4;
|
||||||
|
case 'may':
|
||||||
|
return 5;
|
||||||
|
case 'june':
|
||||||
|
return 6;
|
||||||
|
case 'july':
|
||||||
|
return 7;
|
||||||
|
case 'august':
|
||||||
|
return 8;
|
||||||
|
case 'september':
|
||||||
|
return 9;
|
||||||
|
case 'october':
|
||||||
|
return 10;
|
||||||
|
case 'november':
|
||||||
|
return 11;
|
||||||
|
case 'december':
|
||||||
|
return 12;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static DateTime getMonthDateTime(String month, yearName) {
|
||||||
|
DateTime? date;
|
||||||
|
try {
|
||||||
|
date = DateTime(int.parse(yearName), getMonthByName(month));
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
return date ?? DateTime.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get month by
|
||||||
|
/// [weekDay] convert week day in int to week day name
|
||||||
|
static getWeekDay(int weekDay) {
|
||||||
|
switch (weekDay) {
|
||||||
|
case 1:
|
||||||
|
return "Monday";
|
||||||
|
case 2:
|
||||||
|
return "Tuesday";
|
||||||
|
case 3:
|
||||||
|
return "Wednesday";
|
||||||
|
case 4:
|
||||||
|
return "Thursday";
|
||||||
|
case 5:
|
||||||
|
return "Friday";
|
||||||
|
case 6:
|
||||||
|
return "Saturday ";
|
||||||
|
case 7:
|
||||||
|
return "Sunday";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get month by
|
||||||
|
/// [weekDay] convert week day in int to week day name arabic
|
||||||
|
static getWeekDayArabic(int weekDay) {
|
||||||
|
switch (weekDay) {
|
||||||
|
case 1:
|
||||||
|
return "الاثنين";
|
||||||
|
case 2:
|
||||||
|
return "الثلاثاء";
|
||||||
|
case 3:
|
||||||
|
return "الاربعاء";
|
||||||
|
case 4:
|
||||||
|
return "الخميس";
|
||||||
|
case 5:
|
||||||
|
return "الجمعه";
|
||||||
|
case 6:
|
||||||
|
return "السبت ";
|
||||||
|
case 7:
|
||||||
|
return "الاحد";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static getWeekDayEnglish(int weekDay) {
|
||||||
|
switch (weekDay) {
|
||||||
|
case 1:
|
||||||
|
return "Monday";
|
||||||
|
case 2:
|
||||||
|
return "Tuesday";
|
||||||
|
case 3:
|
||||||
|
return "Wednesday";
|
||||||
|
case 4:
|
||||||
|
return "Thursday";
|
||||||
|
case 5:
|
||||||
|
return "Friday";
|
||||||
|
case 6:
|
||||||
|
return "Saturday ";
|
||||||
|
case 7:
|
||||||
|
return "Sunday";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get data formatted like Apr 26,2020
|
||||||
|
/// [dateTime] convert DateTime to data formatted
|
||||||
|
static String getMonthDayYearDateFormatted(DateTime dateTime) {
|
||||||
|
if (dateTime != null)
|
||||||
|
return getMonth(dateTime.month) + " " + dateTime.day.toString() + ", " + dateTime.year.toString();
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get data formatted like Apr 26,2020
|
||||||
|
/// [dateTime] convert DateTime to data formatted Arabic
|
||||||
|
static String getMonthDayYearDateFormattedAr(DateTime dateTime) {
|
||||||
|
if (dateTime != null)
|
||||||
|
return getMonthArabic(dateTime.month) + " " + dateTime.day.toString() + ", " + dateTime.year.toString();
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get data formatted like Thursday, Apr 26,2020
|
||||||
|
/// [dateTime] convert DateTime to date formatted
|
||||||
|
static String getWeekDayMonthDayYearDateFormatted(DateTime dateTime, String lang) {
|
||||||
|
// print(dateTime);
|
||||||
|
// print(dateTime.weekday);
|
||||||
|
// print(dateTime.weekday.getDayOfWeekEnumValue.value);
|
||||||
|
if (dateTime != null)
|
||||||
|
return lang == 'en'
|
||||||
|
? getWeekDayEnglish(dateTime.weekday) + ", " + getMonth(dateTime.month) + " " + dateTime.day.toString() + " " + dateTime.year.toString()
|
||||||
|
: getWeekDayArabic(dateTime.weekday) + ", " + dateTime.day.toString() + " " + getMonthArabic(dateTime.month) + " " + dateTime.year.toString();
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
static String getMonthDayYearLangDateFormatted(DateTime dateTime, String lang) {
|
||||||
|
if (dateTime != null)
|
||||||
|
return lang == 'en'
|
||||||
|
? getMonth(dateTime.month) + " " + dateTime.day.toString() + " " + dateTime.year.toString()
|
||||||
|
: dateTime.day.toString() + " " + getMonthArabic(dateTime.month) + " " + dateTime.year.toString();
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get data formatted like 26/4/2020
|
||||||
|
static String getDayMonthYearLangDateFormatted(DateTime dateTime, String lang) {
|
||||||
|
if (dateTime != null)
|
||||||
|
return lang == 'en'
|
||||||
|
? dateTime.day.toString() + " " + getMonth(dateTime.month) + " " + dateTime.year.toString()
|
||||||
|
: dateTime.day.toString() + " " + getMonthArabic(dateTime.month) + " " + dateTime.year.toString();
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
static String getMonthYearLangDateFormatted(DateTime dateTime, String lang) {
|
||||||
|
if (dateTime != null)
|
||||||
|
return lang == 'en' ? getMonth(dateTime.month) + " " + dateTime.year.toString() : getMonthArabic(dateTime.month) + " " + dateTime.year.toString();
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get data formatted like 26/4/2020
|
||||||
|
/// [dateTime] convert DateTime to data formatted
|
||||||
|
static String getDayMonthYearDateFormatted(DateTime dateTime) {
|
||||||
|
if (dateTime != null)
|
||||||
|
return dateTime.day.toString() + "/" + dateTime.month.toString() + "/" + dateTime.year.toString();
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get data formatted like 26/4/2020
|
||||||
|
/// [dateTime] convert DateTime to data formatted
|
||||||
|
static String getDayMonthDateFormatted(DateTime dateTime) {
|
||||||
|
if (dateTime != null)
|
||||||
|
return DateFormat('dd/MM').format(dateTime);
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get data formatted like 26/4/2020
|
||||||
|
/// [dateTime] convert DateTime to data formatted according to language
|
||||||
|
static String getDayMonthYearDateFormattedLang(DateTime dateTime, bool isArabic) {
|
||||||
|
if (dateTime != null)
|
||||||
|
return DateFormat('dd/MM/yyyy', isArabic ? "ar_SA" : "en_US").format(dateTime);
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get data formatted like 10:30 according to lang
|
||||||
|
static String formatDateToTimeLang(DateTime date, bool isArabic) {
|
||||||
|
return DateFormat('HH:mm', isArabic ? "ar_SA" : "en_US").format(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get data formatted like 26/4/2020 10:30
|
||||||
|
/// [dateTime] convert DateTime to data formatted
|
||||||
|
static String getDayMonthYearHourMinuteDateFormatted(DateTime dateTime) {
|
||||||
|
if (dateTime != null)
|
||||||
|
return dateTime.day.toString() + "/" + dateTime.month.toString() + "/" + dateTime.year.toString() + " " + DateFormat('HH:mm').format(dateTime);
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get data formatted like 2020-8-13 09:43:00
|
||||||
|
/// [dateTime] convert DateTime to data formatted
|
||||||
|
static String getYearMonthDayHourMinSecDateFormatted(DateTime dateTime) {
|
||||||
|
if (dateTime != null)
|
||||||
|
return dateTime.year.toString() +
|
||||||
|
"-" +
|
||||||
|
dateTime.month.toString() +
|
||||||
|
"-" +
|
||||||
|
dateTime.day.toString() +
|
||||||
|
" " +
|
||||||
|
dateTime.hour.toString() +
|
||||||
|
":" +
|
||||||
|
dateTime.minute.toString() +
|
||||||
|
":" +
|
||||||
|
dateTime.second.toString();
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
static String getFormattedDate(DateTime dateTime, String formattedString) {
|
||||||
|
return DateFormat(formattedString).format(dateTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
static convertISODateToJsonDate(String isoDate) {
|
||||||
|
return "/Date(" + DateFormat('mm-dd-yyy').parse(isoDate).millisecondsSinceEpoch.toString() + ")/";
|
||||||
|
}
|
||||||
|
|
||||||
|
// static String getDay(DayOfWeek dayOfWeek) {
|
||||||
|
// switch (dayOfWeek) {
|
||||||
|
// case DayOfWeek.Monday:
|
||||||
|
// return "Monday";
|
||||||
|
// break;
|
||||||
|
// case DayOfWeek.Tuesday:
|
||||||
|
// return "Tuesday";
|
||||||
|
// break;
|
||||||
|
// case DayOfWeek.Wednesday:
|
||||||
|
// return "Wednesday";
|
||||||
|
// break;
|
||||||
|
// case DayOfWeek.Thursday:
|
||||||
|
// return "Thursday";
|
||||||
|
// break;
|
||||||
|
// case DayOfWeek.Friday:
|
||||||
|
// return "Friday";
|
||||||
|
// break;
|
||||||
|
// case DayOfWeek.Saturday:
|
||||||
|
// return "Saturday";
|
||||||
|
// break;
|
||||||
|
// case DayOfWeek.Sunday:
|
||||||
|
// return "Sunday";
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// return "";
|
||||||
|
// }
|
||||||
|
}
|
||||||
@ -1,13 +1,67 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
|
||||||
|
import 'package:shimmer/shimmer.dart';
|
||||||
|
|
||||||
extension WidgetExtensions on Widget {
|
extension WidgetExtensions on Widget {
|
||||||
Widget onPress(VoidCallback onTap) => InkWell(onTap: onTap, child: this);
|
Widget onPress(VoidCallback onTap) => InkWell(onTap: onTap, child: this);
|
||||||
|
|
||||||
Widget get expanded => Expanded(child: this);
|
Widget get expanded => Expanded(child: this);
|
||||||
|
|
||||||
|
Widget get center => Center(child: this);
|
||||||
|
|
||||||
Widget paddingAll(double _value) => Padding(padding: EdgeInsets.all(_value), child: this);
|
Widget paddingAll(double _value) => Padding(padding: EdgeInsets.all(_value), child: this);
|
||||||
|
|
||||||
Widget paddingOnly({double left = 0.0, double right = 0.0, double top = 0.0, double bottom = 0.0}) =>
|
Widget paddingOnly({double left = 0.0, double right = 0.0, double top = 0.0, double bottom = 0.0}) =>
|
||||||
Padding(padding: EdgeInsets.only(left: left, right: right, top: top, bottom: bottom), child: this);
|
Padding(padding: EdgeInsets.only(left: left, right: right, top: top, bottom: bottom), child: this);
|
||||||
|
|
||||||
|
Widget toShimmer({bool isShow = true}) => isShow
|
||||||
|
? Shimmer.fromColors(
|
||||||
|
baseColor: Color(0xffe8eff0),
|
||||||
|
highlightColor: Colors.white,
|
||||||
|
child: Container(
|
||||||
|
child: this,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: Container(
|
||||||
|
child: this,
|
||||||
|
);
|
||||||
|
|
||||||
|
Widget animatedSwither() => AnimatedSwitcher(
|
||||||
|
duration: const Duration(milliseconds: 500),
|
||||||
|
// transitionBuilder: (Widget child, Animation<double> animation) {
|
||||||
|
// return ScaleTransition(scale: animation, child: child);
|
||||||
|
// },
|
||||||
|
switchInCurve: Curves.linearToEaseOut,
|
||||||
|
switchOutCurve: Curves.linearToEaseOut,
|
||||||
|
child: this,
|
||||||
|
);
|
||||||
|
|
||||||
|
Widget objectContainerView({String title = ""}) {
|
||||||
|
return Container(
|
||||||
|
padding: const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(15),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: const Color(0xff000000).withOpacity(.05),
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: const Offset(0, -3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
if (title.isNotEmpty) title.toText16(),
|
||||||
|
if (title.isNotEmpty) 12.height,
|
||||||
|
this,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,39 @@
|
|||||||
|
class GetAccrualBalancesList {
|
||||||
|
GetAccrualBalancesList({
|
||||||
|
this.accrualNetEntitlement,
|
||||||
|
this.accrualUsedEntitlement,
|
||||||
|
this.accrualYearlyEntitlement,
|
||||||
|
this.accuralPlanName,
|
||||||
|
this.endDate,
|
||||||
|
this.lastAccrualDate,
|
||||||
|
this.startDate,
|
||||||
|
});
|
||||||
|
|
||||||
|
double? accrualNetEntitlement;
|
||||||
|
int? accrualUsedEntitlement;
|
||||||
|
dynamic accrualYearlyEntitlement;
|
||||||
|
String? accuralPlanName;
|
||||||
|
String? endDate;
|
||||||
|
String? lastAccrualDate;
|
||||||
|
String? startDate;
|
||||||
|
|
||||||
|
factory GetAccrualBalancesList.fromJson(Map<String, dynamic> json) => GetAccrualBalancesList(
|
||||||
|
accrualNetEntitlement: json["ACCRUAL_NET_ENTITLEMENT"] == null ? null : json["ACCRUAL_NET_ENTITLEMENT"].toDouble(),
|
||||||
|
accrualUsedEntitlement: json["ACCRUAL_USED_ENTITLEMENT"] == null ? null : json["ACCRUAL_USED_ENTITLEMENT"],
|
||||||
|
accrualYearlyEntitlement: json["ACCRUAL_YEARLY_ENTITLEMENT"],
|
||||||
|
accuralPlanName: json["ACCURAL_PLAN_NAME"] == null ? null : json["ACCURAL_PLAN_NAME"],
|
||||||
|
endDate: json["END_DATE"] == null ? null : json["END_DATE"],
|
||||||
|
lastAccrualDate: json["LAST_ACCRUAL_DATE"] == null ? null : json["LAST_ACCRUAL_DATE"],
|
||||||
|
startDate: json["START_DATE"] == null ? null : json["START_DATE"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => {
|
||||||
|
"ACCRUAL_NET_ENTITLEMENT": accrualNetEntitlement == null ? null : accrualNetEntitlement,
|
||||||
|
"ACCRUAL_USED_ENTITLEMENT": accrualUsedEntitlement == null ? null : accrualUsedEntitlement,
|
||||||
|
"ACCRUAL_YEARLY_ENTITLEMENT": accrualYearlyEntitlement,
|
||||||
|
"ACCURAL_PLAN_NAME": accuralPlanName == null ? null : accuralPlanName,
|
||||||
|
"END_DATE": endDate == null ? null : endDate,
|
||||||
|
"LAST_ACCRUAL_DATE": lastAccrualDate == null ? null : lastAccrualDate,
|
||||||
|
"START_DATE": startDate == null ? null : startDate,
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
class GetAttendanceTracking {
|
||||||
|
GetAttendanceTracking({
|
||||||
|
this.pBreakHours,
|
||||||
|
this.pLateInHours,
|
||||||
|
this.pRemainingHours,
|
||||||
|
this.pReturnMsg,
|
||||||
|
this.pReturnStatus,
|
||||||
|
this.pScheduledHours,
|
||||||
|
this.pShtName,
|
||||||
|
this.pSpentHours,
|
||||||
|
this.pSwipesExemptedFlag,
|
||||||
|
this.pSwipeIn,
|
||||||
|
this.pSwipeOut,
|
||||||
|
});
|
||||||
|
|
||||||
|
String? pBreakHours;
|
||||||
|
String? pLateInHours;
|
||||||
|
String? pRemainingHours;
|
||||||
|
String? pReturnMsg;
|
||||||
|
String? pReturnStatus;
|
||||||
|
String? pScheduledHours;
|
||||||
|
String? pShtName;
|
||||||
|
String? pSpentHours;
|
||||||
|
String? pSwipesExemptedFlag;
|
||||||
|
dynamic pSwipeIn;
|
||||||
|
dynamic pSwipeOut;
|
||||||
|
|
||||||
|
factory GetAttendanceTracking.fromMap(Map<String, dynamic> json) => GetAttendanceTracking(
|
||||||
|
pBreakHours: json["P_BREAK_HOURS"] == null ? null : json["P_BREAK_HOURS"],
|
||||||
|
pLateInHours: json["P_LATE_IN_HOURS"] == null ? null : json["P_LATE_IN_HOURS"],
|
||||||
|
pRemainingHours: json["P_REMAINING_HOURS"] == null ? null : json["P_REMAINING_HOURS"],
|
||||||
|
pReturnMsg: json["P_RETURN_MSG"] == null ? null : json["P_RETURN_MSG"],
|
||||||
|
pReturnStatus: json["P_RETURN_STATUS"] == null ? null : json["P_RETURN_STATUS"],
|
||||||
|
pScheduledHours: json["P_SCHEDULED_HOURS"] == null ? null : json["P_SCHEDULED_HOURS"],
|
||||||
|
pShtName: json["P_SHT_NAME"] == null ? null : json["P_SHT_NAME"],
|
||||||
|
pSpentHours: json["P_SPENT_HOURS"] == null ? null : json["P_SPENT_HOURS"],
|
||||||
|
pSwipesExemptedFlag: json["P_SWIPES_EXEMPTED_FLAG"] == null ? null : json["P_SWIPES_EXEMPTED_FLAG"],
|
||||||
|
pSwipeIn: json["P_SWIPE_IN"],
|
||||||
|
pSwipeOut: json["P_SWIPE_OUT"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> toMap() => {
|
||||||
|
"P_BREAK_HOURS": pBreakHours == null ? null : pBreakHours,
|
||||||
|
"P_LATE_IN_HOURS": pLateInHours == null ? null : pLateInHours,
|
||||||
|
"P_REMAINING_HOURS": pRemainingHours == null ? null : pRemainingHours,
|
||||||
|
"P_RETURN_MSG": pReturnMsg == null ? null : pReturnMsg,
|
||||||
|
"P_RETURN_STATUS": pReturnStatus == null ? null : pReturnStatus,
|
||||||
|
"P_SCHEDULED_HOURS": pScheduledHours == null ? null : pScheduledHours,
|
||||||
|
"P_SHT_NAME": pShtName == null ? null : pShtName,
|
||||||
|
"P_SPENT_HOURS": pSpentHours == null ? null : pSpentHours,
|
||||||
|
"P_SWIPES_EXEMPTED_FLAG": pSwipesExemptedFlag == null ? null : pSwipesExemptedFlag,
|
||||||
|
"P_SWIPE_IN": pSwipeIn,
|
||||||
|
"P_SWIPE_OUT": pSwipeOut,
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
class GetOpenMissingSwipesList {
|
||||||
|
GetOpenMissingSwipesList({
|
||||||
|
this.pOpenMissingSwipes,
|
||||||
|
this.pReturnMsg,
|
||||||
|
this.pReturnStatus,
|
||||||
|
});
|
||||||
|
|
||||||
|
int? pOpenMissingSwipes;
|
||||||
|
String? pReturnMsg;
|
||||||
|
String? pReturnStatus;
|
||||||
|
|
||||||
|
factory GetOpenMissingSwipesList.fromJson(Map<String, dynamic> json) => GetOpenMissingSwipesList(
|
||||||
|
pOpenMissingSwipes: json["P_OPEN_MISSING_SWIPES"] == null ? null : json["P_OPEN_MISSING_SWIPES"],
|
||||||
|
pReturnMsg: json["P_RETURN_MSG"] == null ? null : json["P_RETURN_MSG"],
|
||||||
|
pReturnStatus: json["P_RETURN_STATUS"] == null ? null : json["P_RETURN_STATUS"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => {
|
||||||
|
"P_OPEN_MISSING_SWIPES": pOpenMissingSwipes == null ? null : pOpenMissingSwipes,
|
||||||
|
"P_RETURN_MSG": pReturnMsg == null ? null : pReturnMsg,
|
||||||
|
"P_RETURN_STATUS": pReturnStatus == null ? null : pReturnStatus,
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
class GetOpenNotificationsList {
|
||||||
|
GetOpenNotificationsList({
|
||||||
|
this.itemType,
|
||||||
|
this.itemTypeDisplayName,
|
||||||
|
this.openNtfNumber,
|
||||||
|
});
|
||||||
|
|
||||||
|
String? itemType;
|
||||||
|
String? itemTypeDisplayName;
|
||||||
|
int? openNtfNumber;
|
||||||
|
|
||||||
|
factory GetOpenNotificationsList.fromMap(Map<String, dynamic> json) => GetOpenNotificationsList(
|
||||||
|
itemType: json["ITEM_TYPE"] == null ? null : json["ITEM_TYPE"],
|
||||||
|
itemTypeDisplayName: json["ITEM_TYPE_DISPLAY_NAME"] == null ? null : json["ITEM_TYPE_DISPLAY_NAME"],
|
||||||
|
openNtfNumber: json["OPEN_NTF_NUMBER"] == null ? null : json["OPEN_NTF_NUMBER"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> toMap() => {
|
||||||
|
"ITEM_TYPE": itemType == null ? null : itemType,
|
||||||
|
"ITEM_TYPE_DISPLAY_NAME": itemTypeDisplayName == null ? null : itemTypeDisplayName,
|
||||||
|
"OPEN_NTF_NUMBER": openNtfNumber == null ? null : openNtfNumber,
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -0,0 +1,255 @@
|
|||||||
|
// To parse this JSON data, do
|
||||||
|
//
|
||||||
|
// final itgFormsModel = itgFormsModelFromMap(jsonString);
|
||||||
|
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
ItgFormsModel itgFormsModelFromMap(String str) => ItgFormsModel.fromJson(json.decode(str));
|
||||||
|
|
||||||
|
String itgFormsModelToMap(ItgFormsModel data) => json.encode(data.toMap());
|
||||||
|
|
||||||
|
class ItgFormsModel {
|
||||||
|
ItgFormsModel({
|
||||||
|
this.date,
|
||||||
|
this.languageId,
|
||||||
|
this.serviceName,
|
||||||
|
this.time,
|
||||||
|
this.androidLink,
|
||||||
|
this.authenticationTokenId,
|
||||||
|
this.data,
|
||||||
|
this.dataw,
|
||||||
|
this.dietType,
|
||||||
|
this.dietTypeId,
|
||||||
|
this.errorCode,
|
||||||
|
this.errorEndUserMessage,
|
||||||
|
this.errorEndUserMessageN,
|
||||||
|
this.errorMessage,
|
||||||
|
this.errorType,
|
||||||
|
this.foodCategory,
|
||||||
|
this.iosLink,
|
||||||
|
this.isAuthenticated,
|
||||||
|
this.mealOrderStatus,
|
||||||
|
this.mealType,
|
||||||
|
this.messageStatus,
|
||||||
|
this.numberOfResultRecords,
|
||||||
|
this.patientBlodType,
|
||||||
|
this.successMsg,
|
||||||
|
this.successMsgN,
|
||||||
|
this.vidaUpdatedResponse,
|
||||||
|
this.itgRequest,
|
||||||
|
this.itgFormAttachmentsList,
|
||||||
|
this.message,
|
||||||
|
this.mohemmItgDepartmentSectionsList,
|
||||||
|
this.mohemmItgProjectDepartmentsList,
|
||||||
|
this.mohemmItgResponseItem,
|
||||||
|
this.mohemmItgSectionTopicsList,
|
||||||
|
this.mohemmItgTicketDetailsList,
|
||||||
|
this.mohemmItgTicketTransactionsList,
|
||||||
|
this.mohemmItgTicketsByEmployeeList,
|
||||||
|
this.mohemmItgProjectsList,
|
||||||
|
this.mohemmItgTicketTypesList,
|
||||||
|
this.referenceNumber,
|
||||||
|
this.requestType,
|
||||||
|
this.totalCount,
|
||||||
|
this.statuseCode,
|
||||||
|
});
|
||||||
|
|
||||||
|
dynamic date;
|
||||||
|
int? languageId;
|
||||||
|
int? serviceName;
|
||||||
|
dynamic time;
|
||||||
|
dynamic androidLink;
|
||||||
|
dynamic authenticationTokenId;
|
||||||
|
dynamic data;
|
||||||
|
bool? dataw;
|
||||||
|
int? dietType;
|
||||||
|
int? dietTypeId;
|
||||||
|
dynamic errorCode;
|
||||||
|
dynamic errorEndUserMessage;
|
||||||
|
dynamic errorEndUserMessageN;
|
||||||
|
dynamic errorMessage;
|
||||||
|
int? errorType;
|
||||||
|
int? foodCategory;
|
||||||
|
dynamic iosLink;
|
||||||
|
bool? isAuthenticated;
|
||||||
|
int? mealOrderStatus;
|
||||||
|
int? mealType;
|
||||||
|
int? messageStatus;
|
||||||
|
int? numberOfResultRecords;
|
||||||
|
dynamic patientBlodType;
|
||||||
|
String? successMsg;
|
||||||
|
dynamic successMsgN;
|
||||||
|
dynamic vidaUpdatedResponse;
|
||||||
|
dynamic itgRequest;
|
||||||
|
dynamic itgFormAttachmentsList;
|
||||||
|
String? message;
|
||||||
|
dynamic mohemmItgDepartmentSectionsList;
|
||||||
|
dynamic mohemmItgProjectDepartmentsList;
|
||||||
|
dynamic mohemmItgResponseItem;
|
||||||
|
dynamic mohemmItgSectionTopicsList;
|
||||||
|
dynamic mohemmItgTicketDetailsList;
|
||||||
|
dynamic mohemmItgTicketTransactionsList;
|
||||||
|
dynamic mohemmItgTicketsByEmployeeList;
|
||||||
|
dynamic mohemmItgProjectsList;
|
||||||
|
dynamic mohemmItgTicketTypesList;
|
||||||
|
DateTime? referenceNumber;
|
||||||
|
List<RequestType>? requestType;
|
||||||
|
int? totalCount;
|
||||||
|
int? statuseCode;
|
||||||
|
|
||||||
|
factory ItgFormsModel.fromJson(Map<String, dynamic> json) => ItgFormsModel(
|
||||||
|
date: json["Date"],
|
||||||
|
languageId: json["LanguageID"] == null ? null : json["LanguageID"],
|
||||||
|
serviceName: json["ServiceName"] == null ? null : json["ServiceName"],
|
||||||
|
time: json["Time"],
|
||||||
|
androidLink: json["AndroidLink"],
|
||||||
|
authenticationTokenId: json["AuthenticationTokenID"],
|
||||||
|
data: json["Data"],
|
||||||
|
dataw: json["Dataw"] == null ? null : json["Dataw"],
|
||||||
|
dietType: json["DietType"] == null ? null : json["DietType"],
|
||||||
|
dietTypeId: json["DietTypeID"] == null ? null : json["DietTypeID"],
|
||||||
|
errorCode: json["ErrorCode"],
|
||||||
|
errorEndUserMessage: json["ErrorEndUserMessage"],
|
||||||
|
errorEndUserMessageN: json["ErrorEndUserMessageN"],
|
||||||
|
errorMessage: json["ErrorMessage"],
|
||||||
|
errorType: json["ErrorType"] == null ? null : json["ErrorType"],
|
||||||
|
foodCategory: json["FoodCategory"] == null ? null : json["FoodCategory"],
|
||||||
|
iosLink: json["IOSLink"],
|
||||||
|
isAuthenticated: json["IsAuthenticated"] == null ? null : json["IsAuthenticated"],
|
||||||
|
mealOrderStatus: json["MealOrderStatus"] == null ? null : json["MealOrderStatus"],
|
||||||
|
mealType: json["MealType"] == null ? null : json["MealType"],
|
||||||
|
messageStatus: json["MessageStatus"] == null ? null : json["MessageStatus"],
|
||||||
|
numberOfResultRecords: json["NumberOfResultRecords"] == null ? null : json["NumberOfResultRecords"],
|
||||||
|
patientBlodType: json["PatientBlodType"],
|
||||||
|
successMsg: json["SuccessMsg"] == null ? null : json["SuccessMsg"],
|
||||||
|
successMsgN: json["SuccessMsgN"],
|
||||||
|
vidaUpdatedResponse: json["VidaUpdatedResponse"],
|
||||||
|
itgRequest: json["ITGRequest"],
|
||||||
|
itgFormAttachmentsList: json["Itg_FormAttachmentsList"],
|
||||||
|
message: json["Message"] == null ? null : json["Message"],
|
||||||
|
mohemmItgDepartmentSectionsList: json["Mohemm_ITG_DepartmentSectionsList"],
|
||||||
|
mohemmItgProjectDepartmentsList: json["Mohemm_ITG_ProjectDepartmentsList"],
|
||||||
|
mohemmItgResponseItem: json["Mohemm_ITG_ResponseItem"],
|
||||||
|
mohemmItgSectionTopicsList: json["Mohemm_ITG_SectionTopicsList"],
|
||||||
|
mohemmItgTicketDetailsList: json["Mohemm_ITG_TicketDetailsList"],
|
||||||
|
mohemmItgTicketTransactionsList: json["Mohemm_ITG_TicketTransactionsList"],
|
||||||
|
mohemmItgTicketsByEmployeeList: json["Mohemm_ITG_TicketsByEmployeeList"],
|
||||||
|
mohemmItgProjectsList: json["Mohemm_Itg_ProjectsList"],
|
||||||
|
mohemmItgTicketTypesList: json["Mohemm_Itg_TicketTypesList"],
|
||||||
|
referenceNumber: json["ReferenceNumber"] == null ? null : DateTime.parse(json["ReferenceNumber"]),
|
||||||
|
requestType: json["RequestType"] == null ? <RequestType>[] : json['RequestType']!.map<RequestType>((v) => RequestType.fromJson(v)).toList(),
|
||||||
|
totalCount: json["TotalCount"] == null ? null : json["TotalCount"],
|
||||||
|
statuseCode: json["statuseCode"] == null ? null : json["statuseCode"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> toMap() => {
|
||||||
|
"Date": date,
|
||||||
|
"LanguageID": languageId == null ? null : languageId,
|
||||||
|
"ServiceName": serviceName == null ? null : serviceName,
|
||||||
|
"Time": time,
|
||||||
|
"AndroidLink": androidLink,
|
||||||
|
"AuthenticationTokenID": authenticationTokenId,
|
||||||
|
"Data": data,
|
||||||
|
"Dataw": dataw == null ? null : dataw,
|
||||||
|
"DietType": dietType == null ? null : dietType,
|
||||||
|
"DietTypeID": dietTypeId == null ? null : dietTypeId,
|
||||||
|
"ErrorCode": errorCode,
|
||||||
|
"ErrorEndUserMessage": errorEndUserMessage,
|
||||||
|
"ErrorEndUserMessageN": errorEndUserMessageN,
|
||||||
|
"ErrorMessage": errorMessage,
|
||||||
|
"ErrorType": errorType == null ? null : errorType,
|
||||||
|
"FoodCategory": foodCategory == null ? null : foodCategory,
|
||||||
|
"IOSLink": iosLink,
|
||||||
|
"IsAuthenticated": isAuthenticated == null ? null : isAuthenticated,
|
||||||
|
"MealOrderStatus": mealOrderStatus == null ? null : mealOrderStatus,
|
||||||
|
"MealType": mealType == null ? null : mealType,
|
||||||
|
"MessageStatus": messageStatus == null ? null : messageStatus,
|
||||||
|
"NumberOfResultRecords": numberOfResultRecords == null ? null : numberOfResultRecords,
|
||||||
|
"PatientBlodType": patientBlodType,
|
||||||
|
"SuccessMsg": successMsg == null ? null : successMsg,
|
||||||
|
"SuccessMsgN": successMsgN,
|
||||||
|
"VidaUpdatedResponse": vidaUpdatedResponse,
|
||||||
|
"ITGRequest": itgRequest,
|
||||||
|
"Itg_FormAttachmentsList": itgFormAttachmentsList,
|
||||||
|
"Message": message == null ? null : message,
|
||||||
|
"Mohemm_ITG_DepartmentSectionsList": mohemmItgDepartmentSectionsList,
|
||||||
|
"Mohemm_ITG_ProjectDepartmentsList": mohemmItgProjectDepartmentsList,
|
||||||
|
"Mohemm_ITG_ResponseItem": mohemmItgResponseItem,
|
||||||
|
"Mohemm_ITG_SectionTopicsList": mohemmItgSectionTopicsList,
|
||||||
|
"Mohemm_ITG_TicketDetailsList": mohemmItgTicketDetailsList,
|
||||||
|
"Mohemm_ITG_TicketTransactionsList": mohemmItgTicketTransactionsList,
|
||||||
|
"Mohemm_ITG_TicketsByEmployeeList": mohemmItgTicketsByEmployeeList,
|
||||||
|
"Mohemm_Itg_ProjectsList": mohemmItgProjectsList,
|
||||||
|
"Mohemm_Itg_TicketTypesList": mohemmItgTicketTypesList,
|
||||||
|
"ReferenceNumber": referenceNumber == null ? null : referenceNumber!.toIso8601String(),
|
||||||
|
"RequestType": requestType == null ? null : requestType!.map((v) => v.toJson()).toList(),
|
||||||
|
"TotalCount": totalCount == null ? null : totalCount,
|
||||||
|
"statuseCode": statuseCode == null ? null : statuseCode,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class RequestType {
|
||||||
|
int? itemCount;
|
||||||
|
List<RequestDetails>? requestDetails;
|
||||||
|
String? requestTypeCode;
|
||||||
|
String? requestTypeName;
|
||||||
|
|
||||||
|
RequestType({this.itemCount, this.requestDetails, this.requestTypeCode, this.requestTypeName});
|
||||||
|
|
||||||
|
RequestType.fromJson(Map<String, dynamic> json) {
|
||||||
|
itemCount = json['ItemCount'];
|
||||||
|
if (json['RequestDetails'] != null) {
|
||||||
|
requestDetails = <RequestDetails>[];
|
||||||
|
json['RequestDetails'].forEach((v) {
|
||||||
|
requestDetails!.add(new RequestDetails.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
requestTypeCode = json['RequestTypeCode'];
|
||||||
|
requestTypeName = json['RequestTypeName'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ItemCount'] = this.itemCount;
|
||||||
|
if (this.requestDetails != null) {
|
||||||
|
data['RequestDetails'] = this.requestDetails!.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
data['RequestTypeCode'] = this.requestTypeCode;
|
||||||
|
data['RequestTypeName'] = this.requestTypeName;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class RequestDetails {
|
||||||
|
int? iD;
|
||||||
|
int? itemID;
|
||||||
|
String? listID;
|
||||||
|
String? listName;
|
||||||
|
String? modifiedDate;
|
||||||
|
String? title;
|
||||||
|
String? uRL;
|
||||||
|
|
||||||
|
RequestDetails({this.iD, this.itemID, this.listID, this.listName, this.modifiedDate, this.title, this.uRL});
|
||||||
|
|
||||||
|
RequestDetails.fromJson(Map<String, dynamic> json) {
|
||||||
|
iD = json['ID'];
|
||||||
|
itemID = json['ItemID'];
|
||||||
|
listID = json['ListID'];
|
||||||
|
listName = json['ListName'];
|
||||||
|
modifiedDate = json['ModifiedDate'];
|
||||||
|
title = json['Title'];
|
||||||
|
uRL = json['URL'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ID'] = this.iD;
|
||||||
|
data['ItemID'] = this.itemID;
|
||||||
|
data['ListID'] = this.listID;
|
||||||
|
data['ListName'] = this.listName;
|
||||||
|
data['ModifiedDate'] = this.modifiedDate;
|
||||||
|
data['Title'] = this.title;
|
||||||
|
data['URL'] = this.uRL;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
class ListMenu {
|
||||||
|
ListMenu({
|
||||||
|
this.menuId,
|
||||||
|
this.menuName,
|
||||||
|
this.menuType,
|
||||||
|
this.requestGroupId,
|
||||||
|
this.requestGroupName,
|
||||||
|
this.respId,
|
||||||
|
this.subMenuName,
|
||||||
|
});
|
||||||
|
|
||||||
|
int? menuId;
|
||||||
|
String? menuName;
|
||||||
|
String? menuType;
|
||||||
|
int? requestGroupId;
|
||||||
|
String? requestGroupName;
|
||||||
|
dynamic? respId;
|
||||||
|
String? subMenuName;
|
||||||
|
|
||||||
|
factory ListMenu.fromJson(Map<String, dynamic> json) => ListMenu(
|
||||||
|
menuId: json["MENU_ID"] == null ? null : json["MENU_ID"],
|
||||||
|
menuName: json["MENU_NAME"] == null ? null : json["MENU_NAME"],
|
||||||
|
menuType: json["MENU_TYPE"] == null ? null : json["MENU_TYPE"],
|
||||||
|
requestGroupId: json["REQUEST_GROUP_ID"] == null ? null : json["REQUEST_GROUP_ID"],
|
||||||
|
requestGroupName: json["REQUEST_GROUP_NAME"] == null ? null : json["REQUEST_GROUP_NAME"],
|
||||||
|
respId: json["RESP_ID"],
|
||||||
|
subMenuName: json["SUB_MENU_NAME"] == null ? null : json["SUB_MENU_NAME"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => {
|
||||||
|
"MENU_ID": menuId == null ? null : menuId,
|
||||||
|
"MENU_NAME": menuName == null ? null : menuName,
|
||||||
|
"MENU_TYPE": menuType == null ? null : menuType,
|
||||||
|
"REQUEST_GROUP_ID": requestGroupId == null ? null : requestGroupId,
|
||||||
|
"REQUEST_GROUP_NAME": requestGroupName == null ? null : requestGroupName,
|
||||||
|
"RESP_ID": respId,
|
||||||
|
"SUB_MENU_NAME": subMenuName == null ? null : subMenuName,
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -0,0 +1,60 @@
|
|||||||
|
class GetMenuEntriesList {
|
||||||
|
GetMenuEntriesList({
|
||||||
|
this.addButton,
|
||||||
|
this.deleteButton,
|
||||||
|
this.entrySequence,
|
||||||
|
this.functionName,
|
||||||
|
this.icon,
|
||||||
|
this.lvl,
|
||||||
|
this.menuEntryType,
|
||||||
|
this.menuName,
|
||||||
|
this.parentMenuName,
|
||||||
|
this.prompt,
|
||||||
|
this.requestType,
|
||||||
|
this.updateButton,
|
||||||
|
});
|
||||||
|
|
||||||
|
String? addButton;
|
||||||
|
String? deleteButton;
|
||||||
|
int? entrySequence;
|
||||||
|
String? functionName;
|
||||||
|
String? icon;
|
||||||
|
int? lvl;
|
||||||
|
String? menuEntryType;
|
||||||
|
String? menuName;
|
||||||
|
String? parentMenuName;
|
||||||
|
String? prompt;
|
||||||
|
String? requestType;
|
||||||
|
String? updateButton;
|
||||||
|
|
||||||
|
factory GetMenuEntriesList.fromJson(Map<String, dynamic> json) => GetMenuEntriesList(
|
||||||
|
addButton: json["ADD_BUTTON"] == null ? null : json["ADD_BUTTON"],
|
||||||
|
deleteButton: json["DELETE_BUTTON"] == null ? null : json["DELETE_BUTTON"],
|
||||||
|
entrySequence: json["ENTRY_SEQUENCE"] == null ? null : json["ENTRY_SEQUENCE"],
|
||||||
|
functionName: json["FUNCTION_NAME"] == null ? null : json["FUNCTION_NAME"],
|
||||||
|
icon: json["ICON"] == null ? null : json["ICON"],
|
||||||
|
lvl: json["LVL"] == null ? null : json["LVL"],
|
||||||
|
menuEntryType: json["MENU_ENTRY_TYPE"] == null ? null : json["MENU_ENTRY_TYPE"],
|
||||||
|
menuName: json["MENU_NAME"] == null ? null : json["MENU_NAME"],
|
||||||
|
parentMenuName: json["PARENT_MENU_NAME"] == null ? null : json["PARENT_MENU_NAME"],
|
||||||
|
prompt: json["PROMPT"] == null ? null : json["PROMPT"],
|
||||||
|
requestType: json["REQUEST_TYPE"] == null ? null : json["REQUEST_TYPE"],
|
||||||
|
updateButton: json["UPDATE_BUTTON"] == null ? null :json["UPDATE_BUTTON"],
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => {
|
||||||
|
"ADD_BUTTON": addButton == null ? null :addButton,
|
||||||
|
"DELETE_BUTTON": deleteButton == null ? null : deleteButton,
|
||||||
|
"ENTRY_SEQUENCE": entrySequence == null ? null : entrySequence,
|
||||||
|
"FUNCTION_NAME": functionName == null ? null : functionName,
|
||||||
|
"ICON": icon == null ? null : icon,
|
||||||
|
"LVL": lvl == null ? null : lvl,
|
||||||
|
"MENU_ENTRY_TYPE": menuEntryType == null ? null : menuEntryType,
|
||||||
|
"MENU_NAME": menuName == null ? null : menuName,
|
||||||
|
"PARENT_MENU_NAME": parentMenuName == null ? null : parentMenuName,
|
||||||
|
"PROMPT": prompt == null ? null : prompt,
|
||||||
|
"REQUEST_TYPE": requestType == null ? null : requestType,
|
||||||
|
"UPDATE_BUTTON": updateButton == null ? null : updateButton,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart';
|
||||||
|
|
||||||
|
class Menus {
|
||||||
|
GetMenuEntriesList menuEntry;
|
||||||
|
List<GetMenuEntriesList> menuEntiesList;
|
||||||
|
|
||||||
|
Menus(this.menuEntry, this.menuEntiesList);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,97 @@
|
|||||||
|
|
||||||
|
class GetAbsenceCollectionNotificationBodyList {
|
||||||
|
List<CollectionNotification>? collectionNotification;
|
||||||
|
|
||||||
|
GetAbsenceCollectionNotificationBodyList({this.collectionNotification});
|
||||||
|
|
||||||
|
GetAbsenceCollectionNotificationBodyList.fromJson(Map<String, dynamic> json) {
|
||||||
|
if (json['Collection_Notification'] != null) {
|
||||||
|
collectionNotification = <CollectionNotification>[];
|
||||||
|
json['Collection_Notification'].forEach((v) {
|
||||||
|
collectionNotification!.add(new CollectionNotification.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CollectionNotification {
|
||||||
|
String? aCTION;
|
||||||
|
String? aPPLICATIONCOLUMNNAME;
|
||||||
|
String? dATATYPE;
|
||||||
|
String? dATEVALUE;
|
||||||
|
String? dESCFLEXCONTEXTCODE;
|
||||||
|
String? dESCFLEXNAME;
|
||||||
|
String? dISPLAYFLAG;
|
||||||
|
int? nUMBERVALUE;
|
||||||
|
String? pREVSEGMENTVALUEDSP;
|
||||||
|
String? sEGMENTNAME;
|
||||||
|
String? sEGMENTPROMPT;
|
||||||
|
int? sEGMENTSEQNUM;
|
||||||
|
String? sEGMENTVALUEDSP;
|
||||||
|
int? tRANSACTIONNUMBER;
|
||||||
|
String? vARCHAR2VALUE;
|
||||||
|
|
||||||
|
CollectionNotification(
|
||||||
|
{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});
|
||||||
|
|
||||||
|
CollectionNotification.fromJson(Map<String, dynamic> json) {
|
||||||
|
aCTION = json['ACTION'];
|
||||||
|
aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME'];
|
||||||
|
dATATYPE = json['DATATYPE'];
|
||||||
|
dATEVALUE = json['DATE_VALUE'];
|
||||||
|
dESCFLEXCONTEXTCODE = json['DESC_FLEX_CONTEXT_CODE'];
|
||||||
|
dESCFLEXNAME = json['DESC_FLEX_NAME'];
|
||||||
|
dISPLAYFLAG = json['DISPLAY_FLAG'];
|
||||||
|
nUMBERVALUE = json['NUMBER_VALUE'];
|
||||||
|
pREVSEGMENTVALUEDSP = json['PREV_SEGMENT_VALUE_DSP'];
|
||||||
|
sEGMENTNAME = json['SEGMENT_NAME'];
|
||||||
|
sEGMENTPROMPT = json['SEGMENT_PROMPT'];
|
||||||
|
sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM'];
|
||||||
|
sEGMENTVALUEDSP = json['SEGMENT_VALUE_DSP'];
|
||||||
|
tRANSACTIONNUMBER = json['TRANSACTION_NUMBER'];
|
||||||
|
vARCHAR2VALUE = json['VARCHAR2_VALUE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ACTION'] = this.aCTION;
|
||||||
|
data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME;
|
||||||
|
data['DATATYPE'] = this.dATATYPE;
|
||||||
|
data['DATE_VALUE'] = this.dATEVALUE;
|
||||||
|
data['DESC_FLEX_CONTEXT_CODE'] = this.dESCFLEXCONTEXTCODE;
|
||||||
|
data['DESC_FLEX_NAME'] = this.dESCFLEXNAME;
|
||||||
|
data['DISPLAY_FLAG'] = this.dISPLAYFLAG;
|
||||||
|
data['NUMBER_VALUE'] = this.nUMBERVALUE;
|
||||||
|
data['PREV_SEGMENT_VALUE_DSP'] = this.pREVSEGMENTVALUEDSP;
|
||||||
|
data['SEGMENT_NAME'] = this.sEGMENTNAME;
|
||||||
|
data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT;
|
||||||
|
data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM;
|
||||||
|
data['SEGMENT_VALUE_DSP'] = this.sEGMENTVALUEDSP;
|
||||||
|
data['TRANSACTION_NUMBER'] = this.tRANSACTIONNUMBER;
|
||||||
|
data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,76 @@
|
|||||||
|
class GetActionHistoryList {
|
||||||
|
String? aCTION;
|
||||||
|
String? aCTIONCODE;
|
||||||
|
String? eMAILADDRESS;
|
||||||
|
String? eMPLOYEEIMAGE;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
bool? isFavorite;
|
||||||
|
String? nAME;
|
||||||
|
String? nOTE;
|
||||||
|
String? nOTIFICATIONDATE;
|
||||||
|
int? nOTIFICATIONID;
|
||||||
|
int? nOOFROWS;
|
||||||
|
String? pOSITIONTITLE;
|
||||||
|
int? rOWNUM;
|
||||||
|
int? sEQUENCE;
|
||||||
|
int? tOROWNUM;
|
||||||
|
String? uSERNAME;
|
||||||
|
|
||||||
|
GetActionHistoryList(
|
||||||
|
{this.aCTION,
|
||||||
|
this.aCTIONCODE,
|
||||||
|
this.eMAILADDRESS,
|
||||||
|
this.eMPLOYEEIMAGE,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.isFavorite,
|
||||||
|
this.nAME,
|
||||||
|
this.nOTE,
|
||||||
|
this.nOTIFICATIONDATE,
|
||||||
|
this.nOTIFICATIONID,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.pOSITIONTITLE,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.sEQUENCE,
|
||||||
|
this.tOROWNUM,
|
||||||
|
this.uSERNAME});
|
||||||
|
|
||||||
|
GetActionHistoryList.fromJson(Map<String, dynamic> json) {
|
||||||
|
aCTION = json['ACTION'];
|
||||||
|
aCTIONCODE = json['ACTION_CODE'];
|
||||||
|
eMAILADDRESS = json['EMAIL_ADDRESS'];
|
||||||
|
eMPLOYEEIMAGE = json['EMPLOYEE_IMAGE'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
isFavorite = json['IsFavorite'];
|
||||||
|
nAME = json['NAME'];
|
||||||
|
nOTE = json['NOTE'];
|
||||||
|
nOTIFICATIONDATE = json['NOTIFICATION_DATE'];
|
||||||
|
nOTIFICATIONID = json['NOTIFICATION_ID'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
pOSITIONTITLE = json['POSITION_TITLE'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
sEQUENCE = json['SEQUENCE'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
uSERNAME = json['USER_NAME'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ACTION'] = this.aCTION;
|
||||||
|
data['ACTION_CODE'] = this.aCTIONCODE;
|
||||||
|
data['EMAIL_ADDRESS'] = this.eMAILADDRESS;
|
||||||
|
data['EMPLOYEE_IMAGE'] = this.eMPLOYEEIMAGE;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['IsFavorite'] = this.isFavorite;
|
||||||
|
data['NAME'] = this.nAME;
|
||||||
|
data['NOTE'] = this.nOTE;
|
||||||
|
data['NOTIFICATION_DATE'] = this.nOTIFICATIONDATE;
|
||||||
|
data['NOTIFICATION_ID'] = this.nOTIFICATIONID;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['POSITION_TITLE'] = this.pOSITIONTITLE;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['SEQUENCE'] = this.sEQUENCE;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
data['USER_NAME'] = this.uSERNAME;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
class GetAttachementList {
|
||||||
|
int? aTTACHEDDOCUMENTID;
|
||||||
|
int? cATEGORYID;
|
||||||
|
int? dATATYPEID;
|
||||||
|
int? dOCUMENTID;
|
||||||
|
String? eNTITYNAME;
|
||||||
|
String? fILECONTENTTYPE;
|
||||||
|
String? fILEDATA;
|
||||||
|
int? fILEID;
|
||||||
|
String? fILENAME;
|
||||||
|
String? pK1VALUE;
|
||||||
|
String? pK2VALUE;
|
||||||
|
String? pK3VALUE;
|
||||||
|
String? pK4VALUE;
|
||||||
|
String? pK5VALUE;
|
||||||
|
int? sEQNUM;
|
||||||
|
|
||||||
|
GetAttachementList(
|
||||||
|
{this.aTTACHEDDOCUMENTID,
|
||||||
|
this.cATEGORYID,
|
||||||
|
this.dATATYPEID,
|
||||||
|
this.dOCUMENTID,
|
||||||
|
this.eNTITYNAME,
|
||||||
|
this.fILECONTENTTYPE,
|
||||||
|
this.fILEDATA,
|
||||||
|
this.fILEID,
|
||||||
|
this.fILENAME,
|
||||||
|
this.pK1VALUE,
|
||||||
|
this.pK2VALUE,
|
||||||
|
this.pK3VALUE,
|
||||||
|
this.pK4VALUE,
|
||||||
|
this.pK5VALUE,
|
||||||
|
this.sEQNUM});
|
||||||
|
|
||||||
|
GetAttachementList.fromJson(Map<String, dynamic> json) {
|
||||||
|
aTTACHEDDOCUMENTID = json['ATTACHED_DOCUMENT_ID'];
|
||||||
|
cATEGORYID = json['CATEGORY_ID'];
|
||||||
|
dATATYPEID = json['DATATYPE_ID'];
|
||||||
|
dOCUMENTID = json['DOCUMENT_ID'];
|
||||||
|
eNTITYNAME = json['ENTITY_NAME'];
|
||||||
|
fILECONTENTTYPE = json['FILE_CONTENT_TYPE'];
|
||||||
|
fILEDATA = json['FILE_DATA'];
|
||||||
|
fILEID = json['FILE_ID'];
|
||||||
|
fILENAME = json['FILE_NAME'];
|
||||||
|
pK1VALUE = json['PK1_VALUE'];
|
||||||
|
pK2VALUE = json['PK2_VALUE'];
|
||||||
|
pK3VALUE = json['PK3_VALUE'];
|
||||||
|
pK4VALUE = json['PK4_VALUE'];
|
||||||
|
pK5VALUE = json['PK5_VALUE'];
|
||||||
|
sEQNUM = json['SEQ_NUM'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ATTACHED_DOCUMENT_ID'] = this.aTTACHEDDOCUMENTID;
|
||||||
|
data['CATEGORY_ID'] = this.cATEGORYID;
|
||||||
|
data['DATATYPE_ID'] = this.dATATYPEID;
|
||||||
|
data['DOCUMENT_ID'] = this.dOCUMENTID;
|
||||||
|
data['ENTITY_NAME'] = this.eNTITYNAME;
|
||||||
|
data['FILE_CONTENT_TYPE'] = this.fILECONTENTTYPE;
|
||||||
|
data['FILE_DATA'] = this.fILEDATA;
|
||||||
|
data['FILE_ID'] = this.fILEID;
|
||||||
|
data['FILE_NAME'] = this.fILENAME;
|
||||||
|
data['PK1_VALUE'] = this.pK1VALUE;
|
||||||
|
data['PK2_VALUE'] = this.pK2VALUE;
|
||||||
|
data['PK3_VALUE'] = this.pK3VALUE;
|
||||||
|
data['PK4_VALUE'] = this.pK4VALUE;
|
||||||
|
data['PK5_VALUE'] = this.pK5VALUE;
|
||||||
|
data['SEQ_NUM'] = this.sEQNUM;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
class GetBasicDetNtfBodyList {
|
||||||
|
String? prevSegmentValueDsp;
|
||||||
|
String? segmentPrompt;
|
||||||
|
String? segmentValueDsp;
|
||||||
|
String? updatedFlag;
|
||||||
|
|
||||||
|
GetBasicDetNtfBodyList({this.prevSegmentValueDsp, this.segmentPrompt, this.segmentValueDsp, this.updatedFlag});
|
||||||
|
|
||||||
|
GetBasicDetNtfBodyList.fromJson(Map<String, dynamic> json) {
|
||||||
|
prevSegmentValueDsp = json['PREV_SEGMENT_VALUE_DSP'];
|
||||||
|
segmentPrompt = json['SEGMENT_PROMPT'];
|
||||||
|
segmentValueDsp = json['SEGMENT_VALUE_DSP'];
|
||||||
|
updatedFlag = json['UPDATED_FLAG'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['PREV_SEGMENT_VALUE_DSP'] = this.prevSegmentValueDsp;
|
||||||
|
data['SEGMENT_PROMPT'] = this.segmentPrompt;
|
||||||
|
data['SEGMENT_VALUE_DSP'] = this.segmentValueDsp;
|
||||||
|
data['UPDATED_FLAG'] = this.updatedFlag;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,292 @@
|
|||||||
|
class GetItemCreationNtfBodyList {
|
||||||
|
List<ItemCreationHeader>? itemCreationHeader;
|
||||||
|
List<ItemCreationLines>? itemCreationLines;
|
||||||
|
String? pINFORMATION;
|
||||||
|
String? pQUESTION;
|
||||||
|
|
||||||
|
GetItemCreationNtfBodyList({this.itemCreationHeader, this.itemCreationLines, this.pINFORMATION, this.pQUESTION});
|
||||||
|
|
||||||
|
GetItemCreationNtfBodyList.fromJson(Map<String, dynamic> json) {
|
||||||
|
if (json['ItemCreationHeader'] != null) {
|
||||||
|
itemCreationHeader = <ItemCreationHeader>[];
|
||||||
|
json['ItemCreationHeader'].forEach((v) {
|
||||||
|
itemCreationHeader!.add(new ItemCreationHeader.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (json['ItemCreationLines'] != null) {
|
||||||
|
itemCreationLines = <ItemCreationLines>[];
|
||||||
|
json['ItemCreationLines'].forEach((v) {
|
||||||
|
itemCreationLines!.add(new ItemCreationLines.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
pINFORMATION = json['P_INFORMATION'];
|
||||||
|
pQUESTION = json['P_QUESTION'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
if (this.itemCreationHeader != null) {
|
||||||
|
data['ItemCreationHeader'] = this.itemCreationHeader!.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
if (this.itemCreationLines != null) {
|
||||||
|
data['ItemCreationLines'] = this.itemCreationLines!.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
data['P_INFORMATION'] = this.pINFORMATION;
|
||||||
|
data['P_QUESTION'] = this.pQUESTION;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ItemCreationHeader {
|
||||||
|
String? aNALYZEDBY;
|
||||||
|
int? aNALYZEDBYID;
|
||||||
|
String? aNALYZEDDATE;
|
||||||
|
String? aPPROVEDDATE;
|
||||||
|
String? cATEGORY;
|
||||||
|
int? cATEGORYID;
|
||||||
|
String? iTEMTYPE;
|
||||||
|
String? oPERATINGUNIT;
|
||||||
|
int? oRGID;
|
||||||
|
int? rELATEDID;
|
||||||
|
String? rELATEDTO;
|
||||||
|
String? rEQUESTER;
|
||||||
|
int? rEQUESTERID;
|
||||||
|
String? rEQUESTDATE;
|
||||||
|
String? sTATUS;
|
||||||
|
int? tRANSACTIONHEADERID;
|
||||||
|
String? uRGENTFLAG;
|
||||||
|
String? uRGENTFLAGDISP;
|
||||||
|
String? wFITEMKEYANALYSIS;
|
||||||
|
String? wFITEMKEYAPPROVAL;
|
||||||
|
String? wFITEMTYPE;
|
||||||
|
|
||||||
|
ItemCreationHeader(
|
||||||
|
{this.aNALYZEDBY,
|
||||||
|
this.aNALYZEDBYID,
|
||||||
|
this.aNALYZEDDATE,
|
||||||
|
this.aPPROVEDDATE,
|
||||||
|
this.cATEGORY,
|
||||||
|
this.cATEGORYID,
|
||||||
|
this.iTEMTYPE,
|
||||||
|
this.oPERATINGUNIT,
|
||||||
|
this.oRGID,
|
||||||
|
this.rELATEDID,
|
||||||
|
this.rELATEDTO,
|
||||||
|
this.rEQUESTER,
|
||||||
|
this.rEQUESTERID,
|
||||||
|
this.rEQUESTDATE,
|
||||||
|
this.sTATUS,
|
||||||
|
this.tRANSACTIONHEADERID,
|
||||||
|
this.uRGENTFLAG,
|
||||||
|
this.uRGENTFLAGDISP,
|
||||||
|
this.wFITEMKEYANALYSIS,
|
||||||
|
this.wFITEMKEYAPPROVAL,
|
||||||
|
this.wFITEMTYPE});
|
||||||
|
|
||||||
|
ItemCreationHeader.fromJson(Map<String, dynamic> json) {
|
||||||
|
aNALYZEDBY = json['ANALYZED_BY'];
|
||||||
|
aNALYZEDBYID = json['ANALYZED_BY_ID'];
|
||||||
|
aNALYZEDDATE = json['ANALYZED_DATE'];
|
||||||
|
aPPROVEDDATE = json['APPROVED_DATE'];
|
||||||
|
cATEGORY = json['CATEGORY'];
|
||||||
|
cATEGORYID = json['CATEGORY_ID'];
|
||||||
|
iTEMTYPE = json['ITEM_TYPE'];
|
||||||
|
oPERATINGUNIT = json['OPERATING_UNIT'];
|
||||||
|
oRGID = json['ORG_ID'];
|
||||||
|
rELATEDID = json['RELATED_ID'];
|
||||||
|
rELATEDTO = json['RELATED_TO'];
|
||||||
|
rEQUESTER = json['REQUESTER'];
|
||||||
|
rEQUESTERID = json['REQUESTER_ID'];
|
||||||
|
rEQUESTDATE = json['REQUEST_DATE'];
|
||||||
|
sTATUS = json['STATUS'];
|
||||||
|
tRANSACTIONHEADERID = json['TRANSACTION_HEADER_ID'];
|
||||||
|
uRGENTFLAG = json['URGENT_FLAG'];
|
||||||
|
uRGENTFLAGDISP = json['URGENT_FLAG_DISP'];
|
||||||
|
wFITEMKEYANALYSIS = json['WF_ITEM_KEY_ANALYSIS'];
|
||||||
|
wFITEMKEYAPPROVAL = json['WF_ITEM_KEY_APPROVAL'];
|
||||||
|
wFITEMTYPE = json['WF_ITEM_TYPE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ANALYZED_BY'] = this.aNALYZEDBY;
|
||||||
|
data['ANALYZED_BY_ID'] = this.aNALYZEDBYID;
|
||||||
|
data['ANALYZED_DATE'] = this.aNALYZEDDATE;
|
||||||
|
data['APPROVED_DATE'] = this.aPPROVEDDATE;
|
||||||
|
data['CATEGORY'] = this.cATEGORY;
|
||||||
|
data['CATEGORY_ID'] = this.cATEGORYID;
|
||||||
|
data['ITEM_TYPE'] = this.iTEMTYPE;
|
||||||
|
data['OPERATING_UNIT'] = this.oPERATINGUNIT;
|
||||||
|
data['ORG_ID'] = this.oRGID;
|
||||||
|
data['RELATED_ID'] = this.rELATEDID;
|
||||||
|
data['RELATED_TO'] = this.rELATEDTO;
|
||||||
|
data['REQUESTER'] = this.rEQUESTER;
|
||||||
|
data['REQUESTER_ID'] = this.rEQUESTERID;
|
||||||
|
data['REQUEST_DATE'] = this.rEQUESTDATE;
|
||||||
|
data['STATUS'] = this.sTATUS;
|
||||||
|
data['TRANSACTION_HEADER_ID'] = this.tRANSACTIONHEADERID;
|
||||||
|
data['URGENT_FLAG'] = this.uRGENTFLAG;
|
||||||
|
data['URGENT_FLAG_DISP'] = this.uRGENTFLAGDISP;
|
||||||
|
data['WF_ITEM_KEY_ANALYSIS'] = this.wFITEMKEYANALYSIS;
|
||||||
|
data['WF_ITEM_KEY_APPROVAL'] = this.wFITEMKEYAPPROVAL;
|
||||||
|
data['WF_ITEM_TYPE'] = this.wFITEMTYPE;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ItemCreationLines {
|
||||||
|
String? cHARGETOPATIENT;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
int? iNVENTORYITEMID;
|
||||||
|
String? iTEMCODE;
|
||||||
|
String? iTEMCREATIONSTATUS;
|
||||||
|
String? iTEMCREATIONSTATUSDISP;
|
||||||
|
String? iTEMDESCRIPTION;
|
||||||
|
String? iTEMGROUP;
|
||||||
|
String? iTEMGROUPCODE;
|
||||||
|
String? iTEMSUBGROUP;
|
||||||
|
String? iTEMSUBGROUPCODE;
|
||||||
|
String? iTEMTYPE;
|
||||||
|
String? jUSTIFICATION;
|
||||||
|
int? lINENUMBER;
|
||||||
|
int? nOOFROWS;
|
||||||
|
String? pRIMARYUOM;
|
||||||
|
String? pRIMARYUOMCODE;
|
||||||
|
String? pRODUCTDESCRIPTION;
|
||||||
|
String? pRODUCTNAME;
|
||||||
|
int? rOWNUM;
|
||||||
|
String? sTANARDSTATUSDISP;
|
||||||
|
int? sTANDARDMANUFACTURERID;
|
||||||
|
String? sTANDARDMANUFACTURERNAME;
|
||||||
|
String? sTANDARDMFGPARTNUM;
|
||||||
|
String? sTANDARDREJECTREASON;
|
||||||
|
String? sTANDARDSTATUS;
|
||||||
|
String? sUPPLIERCONTACT;
|
||||||
|
String? sUPPLIERNAME;
|
||||||
|
int? tEMPLATEID;
|
||||||
|
String? tEMPLATENAME;
|
||||||
|
int? tOROWNUM;
|
||||||
|
int? tRANSACTIONHEADERID;
|
||||||
|
int? tRANSACTIONLINEID;
|
||||||
|
int? uNITPRICE;
|
||||||
|
String? uSERMANUFACTURERNAME;
|
||||||
|
String? uSERMFGPARTNUM;
|
||||||
|
|
||||||
|
ItemCreationLines(
|
||||||
|
{this.cHARGETOPATIENT,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.iNVENTORYITEMID,
|
||||||
|
this.iTEMCODE,
|
||||||
|
this.iTEMCREATIONSTATUS,
|
||||||
|
this.iTEMCREATIONSTATUSDISP,
|
||||||
|
this.iTEMDESCRIPTION,
|
||||||
|
this.iTEMGROUP,
|
||||||
|
this.iTEMGROUPCODE,
|
||||||
|
this.iTEMSUBGROUP,
|
||||||
|
this.iTEMSUBGROUPCODE,
|
||||||
|
this.iTEMTYPE,
|
||||||
|
this.jUSTIFICATION,
|
||||||
|
this.lINENUMBER,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.pRIMARYUOM,
|
||||||
|
this.pRIMARYUOMCODE,
|
||||||
|
this.pRODUCTDESCRIPTION,
|
||||||
|
this.pRODUCTNAME,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.sTANARDSTATUSDISP,
|
||||||
|
this.sTANDARDMANUFACTURERID,
|
||||||
|
this.sTANDARDMANUFACTURERNAME,
|
||||||
|
this.sTANDARDMFGPARTNUM,
|
||||||
|
this.sTANDARDREJECTREASON,
|
||||||
|
this.sTANDARDSTATUS,
|
||||||
|
this.sUPPLIERCONTACT,
|
||||||
|
this.sUPPLIERNAME,
|
||||||
|
this.tEMPLATEID,
|
||||||
|
this.tEMPLATENAME,
|
||||||
|
this.tOROWNUM,
|
||||||
|
this.tRANSACTIONHEADERID,
|
||||||
|
this.tRANSACTIONLINEID,
|
||||||
|
this.uNITPRICE,
|
||||||
|
this.uSERMANUFACTURERNAME,
|
||||||
|
this.uSERMFGPARTNUM});
|
||||||
|
|
||||||
|
ItemCreationLines.fromJson(Map<String, dynamic> json) {
|
||||||
|
cHARGETOPATIENT = json['CHARGE_TO_PATIENT'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
iNVENTORYITEMID = json['INVENTORY_ITEM_ID'];
|
||||||
|
iTEMCODE = json['ITEM_CODE'];
|
||||||
|
iTEMCREATIONSTATUS = json['ITEM_CREATION_STATUS'];
|
||||||
|
iTEMCREATIONSTATUSDISP = json['ITEM_CREATION_STATUS_DISP'];
|
||||||
|
iTEMDESCRIPTION = json['ITEM_DESCRIPTION'];
|
||||||
|
iTEMGROUP = json['ITEM_GROUP'];
|
||||||
|
iTEMGROUPCODE = json['ITEM_GROUP_CODE'];
|
||||||
|
iTEMSUBGROUP = json['ITEM_SUBGROUP'];
|
||||||
|
iTEMSUBGROUPCODE = json['ITEM_SUBGROUP_CODE'];
|
||||||
|
iTEMTYPE = json['ITEM_TYPE'];
|
||||||
|
jUSTIFICATION = json['JUSTIFICATION'];
|
||||||
|
lINENUMBER = json['LINE_NUMBER'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
pRIMARYUOM = json['PRIMARY_UOM'];
|
||||||
|
pRIMARYUOMCODE = json['PRIMARY_UOM_CODE'];
|
||||||
|
pRODUCTDESCRIPTION = json['PRODUCT_DESCRIPTION'];
|
||||||
|
pRODUCTNAME = json['PRODUCT_NAME'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
sTANARDSTATUSDISP = json['STANARD_STATUS_DISP'];
|
||||||
|
sTANDARDMANUFACTURERID = json['STANDARD_MANUFACTURER_ID'];
|
||||||
|
sTANDARDMANUFACTURERNAME = json['STANDARD_MANUFACTURER_NAME'];
|
||||||
|
sTANDARDMFGPARTNUM = json['STANDARD_MFG_PART_NUM'];
|
||||||
|
sTANDARDREJECTREASON = json['STANDARD_REJECT_REASON'];
|
||||||
|
sTANDARDSTATUS = json['STANDARD_STATUS'];
|
||||||
|
sUPPLIERCONTACT = json['SUPPLIER_CONTACT'];
|
||||||
|
sUPPLIERNAME = json['SUPPLIER_NAME'];
|
||||||
|
tEMPLATEID = json['TEMPLATE_ID'];
|
||||||
|
tEMPLATENAME = json['TEMPLATE_NAME'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
tRANSACTIONHEADERID = json['TRANSACTION_HEADER_ID'];
|
||||||
|
tRANSACTIONLINEID = json['TRANSACTION_LINE_ID'];
|
||||||
|
uNITPRICE = json['UNIT_PRICE'];
|
||||||
|
uSERMANUFACTURERNAME = json['USER_MANUFACTURER_NAME'];
|
||||||
|
uSERMFGPARTNUM = json['USER_MFG_PART_NUM'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['CHARGE_TO_PATIENT'] = this.cHARGETOPATIENT;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['INVENTORY_ITEM_ID'] = this.iNVENTORYITEMID;
|
||||||
|
data['ITEM_CODE'] = this.iTEMCODE;
|
||||||
|
data['ITEM_CREATION_STATUS'] = this.iTEMCREATIONSTATUS;
|
||||||
|
data['ITEM_CREATION_STATUS_DISP'] = this.iTEMCREATIONSTATUSDISP;
|
||||||
|
data['ITEM_DESCRIPTION'] = this.iTEMDESCRIPTION;
|
||||||
|
data['ITEM_GROUP'] = this.iTEMGROUP;
|
||||||
|
data['ITEM_GROUP_CODE'] = this.iTEMGROUPCODE;
|
||||||
|
data['ITEM_SUBGROUP'] = this.iTEMSUBGROUP;
|
||||||
|
data['ITEM_SUBGROUP_CODE'] = this.iTEMSUBGROUPCODE;
|
||||||
|
data['ITEM_TYPE'] = this.iTEMTYPE;
|
||||||
|
data['JUSTIFICATION'] = this.jUSTIFICATION;
|
||||||
|
data['LINE_NUMBER'] = this.lINENUMBER;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['PRIMARY_UOM'] = this.pRIMARYUOM;
|
||||||
|
data['PRIMARY_UOM_CODE'] = this.pRIMARYUOMCODE;
|
||||||
|
data['PRODUCT_DESCRIPTION'] = this.pRODUCTDESCRIPTION;
|
||||||
|
data['PRODUCT_NAME'] = this.pRODUCTNAME;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['STANARD_STATUS_DISP'] = this.sTANARDSTATUSDISP;
|
||||||
|
data['STANDARD_MANUFACTURER_ID'] = this.sTANDARDMANUFACTURERID;
|
||||||
|
data['STANDARD_MANUFACTURER_NAME'] = this.sTANDARDMANUFACTURERNAME;
|
||||||
|
data['STANDARD_MFG_PART_NUM'] = this.sTANDARDMFGPARTNUM;
|
||||||
|
data['STANDARD_REJECT_REASON'] = this.sTANDARDREJECTREASON;
|
||||||
|
data['STANDARD_STATUS'] = this.sTANDARDSTATUS;
|
||||||
|
data['SUPPLIER_CONTACT'] = this.sUPPLIERCONTACT;
|
||||||
|
data['SUPPLIER_NAME'] = this.sUPPLIERNAME;
|
||||||
|
data['TEMPLATE_ID'] = this.tEMPLATEID;
|
||||||
|
data['TEMPLATE_NAME'] = this.tEMPLATENAME;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
data['TRANSACTION_HEADER_ID'] = this.tRANSACTIONHEADERID;
|
||||||
|
data['TRANSACTION_LINE_ID'] = this.tRANSACTIONLINEID;
|
||||||
|
data['UNIT_PRICE'] = this.uNITPRICE;
|
||||||
|
data['USER_MANUFACTURER_NAME'] = this.uSERMANUFACTURERNAME;
|
||||||
|
data['USER_MFG_PART_NUM'] = this.uSERMFGPARTNUM;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
class GetMoItemHistoryList {
|
||||||
|
String? dATEREQUIRED;
|
||||||
|
String? dESCRIPTION;
|
||||||
|
String? fROMLOCATOR;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
String? fROMSUBINVENTORYCODE;
|
||||||
|
String? iTEMCODE;
|
||||||
|
String? lINESTATUSDIS;
|
||||||
|
int? nOOFROWS;
|
||||||
|
String? oPERATINGUNITNAME;
|
||||||
|
String? oRGANIZATIONCODE;
|
||||||
|
int? oRGANIZATIONID;
|
||||||
|
String? oRGANIZATIONNAME;
|
||||||
|
int? qUANTITY;
|
||||||
|
String? rEQUESTNUMBER;
|
||||||
|
int? rOWNUM;
|
||||||
|
String? sHIPTOLOCATION;
|
||||||
|
String? sTATUSDATE;
|
||||||
|
String? tOLOCATOR;
|
||||||
|
int? tOROWNUM;
|
||||||
|
String? tOSUBINVENTORYCODE;
|
||||||
|
String? tRANSACTIONTYPENAME;
|
||||||
|
String? uNITOFMEASURE;
|
||||||
|
|
||||||
|
GetMoItemHistoryList(
|
||||||
|
{this.dATEREQUIRED,
|
||||||
|
this.dESCRIPTION,
|
||||||
|
this.fROMLOCATOR,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.fROMSUBINVENTORYCODE,
|
||||||
|
this.iTEMCODE,
|
||||||
|
this.lINESTATUSDIS,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.oPERATINGUNITNAME,
|
||||||
|
this.oRGANIZATIONCODE,
|
||||||
|
this.oRGANIZATIONID,
|
||||||
|
this.oRGANIZATIONNAME,
|
||||||
|
this.qUANTITY,
|
||||||
|
this.rEQUESTNUMBER,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.sHIPTOLOCATION,
|
||||||
|
this.sTATUSDATE,
|
||||||
|
this.tOLOCATOR,
|
||||||
|
this.tOROWNUM,
|
||||||
|
this.tOSUBINVENTORYCODE,
|
||||||
|
this.tRANSACTIONTYPENAME,
|
||||||
|
this.uNITOFMEASURE});
|
||||||
|
|
||||||
|
GetMoItemHistoryList.fromJson(Map<String, dynamic> json) {
|
||||||
|
dATEREQUIRED = json['DATE_REQUIRED'];
|
||||||
|
dESCRIPTION = json['DESCRIPTION'];
|
||||||
|
fROMLOCATOR = json['FROM_LOCATOR'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
fROMSUBINVENTORYCODE = json['FROM_SUBINVENTORY_CODE'];
|
||||||
|
iTEMCODE = json['ITEM_CODE'];
|
||||||
|
lINESTATUSDIS = json['LINE_STATUS_DIS'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
oPERATINGUNITNAME = json['OPERATING_UNIT_NAME'];
|
||||||
|
oRGANIZATIONCODE = json['ORGANIZATION_CODE'];
|
||||||
|
oRGANIZATIONID = json['ORGANIZATION_ID'];
|
||||||
|
oRGANIZATIONNAME = json['ORGANIZATION_NAME'];
|
||||||
|
qUANTITY = json['QUANTITY'];
|
||||||
|
rEQUESTNUMBER = json['REQUEST_NUMBER'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
sHIPTOLOCATION = json['SHIP_TO_LOCATION'];
|
||||||
|
sTATUSDATE = json['STATUS_DATE'];
|
||||||
|
tOLOCATOR = json['TO_LOCATOR'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
tOSUBINVENTORYCODE = json['TO_SUBINVENTORY_CODE'];
|
||||||
|
tRANSACTIONTYPENAME = json['TRANSACTION_TYPE_NAME'];
|
||||||
|
uNITOFMEASURE = json['UNIT_OF_MEASURE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['DATE_REQUIRED'] = this.dATEREQUIRED;
|
||||||
|
data['DESCRIPTION'] = this.dESCRIPTION;
|
||||||
|
data['FROM_LOCATOR'] = this.fROMLOCATOR;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['FROM_SUBINVENTORY_CODE'] = this.fROMSUBINVENTORYCODE;
|
||||||
|
data['ITEM_CODE'] = this.iTEMCODE;
|
||||||
|
data['LINE_STATUS_DIS'] = this.lINESTATUSDIS;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['OPERATING_UNIT_NAME'] = this.oPERATINGUNITNAME;
|
||||||
|
data['ORGANIZATION_CODE'] = this.oRGANIZATIONCODE;
|
||||||
|
data['ORGANIZATION_ID'] = this.oRGANIZATIONID;
|
||||||
|
data['ORGANIZATION_NAME'] = this.oRGANIZATIONNAME;
|
||||||
|
data['QUANTITY'] = this.qUANTITY;
|
||||||
|
data['REQUEST_NUMBER'] = this.rEQUESTNUMBER;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['SHIP_TO_LOCATION'] = this.sHIPTOLOCATION;
|
||||||
|
data['STATUS_DATE'] = this.sTATUSDATE;
|
||||||
|
data['TO_LOCATOR'] = this.tOLOCATOR;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
data['TO_SUBINVENTORY_CODE'] = this.tOSUBINVENTORYCODE;
|
||||||
|
data['TRANSACTION_TYPE_NAME'] = this.tRANSACTIONTYPENAME;
|
||||||
|
data['UNIT_OF_MEASURE'] = this.uNITOFMEASURE;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,104 @@
|
|||||||
|
class GetMoNotificationBodyList {
|
||||||
|
String? dATEREQUIRED;
|
||||||
|
String? dESCRIPTION;
|
||||||
|
String? fROMLOCATOR;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
String? fROMSUBINVENTORY;
|
||||||
|
String? iTEMCODE;
|
||||||
|
int? iTEMID;
|
||||||
|
int? lINENUMBER;
|
||||||
|
String? lINESTATUS;
|
||||||
|
int? nOOFROWS;
|
||||||
|
String? oPERATINGUNIT;
|
||||||
|
String? oRGANIZATIONCODE;
|
||||||
|
String? oRGANIZATIONNAME;
|
||||||
|
int? oRGID;
|
||||||
|
int? qUANTITY;
|
||||||
|
int? rOWNUM;
|
||||||
|
String? sHIPTOLOCATION;
|
||||||
|
String? sTATUSDATE;
|
||||||
|
String? tOLOCATOR;
|
||||||
|
int? tOROWNUM;
|
||||||
|
String? tOSUBINVENTORY;
|
||||||
|
String? tRANSACTIONTYPENAME;
|
||||||
|
String? uOM;
|
||||||
|
|
||||||
|
GetMoNotificationBodyList(
|
||||||
|
{this.dATEREQUIRED,
|
||||||
|
this.dESCRIPTION,
|
||||||
|
this.fROMLOCATOR,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.fROMSUBINVENTORY,
|
||||||
|
this.iTEMCODE,
|
||||||
|
this.iTEMID,
|
||||||
|
this.lINENUMBER,
|
||||||
|
this.lINESTATUS,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.oPERATINGUNIT,
|
||||||
|
this.oRGANIZATIONCODE,
|
||||||
|
this.oRGANIZATIONNAME,
|
||||||
|
this.oRGID,
|
||||||
|
this.qUANTITY,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.sHIPTOLOCATION,
|
||||||
|
this.sTATUSDATE,
|
||||||
|
this.tOLOCATOR,
|
||||||
|
this.tOROWNUM,
|
||||||
|
this.tOSUBINVENTORY,
|
||||||
|
this.tRANSACTIONTYPENAME,
|
||||||
|
this.uOM});
|
||||||
|
|
||||||
|
GetMoNotificationBodyList.fromJson(Map<String, dynamic> json) {
|
||||||
|
dATEREQUIRED = json['DATE_REQUIRED'];
|
||||||
|
dESCRIPTION = json['DESCRIPTION'];
|
||||||
|
fROMLOCATOR = json['FROM_LOCATOR'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
fROMSUBINVENTORY = json['FROM_SUBINVENTORY'];
|
||||||
|
iTEMCODE = json['ITEM_CODE'];
|
||||||
|
iTEMID = json['ITEM_ID'];
|
||||||
|
lINENUMBER = json['LINE_NUMBER'];
|
||||||
|
lINESTATUS = json['LINE_STATUS'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
oPERATINGUNIT = json['OPERATING_UNIT'];
|
||||||
|
oRGANIZATIONCODE = json['ORGANIZATION_CODE'];
|
||||||
|
oRGANIZATIONNAME = json['ORGANIZATION_NAME'];
|
||||||
|
oRGID = json['ORG_ID'];
|
||||||
|
qUANTITY = json['QUANTITY'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
sHIPTOLOCATION = json['SHIP_TO_LOCATION'];
|
||||||
|
sTATUSDATE = json['STATUS_DATE'];
|
||||||
|
tOLOCATOR = json['TO_LOCATOR'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
tOSUBINVENTORY = json['TO_SUBINVENTORY'];
|
||||||
|
tRANSACTIONTYPENAME = json['TRANSACTION_TYPE_NAME'];
|
||||||
|
uOM = json['UOM'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['DATE_REQUIRED'] = this.dATEREQUIRED;
|
||||||
|
data['DESCRIPTION'] = this.dESCRIPTION;
|
||||||
|
data['FROM_LOCATOR'] = this.fROMLOCATOR;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['FROM_SUBINVENTORY'] = this.fROMSUBINVENTORY;
|
||||||
|
data['ITEM_CODE'] = this.iTEMCODE;
|
||||||
|
data['ITEM_ID'] = this.iTEMID;
|
||||||
|
data['LINE_NUMBER'] = this.lINENUMBER;
|
||||||
|
data['LINE_STATUS'] = this.lINESTATUS;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['OPERATING_UNIT'] = this.oPERATINGUNIT;
|
||||||
|
data['ORGANIZATION_CODE'] = this.oRGANIZATIONCODE;
|
||||||
|
data['ORGANIZATION_NAME'] = this.oRGANIZATIONNAME;
|
||||||
|
data['ORG_ID'] = this.oRGID;
|
||||||
|
data['QUANTITY'] = this.qUANTITY;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['SHIP_TO_LOCATION'] = this.sHIPTOLOCATION;
|
||||||
|
data['STATUS_DATE'] = this.sTATUSDATE;
|
||||||
|
data['TO_LOCATOR'] = this.tOLOCATOR;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
data['TO_SUBINVENTORY'] = this.tOSUBINVENTORY;
|
||||||
|
data['TRANSACTION_TYPE_NAME'] = this.tRANSACTIONTYPENAME;
|
||||||
|
data['UOM'] = this.uOM;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
class GetMobileLoginInfoListModel {
|
||||||
|
int? iD;
|
||||||
|
int? employeeID;
|
||||||
|
int? channelID;
|
||||||
|
int? companyID;
|
||||||
|
String? deviceType;
|
||||||
|
String? deviceToken;
|
||||||
|
int? language;
|
||||||
|
int? gender;
|
||||||
|
int? loginType;
|
||||||
|
String? createdOn;
|
||||||
|
String? editedOn;
|
||||||
|
String? employeeName;
|
||||||
|
bool? businessCardPrivilege;
|
||||||
|
|
||||||
|
GetMobileLoginInfoListModel(
|
||||||
|
{this.iD,
|
||||||
|
this.employeeID,
|
||||||
|
this.channelID,
|
||||||
|
this.companyID,
|
||||||
|
this.deviceType,
|
||||||
|
this.deviceToken,
|
||||||
|
this.language,
|
||||||
|
this.gender,
|
||||||
|
this.loginType,
|
||||||
|
this.createdOn,
|
||||||
|
this.editedOn,
|
||||||
|
this.employeeName,
|
||||||
|
this.businessCardPrivilege});
|
||||||
|
|
||||||
|
GetMobileLoginInfoListModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
iD = json['ID'];
|
||||||
|
employeeID = json['EmployeeID'];
|
||||||
|
channelID = json['ChannelID'];
|
||||||
|
companyID = json['CompanyID'];
|
||||||
|
deviceType = json['DeviceType'];
|
||||||
|
deviceToken = json['DeviceToken'];
|
||||||
|
language = json['Language'];
|
||||||
|
gender = json['Gender'];
|
||||||
|
loginType = json['LoginType'];
|
||||||
|
createdOn = json['CreatedOn'];
|
||||||
|
editedOn = json['EditedOn'];
|
||||||
|
employeeName = json['EmployeeName'];
|
||||||
|
businessCardPrivilege = json['BusinessCardPrivilege'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = Map<String, dynamic>();
|
||||||
|
data['ID'] = iD;
|
||||||
|
data['EmployeeID'] = employeeID;
|
||||||
|
data['ChannelID'] = channelID;
|
||||||
|
data['CompanyID'] = companyID;
|
||||||
|
data['DeviceType'] = deviceType;
|
||||||
|
data['DeviceToken'] = deviceToken;
|
||||||
|
data['Language'] = language;
|
||||||
|
data['Gender'] = gender;
|
||||||
|
data['LoginType'] = loginType;
|
||||||
|
data['CreatedOn'] = createdOn;
|
||||||
|
data['EditedOn'] = editedOn;
|
||||||
|
data['EmployeeName'] = employeeName;
|
||||||
|
data['BusinessCardPrivilege'] = businessCardPrivilege;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
class GetNotificationButtonsList {
|
||||||
|
String? bUTTONACTION;
|
||||||
|
String? bUTTONICON;
|
||||||
|
String? bUTTONLABEL;
|
||||||
|
int? bUTTONSEQ;
|
||||||
|
|
||||||
|
GetNotificationButtonsList(
|
||||||
|
{this.bUTTONACTION, this.bUTTONICON, this.bUTTONLABEL, this.bUTTONSEQ});
|
||||||
|
|
||||||
|
GetNotificationButtonsList.fromJson(Map<String, dynamic> json) {
|
||||||
|
bUTTONACTION = json['BUTTON_ACTION'];
|
||||||
|
bUTTONICON = json['BUTTON_ICON'];
|
||||||
|
bUTTONLABEL = json['BUTTON_LABEL'];
|
||||||
|
bUTTONSEQ = json['BUTTON_SEQ'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['BUTTON_ACTION'] = this.bUTTONACTION;
|
||||||
|
data['BUTTON_ICON'] = this.bUTTONICON;
|
||||||
|
data['BUTTON_LABEL'] = this.bUTTONLABEL;
|
||||||
|
data['BUTTON_SEQ'] = this.bUTTONSEQ;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
class GetPoItemHistoryList {
|
||||||
|
int? bALANCEQUANTITY;
|
||||||
|
int? bONUSQUANTITY;
|
||||||
|
String? bUYER;
|
||||||
|
String? cLOSEDCODE;
|
||||||
|
String? cREATIONDATE;
|
||||||
|
int? dISCOUNTPERCENTAGE;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
int? iTEMID;
|
||||||
|
int? nETPRICE;
|
||||||
|
int? nOOFROWS;
|
||||||
|
String? oUNAME;
|
||||||
|
String? pONUMBER;
|
||||||
|
int? pURCHASEPRICE;
|
||||||
|
int? qUANTITYORDERED;
|
||||||
|
int? qUANTITYRECEIVED;
|
||||||
|
int? rEVISIONNUM;
|
||||||
|
int? rOWNUM;
|
||||||
|
String? sUPPLIER;
|
||||||
|
int? tOROWNUM;
|
||||||
|
String? uOM;
|
||||||
|
|
||||||
|
GetPoItemHistoryList(
|
||||||
|
{this.bALANCEQUANTITY,
|
||||||
|
this.bONUSQUANTITY,
|
||||||
|
this.bUYER,
|
||||||
|
this.cLOSEDCODE,
|
||||||
|
this.cREATIONDATE,
|
||||||
|
this.dISCOUNTPERCENTAGE,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.iTEMID,
|
||||||
|
this.nETPRICE,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.oUNAME,
|
||||||
|
this.pONUMBER,
|
||||||
|
this.pURCHASEPRICE,
|
||||||
|
this.qUANTITYORDERED,
|
||||||
|
this.qUANTITYRECEIVED,
|
||||||
|
this.rEVISIONNUM,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.sUPPLIER,
|
||||||
|
this.tOROWNUM,
|
||||||
|
this.uOM});
|
||||||
|
|
||||||
|
GetPoItemHistoryList.fromJson(Map<String, dynamic> json) {
|
||||||
|
bALANCEQUANTITY = json['BALANCE_QUANTITY'];
|
||||||
|
bONUSQUANTITY = json['BONUS_QUANTITY'];
|
||||||
|
bUYER = json['BUYER'];
|
||||||
|
cLOSEDCODE = json['CLOSED_CODE'];
|
||||||
|
cREATIONDATE = json['CREATION_DATE'];
|
||||||
|
dISCOUNTPERCENTAGE = json['DISCOUNT_PERCENTAGE'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
iTEMID = json['ITEM_ID'];
|
||||||
|
nETPRICE = json['NET_PRICE'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
oUNAME = json['OU_NAME'];
|
||||||
|
pONUMBER = json['PO_NUMBER'];
|
||||||
|
pURCHASEPRICE = json['PURCHASE_PRICE'];
|
||||||
|
qUANTITYORDERED = json['QUANTITY_ORDERED'];
|
||||||
|
qUANTITYRECEIVED = json['QUANTITY_RECEIVED'];
|
||||||
|
rEVISIONNUM = json['REVISION_NUM'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
sUPPLIER = json['SUPPLIER'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
uOM = json['UOM'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['BALANCE_QUANTITY'] = this.bALANCEQUANTITY;
|
||||||
|
data['BONUS_QUANTITY'] = this.bONUSQUANTITY;
|
||||||
|
data['BUYER'] = this.bUYER;
|
||||||
|
data['CLOSED_CODE'] = this.cLOSEDCODE;
|
||||||
|
data['CREATION_DATE'] = this.cREATIONDATE;
|
||||||
|
data['DISCOUNT_PERCENTAGE'] = this.dISCOUNTPERCENTAGE;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['ITEM_ID'] = this.iTEMID;
|
||||||
|
data['NET_PRICE'] = this.nETPRICE;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['OU_NAME'] = this.oUNAME;
|
||||||
|
data['PO_NUMBER'] = this.pONUMBER;
|
||||||
|
data['PURCHASE_PRICE'] = this.pURCHASEPRICE;
|
||||||
|
data['QUANTITY_ORDERED'] = this.qUANTITYORDERED;
|
||||||
|
data['QUANTITY_RECEIVED'] = this.qUANTITYRECEIVED;
|
||||||
|
data['REVISION_NUM'] = this.rEVISIONNUM;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['SUPPLIER'] = this.sUPPLIER;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
data['UOM'] = this.uOM;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,242 @@
|
|||||||
|
|
||||||
|
class GetPoNotificationBodyList {
|
||||||
|
List<POHeader>? pOHeader;
|
||||||
|
List<POLines>? pOLines;
|
||||||
|
String? pINFORMATION;
|
||||||
|
String? pQUESTION;
|
||||||
|
|
||||||
|
GetPoNotificationBodyList(
|
||||||
|
{this.pOHeader, this.pOLines, this.pINFORMATION, this.pQUESTION});
|
||||||
|
|
||||||
|
GetPoNotificationBodyList.fromJson(Map<String, dynamic> json) {
|
||||||
|
if (json['POHeader'] != null) {
|
||||||
|
pOHeader = <POHeader>[];
|
||||||
|
json['POHeader'].forEach((v) {
|
||||||
|
pOHeader!.add(new POHeader.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (json['POLines'] != null) {
|
||||||
|
pOLines = <POLines>[];
|
||||||
|
json['POLines'].forEach((v) {
|
||||||
|
pOLines!.add(new POLines.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
pINFORMATION = json['P_INFORMATION'];
|
||||||
|
pQUESTION = json['P_QUESTION'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
if (this.pOHeader != null) {
|
||||||
|
data['POHeader'] = this.pOHeader!.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
if (this.pOLines != null) {
|
||||||
|
data['POLines'] = this.pOLines!.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
data['P_INFORMATION'] = this.pINFORMATION;
|
||||||
|
data['P_QUESTION'] = this.pQUESTION;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class POHeader {
|
||||||
|
String? bUYER;
|
||||||
|
String? cOMMENTS;
|
||||||
|
String? cREATIONDATE;
|
||||||
|
String? cURRENCYNAME;
|
||||||
|
int? cUSTOMDUTY;
|
||||||
|
int? dISCOUNTAMOUNT;
|
||||||
|
int? gROSSAMOUNT;
|
||||||
|
String? lOCCUR;
|
||||||
|
int? lOCCURTOTPOAMT;
|
||||||
|
int? oTHERCHARGES;
|
||||||
|
String? pAYMENTTERMS;
|
||||||
|
String? pONUMBER;
|
||||||
|
String? pREPARER;
|
||||||
|
String? qUOTATIONDATE;
|
||||||
|
String? qUOTATIONNUMBER;
|
||||||
|
int? sALESTAX;
|
||||||
|
int? sHIPHANDLE;
|
||||||
|
String? sHIPTOLOCATIONNAME;
|
||||||
|
int? tOTALPODISCOUNT;
|
||||||
|
int? tOTPOAMT;
|
||||||
|
String? tOTPOAMTWORD;
|
||||||
|
String? vENDORNAME;
|
||||||
|
String? vENDORSITECODE;
|
||||||
|
|
||||||
|
POHeader(
|
||||||
|
{this.bUYER,
|
||||||
|
this.cOMMENTS,
|
||||||
|
this.cREATIONDATE,
|
||||||
|
this.cURRENCYNAME,
|
||||||
|
this.cUSTOMDUTY,
|
||||||
|
this.dISCOUNTAMOUNT,
|
||||||
|
this.gROSSAMOUNT,
|
||||||
|
this.lOCCUR,
|
||||||
|
this.lOCCURTOTPOAMT,
|
||||||
|
this.oTHERCHARGES,
|
||||||
|
this.pAYMENTTERMS,
|
||||||
|
this.pONUMBER,
|
||||||
|
this.pREPARER,
|
||||||
|
this.qUOTATIONDATE,
|
||||||
|
this.qUOTATIONNUMBER,
|
||||||
|
this.sALESTAX,
|
||||||
|
this.sHIPHANDLE,
|
||||||
|
this.sHIPTOLOCATIONNAME,
|
||||||
|
this.tOTALPODISCOUNT,
|
||||||
|
this.tOTPOAMT,
|
||||||
|
this.tOTPOAMTWORD,
|
||||||
|
this.vENDORNAME,
|
||||||
|
this.vENDORSITECODE});
|
||||||
|
|
||||||
|
POHeader.fromJson(Map<String, dynamic> json) {
|
||||||
|
bUYER = json['BUYER'];
|
||||||
|
cOMMENTS = json['COMMENTS'];
|
||||||
|
cREATIONDATE = json['CREATION_DATE'];
|
||||||
|
cURRENCYNAME = json['CURRENCY_NAME'];
|
||||||
|
cUSTOMDUTY = json['CUSTOM_DUTY'];
|
||||||
|
dISCOUNTAMOUNT = json['DISCOUNT_AMOUNT'];
|
||||||
|
gROSSAMOUNT = json['GROSS_AMOUNT'];
|
||||||
|
lOCCUR = json['LOC_CUR'];
|
||||||
|
lOCCURTOTPOAMT = json['LOC_CUR_TOT_PO_AMT'];
|
||||||
|
oTHERCHARGES = json['OTHER_CHARGES'];
|
||||||
|
pAYMENTTERMS = json['PAYMENT_TERMS'];
|
||||||
|
pONUMBER = json['PO_NUMBER'];
|
||||||
|
pREPARER = json['PREPARER'];
|
||||||
|
qUOTATIONDATE = json['QUOTATION_DATE'];
|
||||||
|
qUOTATIONNUMBER = json['QUOTATION_NUMBER'];
|
||||||
|
sALESTAX = json['SALES_TAX'];
|
||||||
|
sHIPHANDLE = json['SHIP_HANDLE'];
|
||||||
|
sHIPTOLOCATIONNAME = json['SHIP_TO_LOCATION_NAME'];
|
||||||
|
tOTALPODISCOUNT = json['TOTAL_PO_DISCOUNT'];
|
||||||
|
tOTPOAMT = json['TOT_PO_AMT'];
|
||||||
|
tOTPOAMTWORD = json['TOT_PO_AMT_WORD'];
|
||||||
|
vENDORNAME = json['VENDOR_NAME'];
|
||||||
|
vENDORSITECODE = json['VENDOR_SITE_CODE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['BUYER'] = this.bUYER;
|
||||||
|
data['COMMENTS'] = this.cOMMENTS;
|
||||||
|
data['CREATION_DATE'] = this.cREATIONDATE;
|
||||||
|
data['CURRENCY_NAME'] = this.cURRENCYNAME;
|
||||||
|
data['CUSTOM_DUTY'] = this.cUSTOMDUTY;
|
||||||
|
data['DISCOUNT_AMOUNT'] = this.dISCOUNTAMOUNT;
|
||||||
|
data['GROSS_AMOUNT'] = this.gROSSAMOUNT;
|
||||||
|
data['LOC_CUR'] = this.lOCCUR;
|
||||||
|
data['LOC_CUR_TOT_PO_AMT'] = this.lOCCURTOTPOAMT;
|
||||||
|
data['OTHER_CHARGES'] = this.oTHERCHARGES;
|
||||||
|
data['PAYMENT_TERMS'] = this.pAYMENTTERMS;
|
||||||
|
data['PO_NUMBER'] = this.pONUMBER;
|
||||||
|
data['PREPARER'] = this.pREPARER;
|
||||||
|
data['QUOTATION_DATE'] = this.qUOTATIONDATE;
|
||||||
|
data['QUOTATION_NUMBER'] = this.qUOTATIONNUMBER;
|
||||||
|
data['SALES_TAX'] = this.sALESTAX;
|
||||||
|
data['SHIP_HANDLE'] = this.sHIPHANDLE;
|
||||||
|
data['SHIP_TO_LOCATION_NAME'] = this.sHIPTOLOCATIONNAME;
|
||||||
|
data['TOTAL_PO_DISCOUNT'] = this.tOTALPODISCOUNT;
|
||||||
|
data['TOT_PO_AMT'] = this.tOTPOAMT;
|
||||||
|
data['TOT_PO_AMT_WORD'] = this.tOTPOAMTWORD;
|
||||||
|
data['VENDOR_NAME'] = this.vENDORNAME;
|
||||||
|
data['VENDOR_SITE_CODE'] = this.vENDORSITECODE;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class POLines {
|
||||||
|
String? dELIVERTOLOCATION;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
String? iTEMCODE;
|
||||||
|
String? iTEMDESCRIPTION;
|
||||||
|
int? iTEMID;
|
||||||
|
int? lINEAMOUNT;
|
||||||
|
int? lINEDISCPERCENTAGE;
|
||||||
|
int? lINENUM;
|
||||||
|
String? lINETYPE;
|
||||||
|
String? mFG;
|
||||||
|
String? nEEDBYDATE;
|
||||||
|
int? nOOFROWS;
|
||||||
|
int? pOHEADERID;
|
||||||
|
String? pROMISEDDATE;
|
||||||
|
String? pRNUM;
|
||||||
|
int? qUANTITY;
|
||||||
|
String? rEQUESTOR;
|
||||||
|
int? rOWNUM;
|
||||||
|
int? tOROWNUM;
|
||||||
|
int? uNITPRICE;
|
||||||
|
String? uOM;
|
||||||
|
|
||||||
|
POLines(
|
||||||
|
{this.dELIVERTOLOCATION,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.iTEMCODE,
|
||||||
|
this.iTEMDESCRIPTION,
|
||||||
|
this.iTEMID,
|
||||||
|
this.lINEAMOUNT,
|
||||||
|
this.lINEDISCPERCENTAGE,
|
||||||
|
this.lINENUM,
|
||||||
|
this.lINETYPE,
|
||||||
|
this.mFG,
|
||||||
|
this.nEEDBYDATE,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.pOHEADERID,
|
||||||
|
this.pROMISEDDATE,
|
||||||
|
this.pRNUM,
|
||||||
|
this.qUANTITY,
|
||||||
|
this.rEQUESTOR,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.tOROWNUM,
|
||||||
|
this.uNITPRICE,
|
||||||
|
this.uOM});
|
||||||
|
|
||||||
|
POLines.fromJson(Map<String, dynamic> json) {
|
||||||
|
dELIVERTOLOCATION = json['DELIVER_TO_LOCATION'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
iTEMCODE = json['ITEM_CODE'];
|
||||||
|
iTEMDESCRIPTION = json['ITEM_DESCRIPTION'];
|
||||||
|
iTEMID = json['ITEM_ID'];
|
||||||
|
lINEAMOUNT = json['LINE_AMOUNT'];
|
||||||
|
lINEDISCPERCENTAGE = json['LINE_DISC_PERCENTAGE'];
|
||||||
|
lINENUM = json['LINE_NUM'];
|
||||||
|
lINETYPE = json['LINE_TYPE'];
|
||||||
|
mFG = json['MFG'];
|
||||||
|
nEEDBYDATE = json['NEED_BY_DATE'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
pOHEADERID = json['PO_HEADER_ID'];
|
||||||
|
pROMISEDDATE = json['PROMISED_DATE'];
|
||||||
|
pRNUM = json['PR_NUM'];
|
||||||
|
qUANTITY = json['QUANTITY'];
|
||||||
|
rEQUESTOR = json['REQUESTOR'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
uNITPRICE = json['UNIT_PRICE'];
|
||||||
|
uOM = json['UOM'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['DELIVER_TO_LOCATION'] = this.dELIVERTOLOCATION;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['ITEM_CODE'] = this.iTEMCODE;
|
||||||
|
data['ITEM_DESCRIPTION'] = this.iTEMDESCRIPTION;
|
||||||
|
data['ITEM_ID'] = this.iTEMID;
|
||||||
|
data['LINE_AMOUNT'] = this.lINEAMOUNT;
|
||||||
|
data['LINE_DISC_PERCENTAGE'] = this.lINEDISCPERCENTAGE;
|
||||||
|
data['LINE_NUM'] = this.lINENUM;
|
||||||
|
data['LINE_TYPE'] = this.lINETYPE;
|
||||||
|
data['MFG'] = this.mFG;
|
||||||
|
data['NEED_BY_DATE'] = this.nEEDBYDATE;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['PO_HEADER_ID'] = this.pOHEADERID;
|
||||||
|
data['PROMISED_DATE'] = this.pROMISEDDATE;
|
||||||
|
data['PR_NUM'] = this.pRNUM;
|
||||||
|
data['QUANTITY'] = this.qUANTITY;
|
||||||
|
data['REQUESTOR'] = this.rEQUESTOR;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
data['UNIT_PRICE'] = this.uNITPRICE;
|
||||||
|
data['UOM'] = this.uOM;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,84 @@
|
|||||||
|
class GetQuotationAnalysisList {
|
||||||
|
int? fROMROWNUM;
|
||||||
|
String? iTEMCODE;
|
||||||
|
String? iTEMDESC;
|
||||||
|
int? nOOFROWS;
|
||||||
|
String? qUOTBONUSQTY;
|
||||||
|
String? qUOTDELIVERYDATE;
|
||||||
|
int? qUOTLINETOTAL;
|
||||||
|
String? qUOTMFGPARTNUM;
|
||||||
|
String? qUOTNUM;
|
||||||
|
int? qUOTQTY;
|
||||||
|
int? qUOTUNITPRICE;
|
||||||
|
String? qUOTUOM;
|
||||||
|
String? rFQNUM;
|
||||||
|
int? rFQQTY;
|
||||||
|
String? rFQUOM;
|
||||||
|
int? rOWNUM;
|
||||||
|
int? tOROWNUM;
|
||||||
|
String? vENDORNAME;
|
||||||
|
|
||||||
|
GetQuotationAnalysisList(
|
||||||
|
{this.fROMROWNUM,
|
||||||
|
this.iTEMCODE,
|
||||||
|
this.iTEMDESC,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.qUOTBONUSQTY,
|
||||||
|
this.qUOTDELIVERYDATE,
|
||||||
|
this.qUOTLINETOTAL,
|
||||||
|
this.qUOTMFGPARTNUM,
|
||||||
|
this.qUOTNUM,
|
||||||
|
this.qUOTQTY,
|
||||||
|
this.qUOTUNITPRICE,
|
||||||
|
this.qUOTUOM,
|
||||||
|
this.rFQNUM,
|
||||||
|
this.rFQQTY,
|
||||||
|
this.rFQUOM,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.tOROWNUM,
|
||||||
|
this.vENDORNAME});
|
||||||
|
|
||||||
|
GetQuotationAnalysisList.fromJson(Map<String, dynamic> json) {
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
iTEMCODE = json['ITEM_CODE'];
|
||||||
|
iTEMDESC = json['ITEM_DESC'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
qUOTBONUSQTY = json['QUOT_BONUS_QTY'];
|
||||||
|
qUOTDELIVERYDATE = json['QUOT_DELIVERY_DATE'];
|
||||||
|
qUOTLINETOTAL = json['QUOT_LINE_TOTAL'];
|
||||||
|
qUOTMFGPARTNUM = json['QUOT_MFG_PART_NUM'];
|
||||||
|
qUOTNUM = json['QUOT_NUM'];
|
||||||
|
qUOTQTY = json['QUOT_QTY'];
|
||||||
|
qUOTUNITPRICE = json['QUOT_UNIT_PRICE'];
|
||||||
|
qUOTUOM = json['QUOT_UOM'];
|
||||||
|
rFQNUM = json['RFQ_NUM'];
|
||||||
|
rFQQTY = json['RFQ_QTY'];
|
||||||
|
rFQUOM = json['RFQ_UOM'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
vENDORNAME = json['VENDOR_NAME'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['ITEM_CODE'] = this.iTEMCODE;
|
||||||
|
data['ITEM_DESC'] = this.iTEMDESC;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['QUOT_BONUS_QTY'] = this.qUOTBONUSQTY;
|
||||||
|
data['QUOT_DELIVERY_DATE'] = this.qUOTDELIVERYDATE;
|
||||||
|
data['QUOT_LINE_TOTAL'] = this.qUOTLINETOTAL;
|
||||||
|
data['QUOT_MFG_PART_NUM'] = this.qUOTMFGPARTNUM;
|
||||||
|
data['QUOT_NUM'] = this.qUOTNUM;
|
||||||
|
data['QUOT_QTY'] = this.qUOTQTY;
|
||||||
|
data['QUOT_UNIT_PRICE'] = this.qUOTUNITPRICE;
|
||||||
|
data['QUOT_UOM'] = this.qUOTUOM;
|
||||||
|
data['RFQ_NUM'] = this.rFQNUM;
|
||||||
|
data['RFQ_QTY'] = this.rFQQTY;
|
||||||
|
data['RFQ_UOM'] = this.rFQUOM;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
data['VENDOR_NAME'] = this.vENDORNAME;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,132 @@
|
|||||||
|
class GetStampMsNotificationBodyList {
|
||||||
|
int? aCTUALWOBHRS;
|
||||||
|
int? aCTUALWOBSEC;
|
||||||
|
String? aPPROVEDENDREASONDESC;
|
||||||
|
String? aPPROVEDSTARTDATETIME;
|
||||||
|
String? aPPROVEDSTARTREASON;
|
||||||
|
String? aPPROVEDSTARTTIME;
|
||||||
|
int? aSSIGNMENTID;
|
||||||
|
int? aSSIGNMENTNUMBER;
|
||||||
|
String? bREAKNAME;
|
||||||
|
String? bUSINESSGROUPID;
|
||||||
|
String? eMPLOYEENAME;
|
||||||
|
int? eMPLOYEENUMBER;
|
||||||
|
String? eMPLOYMENTCATEGORY;
|
||||||
|
int? pAYROLLID;
|
||||||
|
String? pAYROLLNAME;
|
||||||
|
String? sCHEDULEDATE;
|
||||||
|
int? sEQNO;
|
||||||
|
String? sHTACTUALENDDATETIME;
|
||||||
|
String? sHTACTUALENDTIME;
|
||||||
|
String? sHTACTUALHRS;
|
||||||
|
int? sHTACTUALSEC;
|
||||||
|
String? sHTACTUALSTARTDATETIME;
|
||||||
|
String? sHTACTUALSTARTTIME;
|
||||||
|
String? sHTCODE;
|
||||||
|
int? sHTID;
|
||||||
|
String? sHTNAME;
|
||||||
|
String? sHTTYPE;
|
||||||
|
String? sHTTYPEDESC;
|
||||||
|
int? sUPERVISORID;
|
||||||
|
int? tKPERSONID;
|
||||||
|
|
||||||
|
GetStampMsNotificationBodyList(
|
||||||
|
{this.aCTUALWOBHRS,
|
||||||
|
this.aCTUALWOBSEC,
|
||||||
|
this.aPPROVEDENDREASONDESC,
|
||||||
|
this.aPPROVEDSTARTDATETIME,
|
||||||
|
this.aPPROVEDSTARTREASON,
|
||||||
|
this.aPPROVEDSTARTTIME,
|
||||||
|
this.aSSIGNMENTID,
|
||||||
|
this.aSSIGNMENTNUMBER,
|
||||||
|
this.bREAKNAME,
|
||||||
|
this.bUSINESSGROUPID,
|
||||||
|
this.eMPLOYEENAME,
|
||||||
|
this.eMPLOYEENUMBER,
|
||||||
|
this.eMPLOYMENTCATEGORY,
|
||||||
|
this.pAYROLLID,
|
||||||
|
this.pAYROLLNAME,
|
||||||
|
this.sCHEDULEDATE,
|
||||||
|
this.sEQNO,
|
||||||
|
this.sHTACTUALENDDATETIME,
|
||||||
|
this.sHTACTUALENDTIME,
|
||||||
|
this.sHTACTUALHRS,
|
||||||
|
this.sHTACTUALSEC,
|
||||||
|
this.sHTACTUALSTARTDATETIME,
|
||||||
|
this.sHTACTUALSTARTTIME,
|
||||||
|
this.sHTCODE,
|
||||||
|
this.sHTID,
|
||||||
|
this.sHTNAME,
|
||||||
|
this.sHTTYPE,
|
||||||
|
this.sHTTYPEDESC,
|
||||||
|
this.sUPERVISORID,
|
||||||
|
this.tKPERSONID});
|
||||||
|
|
||||||
|
GetStampMsNotificationBodyList.fromJson(Map<String, dynamic> json) {
|
||||||
|
aCTUALWOBHRS = json['ACTUAL_WOB_HRS'];
|
||||||
|
aCTUALWOBSEC = json['ACTUAL_WOB_SEC'];
|
||||||
|
aPPROVEDENDREASONDESC = json['APPROVED_END_REASON_DESC'];
|
||||||
|
aPPROVEDSTARTDATETIME = json['APPROVED_START_DATETIME'];
|
||||||
|
aPPROVEDSTARTREASON = json['APPROVED_START_REASON'];
|
||||||
|
aPPROVEDSTARTTIME = json['APPROVED_START_TIME'];
|
||||||
|
aSSIGNMENTID = json['ASSIGNMENT_ID'];
|
||||||
|
aSSIGNMENTNUMBER = json['ASSIGNMENT_NUMBER'];
|
||||||
|
bREAKNAME = json['BREAK_NAME'];
|
||||||
|
bUSINESSGROUPID = json['BUSINESS_GROUP_ID'];
|
||||||
|
eMPLOYEENAME = json['EMPLOYEE_NAME'];
|
||||||
|
eMPLOYEENUMBER = json['EMPLOYEE_NUMBER'];
|
||||||
|
eMPLOYMENTCATEGORY = json['EMPLOYMENT_CATEGORY'];
|
||||||
|
pAYROLLID = json['PAYROLL_ID'];
|
||||||
|
pAYROLLNAME = json['PAYROLL_NAME'];
|
||||||
|
sCHEDULEDATE = json['SCHEDULE_DATE'];
|
||||||
|
sEQNO = json['SEQ_NO'];
|
||||||
|
sHTACTUALENDDATETIME = json['SHT_ACTUAL_END_DATETIME'];
|
||||||
|
sHTACTUALENDTIME = json['SHT_ACTUAL_END_TIME'];
|
||||||
|
sHTACTUALHRS = json['SHT_ACTUAL_HRS'];
|
||||||
|
sHTACTUALSEC = json['SHT_ACTUAL_SEC'];
|
||||||
|
sHTACTUALSTARTDATETIME = json['SHT_ACTUAL_START_DATETIME'];
|
||||||
|
sHTACTUALSTARTTIME = json['SHT_ACTUAL_START_TIME'];
|
||||||
|
sHTCODE = json['SHT_CODE'];
|
||||||
|
sHTID = json['SHT_ID'];
|
||||||
|
sHTNAME = json['SHT_NAME'];
|
||||||
|
sHTTYPE = json['SHT_TYPE'];
|
||||||
|
sHTTYPEDESC = json['SHT_TYPE_DESC'];
|
||||||
|
sUPERVISORID = json['SUPERVISOR_ID'];
|
||||||
|
tKPERSONID = json['TK_PERSON_ID'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ACTUAL_WOB_HRS'] = this.aCTUALWOBHRS;
|
||||||
|
data['ACTUAL_WOB_SEC'] = this.aCTUALWOBSEC;
|
||||||
|
data['APPROVED_END_REASON_DESC'] = this.aPPROVEDENDREASONDESC;
|
||||||
|
data['APPROVED_START_DATETIME'] = this.aPPROVEDSTARTDATETIME;
|
||||||
|
data['APPROVED_START_REASON'] = this.aPPROVEDSTARTREASON;
|
||||||
|
data['APPROVED_START_TIME'] = this.aPPROVEDSTARTTIME;
|
||||||
|
data['ASSIGNMENT_ID'] = this.aSSIGNMENTID;
|
||||||
|
data['ASSIGNMENT_NUMBER'] = this.aSSIGNMENTNUMBER;
|
||||||
|
data['BREAK_NAME'] = this.bREAKNAME;
|
||||||
|
data['BUSINESS_GROUP_ID'] = this.bUSINESSGROUPID;
|
||||||
|
data['EMPLOYEE_NAME'] = this.eMPLOYEENAME;
|
||||||
|
data['EMPLOYEE_NUMBER'] = this.eMPLOYEENUMBER;
|
||||||
|
data['EMPLOYMENT_CATEGORY'] = this.eMPLOYMENTCATEGORY;
|
||||||
|
data['PAYROLL_ID'] = this.pAYROLLID;
|
||||||
|
data['PAYROLL_NAME'] = this.pAYROLLNAME;
|
||||||
|
data['SCHEDULE_DATE'] = this.sCHEDULEDATE;
|
||||||
|
data['SEQ_NO'] = this.sEQNO;
|
||||||
|
data['SHT_ACTUAL_END_DATETIME'] = this.sHTACTUALENDDATETIME;
|
||||||
|
data['SHT_ACTUAL_END_TIME'] = this.sHTACTUALENDTIME;
|
||||||
|
data['SHT_ACTUAL_HRS'] = this.sHTACTUALHRS;
|
||||||
|
data['SHT_ACTUAL_SEC'] = this.sHTACTUALSEC;
|
||||||
|
data['SHT_ACTUAL_START_DATETIME'] = this.sHTACTUALSTARTDATETIME;
|
||||||
|
data['SHT_ACTUAL_START_TIME'] = this.sHTACTUALSTARTTIME;
|
||||||
|
data['SHT_CODE'] = this.sHTCODE;
|
||||||
|
data['SHT_ID'] = this.sHTID;
|
||||||
|
data['SHT_NAME'] = this.sHTNAME;
|
||||||
|
data['SHT_TYPE'] = this.sHTTYPE;
|
||||||
|
data['SHT_TYPE_DESC'] = this.sHTTYPEDESC;
|
||||||
|
data['SUPERVISOR_ID'] = this.sUPERVISORID;
|
||||||
|
data['TK_PERSON_ID'] = this.tKPERSONID;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
class GetStampNsNotificationBodyList {
|
||||||
|
int? aSSIGNMENTID;
|
||||||
|
String? aSSIGNMENTNUMBER;
|
||||||
|
int? bUSINESSGROUPID;
|
||||||
|
String? eMPLOYEENAME;
|
||||||
|
String? eMPLOYEENUMBER;
|
||||||
|
String? eMPLOYMENTCATEGORY;
|
||||||
|
int? pAYROLLID;
|
||||||
|
String? pAYROLLNAME;
|
||||||
|
int? pERSONID;
|
||||||
|
String? sCHEDULEDATE;
|
||||||
|
int? sUPERVISORID;
|
||||||
|
int? tKPERSONID;
|
||||||
|
|
||||||
|
GetStampNsNotificationBodyList(
|
||||||
|
{this.aSSIGNMENTID,
|
||||||
|
this.aSSIGNMENTNUMBER,
|
||||||
|
this.bUSINESSGROUPID,
|
||||||
|
this.eMPLOYEENAME,
|
||||||
|
this.eMPLOYEENUMBER,
|
||||||
|
this.eMPLOYMENTCATEGORY,
|
||||||
|
this.pAYROLLID,
|
||||||
|
this.pAYROLLNAME,
|
||||||
|
this.pERSONID,
|
||||||
|
this.sCHEDULEDATE,
|
||||||
|
this.sUPERVISORID,
|
||||||
|
this.tKPERSONID});
|
||||||
|
|
||||||
|
GetStampNsNotificationBodyList.fromJson(Map<String, dynamic> json) {
|
||||||
|
aSSIGNMENTID = json['ASSIGNMENT_ID'];
|
||||||
|
aSSIGNMENTNUMBER = json['ASSIGNMENT_NUMBER'];
|
||||||
|
bUSINESSGROUPID = json['BUSINESS_GROUP_ID'];
|
||||||
|
eMPLOYEENAME = json['EMPLOYEE_NAME'];
|
||||||
|
eMPLOYEENUMBER = json['EMPLOYEE_NUMBER'];
|
||||||
|
eMPLOYMENTCATEGORY = json['EMPLOYMENT_CATEGORY'];
|
||||||
|
pAYROLLID = json['PAYROLL_ID'];
|
||||||
|
pAYROLLNAME = json['PAYROLL_NAME'];
|
||||||
|
pERSONID = json['PERSON_ID'];
|
||||||
|
sCHEDULEDATE = json['SCHEDULE_DATE'];
|
||||||
|
sUPERVISORID = json['SUPERVISOR_ID'];
|
||||||
|
tKPERSONID = json['TK_PERSON_ID'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ASSIGNMENT_ID'] = this.aSSIGNMENTID;
|
||||||
|
data['ASSIGNMENT_NUMBER'] = this.aSSIGNMENTNUMBER;
|
||||||
|
data['BUSINESS_GROUP_ID'] = this.bUSINESSGROUPID;
|
||||||
|
data['EMPLOYEE_NAME'] = this.eMPLOYEENAME;
|
||||||
|
data['EMPLOYEE_NUMBER'] = this.eMPLOYEENUMBER;
|
||||||
|
data['EMPLOYMENT_CATEGORY'] = this.eMPLOYMENTCATEGORY;
|
||||||
|
data['PAYROLL_ID'] = this.pAYROLLID;
|
||||||
|
data['PAYROLL_NAME'] = this.pAYROLLNAME;
|
||||||
|
data['PERSON_ID'] = this.pERSONID;
|
||||||
|
data['SCHEDULE_DATE'] = this.sCHEDULEDATE;
|
||||||
|
data['SUPERVISOR_ID'] = this.sUPERVISORID;
|
||||||
|
data['TK_PERSON_ID'] = this.tKPERSONID;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,353 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:mohem_flutter_app/classes/consts.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
|
class MemberInformationListModel {
|
||||||
|
String? aCTUALTERMINATIONDATE;
|
||||||
|
String? aSSIGNMENTENDDATE;
|
||||||
|
int? aSSIGNMENTID;
|
||||||
|
String? aSSIGNMENTNUMBER;
|
||||||
|
String? aSSIGNMENTSTARTDATE;
|
||||||
|
int? aSSIGNMENTSTATUSTYPEID;
|
||||||
|
String? aSSIGNMENTTYPE;
|
||||||
|
int? bUSINESSGROUPID;
|
||||||
|
String? bUSINESSGROUPNAME;
|
||||||
|
String? businessCardQR;
|
||||||
|
String? cURRENTEMPLOYEEFLAG;
|
||||||
|
String? eMPLOYEEDISPLAYNAME;
|
||||||
|
String? eMPLOYEEDISPLAYNAMEAr;
|
||||||
|
String? eMPLOYEEDISPLAYNAMEEn;
|
||||||
|
String? eMPLOYEEEMAILADDRESS;
|
||||||
|
String? eMPLOYEEIMAGE;
|
||||||
|
String? eMPLOYEEMOBILENUMBER;
|
||||||
|
String? eMPLOYEENAME;
|
||||||
|
String? eMPLOYEENAMEAr;
|
||||||
|
String? eMPLOYEENAMEEn;
|
||||||
|
String? eMPLOYEENUMBER;
|
||||||
|
String? eMPLOYEEWORKNUMBER;
|
||||||
|
String? eMPLOYMENTCATEGORY;
|
||||||
|
String? eMPLOYMENTCATEGORYMEANING;
|
||||||
|
String? employeeQR;
|
||||||
|
String? fREQUENCY;
|
||||||
|
String? fREQUENCYMEANING;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
int? gRADEID;
|
||||||
|
String? gRADENAME;
|
||||||
|
String? hIREDATE;
|
||||||
|
int? jOBID;
|
||||||
|
String? jOBNAME;
|
||||||
|
String? jOBNAMEAr;
|
||||||
|
String? jOBNAMEEn;
|
||||||
|
int? lEDGERID;
|
||||||
|
int? lOCATIONID;
|
||||||
|
String? lOCATIONNAME;
|
||||||
|
String? mANUALTIMECARDFLAG;
|
||||||
|
String? mANUALTIMECARDMEANING;
|
||||||
|
String? mobileNumberWithZipCode;
|
||||||
|
String? nATIONALITYCODE;
|
||||||
|
String? nATIONALITYMEANING;
|
||||||
|
String? nATIONALIDENTIFIER;
|
||||||
|
String? nORMALHOURS;
|
||||||
|
int? nOOFROWS;
|
||||||
|
int? oRGANIZATIONID;
|
||||||
|
String? oRGANIZATIONNAME;
|
||||||
|
String? pAYROLLCODE;
|
||||||
|
int? pAYROLLID;
|
||||||
|
String? pAYROLLNAME;
|
||||||
|
int? pERSONID;
|
||||||
|
String? pERSONTYPE;
|
||||||
|
int? pERSONTYPEID;
|
||||||
|
String? pERINFORMATIONCATEGORY;
|
||||||
|
int? pOSITIONID;
|
||||||
|
String? pOSITIONNAME;
|
||||||
|
String? pRIMARYFLAG;
|
||||||
|
int? rOWNUM;
|
||||||
|
int? sERVICEDAYS;
|
||||||
|
int? sERVICEMONTHS;
|
||||||
|
int? sERVICEYEARS;
|
||||||
|
String? sUPERVISORASSIGNMENTID;
|
||||||
|
String? sUPERVISORDISPLAYNAME;
|
||||||
|
String? sUPERVISOREMAILADDRESS;
|
||||||
|
int? sUPERVISORID;
|
||||||
|
String? sUPERVISORMOBILENUMBER;
|
||||||
|
String? sUPERVISORNAME;
|
||||||
|
String? sUPERVISORNUMBER;
|
||||||
|
String? sUPERVISORWORKNUMBER;
|
||||||
|
String? sWIPESEXEMPTEDFLAG;
|
||||||
|
String? sWIPESEXEMPTEDMEANING;
|
||||||
|
String? sYSTEMPERSONTYPE;
|
||||||
|
String? tKEMAILADDRESS;
|
||||||
|
String? tKEMPLOYEEDISPLAYNAME;
|
||||||
|
String? tKEMPLOYEENAME;
|
||||||
|
String? tKEMPLOYEENUMBER;
|
||||||
|
int? tKPERSONID;
|
||||||
|
int? tOROWNUM;
|
||||||
|
String? uNITNUMBER;
|
||||||
|
String? uSERSTATUS;
|
||||||
|
|
||||||
|
MemberInformationListModel(
|
||||||
|
{this.aCTUALTERMINATIONDATE,
|
||||||
|
this.aSSIGNMENTENDDATE,
|
||||||
|
this.aSSIGNMENTID,
|
||||||
|
this.aSSIGNMENTNUMBER,
|
||||||
|
this.aSSIGNMENTSTARTDATE,
|
||||||
|
this.aSSIGNMENTSTATUSTYPEID,
|
||||||
|
this.aSSIGNMENTTYPE,
|
||||||
|
this.bUSINESSGROUPID,
|
||||||
|
this.bUSINESSGROUPNAME,
|
||||||
|
this.businessCardQR,
|
||||||
|
this.cURRENTEMPLOYEEFLAG,
|
||||||
|
this.eMPLOYEEDISPLAYNAME,
|
||||||
|
this.eMPLOYEEDISPLAYNAMEAr,
|
||||||
|
this.eMPLOYEEDISPLAYNAMEEn,
|
||||||
|
this.eMPLOYEEEMAILADDRESS,
|
||||||
|
this.eMPLOYEEIMAGE,
|
||||||
|
this.eMPLOYEEMOBILENUMBER,
|
||||||
|
this.eMPLOYEENAME,
|
||||||
|
this.eMPLOYEENAMEAr,
|
||||||
|
this.eMPLOYEENAMEEn,
|
||||||
|
this.eMPLOYEENUMBER,
|
||||||
|
this.eMPLOYEEWORKNUMBER,
|
||||||
|
this.eMPLOYMENTCATEGORY,
|
||||||
|
this.eMPLOYMENTCATEGORYMEANING,
|
||||||
|
this.employeeQR,
|
||||||
|
this.fREQUENCY,
|
||||||
|
this.fREQUENCYMEANING,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.gRADEID,
|
||||||
|
this.gRADENAME,
|
||||||
|
this.hIREDATE,
|
||||||
|
this.jOBID,
|
||||||
|
this.jOBNAME,
|
||||||
|
this.jOBNAMEAr,
|
||||||
|
this.jOBNAMEEn,
|
||||||
|
this.lEDGERID,
|
||||||
|
this.lOCATIONID,
|
||||||
|
this.lOCATIONNAME,
|
||||||
|
this.mANUALTIMECARDFLAG,
|
||||||
|
this.mANUALTIMECARDMEANING,
|
||||||
|
this.mobileNumberWithZipCode,
|
||||||
|
this.nATIONALITYCODE,
|
||||||
|
this.nATIONALITYMEANING,
|
||||||
|
this.nATIONALIDENTIFIER,
|
||||||
|
this.nORMALHOURS,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.oRGANIZATIONID,
|
||||||
|
this.oRGANIZATIONNAME,
|
||||||
|
this.pAYROLLCODE,
|
||||||
|
this.pAYROLLID,
|
||||||
|
this.pAYROLLNAME,
|
||||||
|
this.pERSONID,
|
||||||
|
this.pERSONTYPE,
|
||||||
|
this.pERSONTYPEID,
|
||||||
|
this.pERINFORMATIONCATEGORY,
|
||||||
|
this.pOSITIONID,
|
||||||
|
this.pOSITIONNAME,
|
||||||
|
this.pRIMARYFLAG,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.sERVICEDAYS,
|
||||||
|
this.sERVICEMONTHS,
|
||||||
|
this.sERVICEYEARS,
|
||||||
|
this.sUPERVISORASSIGNMENTID,
|
||||||
|
this.sUPERVISORDISPLAYNAME,
|
||||||
|
this.sUPERVISOREMAILADDRESS,
|
||||||
|
this.sUPERVISORID,
|
||||||
|
this.sUPERVISORMOBILENUMBER,
|
||||||
|
this.sUPERVISORNAME,
|
||||||
|
this.sUPERVISORNUMBER,
|
||||||
|
this.sUPERVISORWORKNUMBER,
|
||||||
|
this.sWIPESEXEMPTEDFLAG,
|
||||||
|
this.sWIPESEXEMPTEDMEANING,
|
||||||
|
this.sYSTEMPERSONTYPE,
|
||||||
|
this.tKEMAILADDRESS,
|
||||||
|
this.tKEMPLOYEEDISPLAYNAME,
|
||||||
|
this.tKEMPLOYEENAME,
|
||||||
|
this.tKEMPLOYEENUMBER,
|
||||||
|
this.tKPERSONID,
|
||||||
|
this.tOROWNUM,
|
||||||
|
this.uNITNUMBER,
|
||||||
|
this.uSERSTATUS});
|
||||||
|
|
||||||
|
MemberInformationListModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
aCTUALTERMINATIONDATE = json['ACTUAL_TERMINATION_DATE'];
|
||||||
|
aSSIGNMENTENDDATE = json['ASSIGNMENT_END_DATE'];
|
||||||
|
aSSIGNMENTID = json['ASSIGNMENT_ID'];
|
||||||
|
aSSIGNMENTNUMBER = json['ASSIGNMENT_NUMBER'];
|
||||||
|
aSSIGNMENTSTARTDATE = json['ASSIGNMENT_START_DATE'];
|
||||||
|
aSSIGNMENTSTATUSTYPEID = json['ASSIGNMENT_STATUS_TYPE_ID'];
|
||||||
|
aSSIGNMENTTYPE = json['ASSIGNMENT_TYPE'];
|
||||||
|
bUSINESSGROUPID = json['BUSINESS_GROUP_ID'];
|
||||||
|
bUSINESSGROUPNAME = json['BUSINESS_GROUP_NAME'];
|
||||||
|
businessCardQR = json['BusinessCardQR'];
|
||||||
|
cURRENTEMPLOYEEFLAG = json['CURRENT_EMPLOYEE_FLAG'];
|
||||||
|
eMPLOYEEDISPLAYNAME = json['EMPLOYEE_DISPLAY_NAME'];
|
||||||
|
eMPLOYEEDISPLAYNAMEAr = json['EMPLOYEE_DISPLAY_NAME_Ar'];
|
||||||
|
eMPLOYEEDISPLAYNAMEEn = json['EMPLOYEE_DISPLAY_NAME_En'];
|
||||||
|
eMPLOYEEEMAILADDRESS = json['EMPLOYEE_EMAIL_ADDRESS'];
|
||||||
|
eMPLOYEEIMAGE = json['EMPLOYEE_IMAGE'];
|
||||||
|
eMPLOYEEMOBILENUMBER = json['EMPLOYEE_MOBILE_NUMBER'];
|
||||||
|
eMPLOYEENAME = json['EMPLOYEE_NAME'];
|
||||||
|
eMPLOYEENAMEAr = json['EMPLOYEE_NAME_Ar'];
|
||||||
|
eMPLOYEENAMEEn = json['EMPLOYEE_NAME_En'];
|
||||||
|
eMPLOYEENUMBER = json['EMPLOYEE_NUMBER'];
|
||||||
|
eMPLOYEEWORKNUMBER = json['EMPLOYEE_WORK_NUMBER'];
|
||||||
|
eMPLOYMENTCATEGORY = json['EMPLOYMENT_CATEGORY'];
|
||||||
|
eMPLOYMENTCATEGORYMEANING = json['EMPLOYMENT_CATEGORY_MEANING'];
|
||||||
|
employeeQR = json['EmployeeQR'];
|
||||||
|
fREQUENCY = json['FREQUENCY'];
|
||||||
|
fREQUENCYMEANING = json['FREQUENCY_MEANING'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
gRADEID = json['GRADE_ID'];
|
||||||
|
gRADENAME = json['GRADE_NAME'];
|
||||||
|
hIREDATE = json['HIRE_DATE'];
|
||||||
|
jOBID = json['JOB_ID'];
|
||||||
|
jOBNAME = json['JOB_NAME'];
|
||||||
|
jOBNAMEAr = json['JOB_NAME_Ar'];
|
||||||
|
jOBNAMEEn = json['JOB_NAME_En'];
|
||||||
|
lEDGERID = json['LEDGER_ID'];
|
||||||
|
lOCATIONID = json['LOCATION_ID'];
|
||||||
|
lOCATIONNAME = json['LOCATION_NAME'];
|
||||||
|
mANUALTIMECARDFLAG = json['MANUAL_TIMECARD_FLAG'];
|
||||||
|
mANUALTIMECARDMEANING = json['MANUAL_TIMECARD_MEANING'];
|
||||||
|
mobileNumberWithZipCode = json['MobileNumberWithZipCode'];
|
||||||
|
nATIONALITYCODE = json['NATIONALITY_CODE'];
|
||||||
|
nATIONALITYMEANING = json['NATIONALITY_MEANING'];
|
||||||
|
nATIONALIDENTIFIER = json['NATIONAL_IDENTIFIER'];
|
||||||
|
nORMALHOURS = json['NORMAL_HOURS'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
oRGANIZATIONID = json['ORGANIZATION_ID'];
|
||||||
|
oRGANIZATIONNAME = json['ORGANIZATION_NAME'];
|
||||||
|
pAYROLLCODE = json['PAYROLL_CODE'];
|
||||||
|
pAYROLLID = json['PAYROLL_ID'];
|
||||||
|
pAYROLLNAME = json['PAYROLL_NAME'];
|
||||||
|
pERSONID = json['PERSON_ID'];
|
||||||
|
pERSONTYPE = json['PERSON_TYPE'];
|
||||||
|
pERSONTYPEID = json['PERSON_TYPE_ID'];
|
||||||
|
pERINFORMATIONCATEGORY = json['PER_INFORMATION_CATEGORY'];
|
||||||
|
pOSITIONID = json['POSITION_ID'];
|
||||||
|
pOSITIONNAME = json['POSITION_NAME'];
|
||||||
|
pRIMARYFLAG = json['PRIMARY_FLAG'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
sERVICEDAYS = json['SERVICE_DAYS'];
|
||||||
|
sERVICEMONTHS = json['SERVICE_MONTHS'];
|
||||||
|
sERVICEYEARS = json['SERVICE_YEARS'];
|
||||||
|
sUPERVISORASSIGNMENTID = json['SUPERVISOR_ASSIGNMENT_ID'];
|
||||||
|
sUPERVISORDISPLAYNAME = json['SUPERVISOR_DISPLAY_NAME'];
|
||||||
|
sUPERVISOREMAILADDRESS = json['SUPERVISOR_EMAIL_ADDRESS'];
|
||||||
|
sUPERVISORID = json['SUPERVISOR_ID'];
|
||||||
|
sUPERVISORMOBILENUMBER = json['SUPERVISOR_MOBILE_NUMBER'];
|
||||||
|
sUPERVISORNAME = json['SUPERVISOR_NAME'];
|
||||||
|
sUPERVISORNUMBER = json['SUPERVISOR_NUMBER'];
|
||||||
|
sUPERVISORWORKNUMBER = json['SUPERVISOR_WORK_NUMBER'];
|
||||||
|
sWIPESEXEMPTEDFLAG = json['SWIPES_EXEMPTED_FLAG'];
|
||||||
|
sWIPESEXEMPTEDMEANING = json['SWIPES_EXEMPTED_MEANING'];
|
||||||
|
sYSTEMPERSONTYPE = json['SYSTEM_PERSON_TYPE'];
|
||||||
|
tKEMAILADDRESS = json['TK_EMAIL_ADDRESS'];
|
||||||
|
tKEMPLOYEEDISPLAYNAME = json['TK_EMPLOYEE_DISPLAY_NAME'];
|
||||||
|
tKEMPLOYEENAME = json['TK_EMPLOYEE_NAME'];
|
||||||
|
tKEMPLOYEENUMBER = json['TK_EMPLOYEE_NUMBER'];
|
||||||
|
tKPERSONID = json['TK_PERSON_ID'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
uNITNUMBER = json['UNIT_NUMBER'];
|
||||||
|
uSERSTATUS = json['USER_STATUS'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ACTUAL_TERMINATION_DATE'] = this.aCTUALTERMINATIONDATE;
|
||||||
|
data['ASSIGNMENT_END_DATE'] = this.aSSIGNMENTENDDATE;
|
||||||
|
data['ASSIGNMENT_ID'] = this.aSSIGNMENTID;
|
||||||
|
data['ASSIGNMENT_NUMBER'] = this.aSSIGNMENTNUMBER;
|
||||||
|
data['ASSIGNMENT_START_DATE'] = this.aSSIGNMENTSTARTDATE;
|
||||||
|
data['ASSIGNMENT_STATUS_TYPE_ID'] = this.aSSIGNMENTSTATUSTYPEID;
|
||||||
|
data['ASSIGNMENT_TYPE'] = this.aSSIGNMENTTYPE;
|
||||||
|
data['BUSINESS_GROUP_ID'] = this.bUSINESSGROUPID;
|
||||||
|
data['BUSINESS_GROUP_NAME'] = this.bUSINESSGROUPNAME;
|
||||||
|
data['BusinessCardQR'] = this.businessCardQR;
|
||||||
|
data['CURRENT_EMPLOYEE_FLAG'] = this.cURRENTEMPLOYEEFLAG;
|
||||||
|
data['EMPLOYEE_DISPLAY_NAME'] = this.eMPLOYEEDISPLAYNAME;
|
||||||
|
data['EMPLOYEE_DISPLAY_NAME_Ar'] = this.eMPLOYEEDISPLAYNAMEAr;
|
||||||
|
data['EMPLOYEE_DISPLAY_NAME_En'] = this.eMPLOYEEDISPLAYNAMEEn;
|
||||||
|
data['EMPLOYEE_EMAIL_ADDRESS'] = this.eMPLOYEEEMAILADDRESS;
|
||||||
|
data['EMPLOYEE_IMAGE'] = this.eMPLOYEEIMAGE;
|
||||||
|
data['EMPLOYEE_MOBILE_NUMBER'] = this.eMPLOYEEMOBILENUMBER;
|
||||||
|
data['EMPLOYEE_NAME'] = this.eMPLOYEENAME;
|
||||||
|
data['EMPLOYEE_NAME_Ar'] = this.eMPLOYEENAMEAr;
|
||||||
|
data['EMPLOYEE_NAME_En'] = this.eMPLOYEENAMEEn;
|
||||||
|
data['EMPLOYEE_NUMBER'] = this.eMPLOYEENUMBER;
|
||||||
|
data['EMPLOYEE_WORK_NUMBER'] = this.eMPLOYEEWORKNUMBER;
|
||||||
|
data['EMPLOYMENT_CATEGORY'] = this.eMPLOYMENTCATEGORY;
|
||||||
|
data['EMPLOYMENT_CATEGORY_MEANING'] = this.eMPLOYMENTCATEGORYMEANING;
|
||||||
|
data['EmployeeQR'] = this.employeeQR;
|
||||||
|
data['FREQUENCY'] = this.fREQUENCY;
|
||||||
|
data['FREQUENCY_MEANING'] = this.fREQUENCYMEANING;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['GRADE_ID'] = this.gRADEID;
|
||||||
|
data['GRADE_NAME'] = this.gRADENAME;
|
||||||
|
data['HIRE_DATE'] = this.hIREDATE;
|
||||||
|
data['JOB_ID'] = this.jOBID;
|
||||||
|
data['JOB_NAME'] = this.jOBNAME;
|
||||||
|
data['JOB_NAME_Ar'] = this.jOBNAMEAr;
|
||||||
|
data['JOB_NAME_En'] = this.jOBNAMEEn;
|
||||||
|
data['LEDGER_ID'] = this.lEDGERID;
|
||||||
|
data['LOCATION_ID'] = this.lOCATIONID;
|
||||||
|
data['LOCATION_NAME'] = this.lOCATIONNAME;
|
||||||
|
data['MANUAL_TIMECARD_FLAG'] = this.mANUALTIMECARDFLAG;
|
||||||
|
data['MANUAL_TIMECARD_MEANING'] = this.mANUALTIMECARDMEANING;
|
||||||
|
data['MobileNumberWithZipCode'] = this.mobileNumberWithZipCode;
|
||||||
|
data['NATIONALITY_CODE'] = this.nATIONALITYCODE;
|
||||||
|
data['NATIONALITY_MEANING'] = this.nATIONALITYMEANING;
|
||||||
|
data['NATIONAL_IDENTIFIER'] = this.nATIONALIDENTIFIER;
|
||||||
|
data['NORMAL_HOURS'] = this.nORMALHOURS;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['ORGANIZATION_ID'] = this.oRGANIZATIONID;
|
||||||
|
data['ORGANIZATION_NAME'] = this.oRGANIZATIONNAME;
|
||||||
|
data['PAYROLL_CODE'] = this.pAYROLLCODE;
|
||||||
|
data['PAYROLL_ID'] = this.pAYROLLID;
|
||||||
|
data['PAYROLL_NAME'] = this.pAYROLLNAME;
|
||||||
|
data['PERSON_ID'] = this.pERSONID;
|
||||||
|
data['PERSON_TYPE'] = this.pERSONTYPE;
|
||||||
|
data['PERSON_TYPE_ID'] = this.pERSONTYPEID;
|
||||||
|
data['PER_INFORMATION_CATEGORY'] = this.pERINFORMATIONCATEGORY;
|
||||||
|
data['POSITION_ID'] = this.pOSITIONID;
|
||||||
|
data['POSITION_NAME'] = this.pOSITIONNAME;
|
||||||
|
data['PRIMARY_FLAG'] = this.pRIMARYFLAG;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['SERVICE_DAYS'] = this.sERVICEDAYS;
|
||||||
|
data['SERVICE_MONTHS'] = this.sERVICEMONTHS;
|
||||||
|
data['SERVICE_YEARS'] = this.sERVICEYEARS;
|
||||||
|
data['SUPERVISOR_ASSIGNMENT_ID'] = this.sUPERVISORASSIGNMENTID;
|
||||||
|
data['SUPERVISOR_DISPLAY_NAME'] = this.sUPERVISORDISPLAYNAME;
|
||||||
|
data['SUPERVISOR_EMAIL_ADDRESS'] = this.sUPERVISOREMAILADDRESS;
|
||||||
|
data['SUPERVISOR_ID'] = this.sUPERVISORID;
|
||||||
|
data['SUPERVISOR_MOBILE_NUMBER'] = this.sUPERVISORMOBILENUMBER;
|
||||||
|
data['SUPERVISOR_NAME'] = this.sUPERVISORNAME;
|
||||||
|
data['SUPERVISOR_NUMBER'] = this.sUPERVISORNUMBER;
|
||||||
|
data['SUPERVISOR_WORK_NUMBER'] = this.sUPERVISORWORKNUMBER;
|
||||||
|
data['SWIPES_EXEMPTED_FLAG'] = this.sWIPESEXEMPTEDFLAG;
|
||||||
|
data['SWIPES_EXEMPTED_MEANING'] = this.sWIPESEXEMPTEDMEANING;
|
||||||
|
data['SYSTEM_PERSON_TYPE'] = this.sYSTEMPERSONTYPE;
|
||||||
|
data['TK_EMAIL_ADDRESS'] = this.tKEMAILADDRESS;
|
||||||
|
data['TK_EMPLOYEE_DISPLAY_NAME'] = this.tKEMPLOYEEDISPLAYNAME;
|
||||||
|
data['TK_EMPLOYEE_NAME'] = this.tKEMPLOYEENAME;
|
||||||
|
data['TK_EMPLOYEE_NUMBER'] = this.tKEMPLOYEENUMBER;
|
||||||
|
data['TK_PERSON_ID'] = this.tKPERSONID;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
data['UNIT_NUMBER'] = this.uNITNUMBER;
|
||||||
|
data['USER_STATUS'] = this.uSERSTATUS;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<List<MemberInformationListModel>> getFromPrefs() async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
List encodedList = prefs.getStringList(SharedPrefsConsts.memberInformation) ?? [];
|
||||||
|
return encodedList.map((e) => MemberInformationListModel.fromJson(jsonDecode(e))).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void saveToPrefs(List<MemberInformationListModel> list) async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
List<String> encodedList = list.map((e) => jsonEncode(e.toJson())).toList();
|
||||||
|
await prefs.setStringList(SharedPrefsConsts.memberInformation, encodedList);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
class NotificationAction {
|
||||||
|
String? pRETURNMSG;
|
||||||
|
String? pRETURNSTATUS;
|
||||||
|
|
||||||
|
NotificationAction({this.pRETURNMSG, this.pRETURNSTATUS});
|
||||||
|
|
||||||
|
NotificationAction.fromJson(Map<String, dynamic> json) {
|
||||||
|
pRETURNMSG = json['P_RETURN_MSG'];
|
||||||
|
pRETURNSTATUS = json['P_RETURN_STATUS'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['P_RETURN_MSG'] = this.pRETURNMSG;
|
||||||
|
data['P_RETURN_STATUS'] = this.pRETURNSTATUS;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
class NotificationGetRespondAttributesList {
|
||||||
|
String? attributeDisplayName;
|
||||||
|
String? attributeFormat;
|
||||||
|
String? attributeName;
|
||||||
|
String? attributeType;
|
||||||
|
|
||||||
|
NotificationGetRespondAttributesList({this.attributeDisplayName, this.attributeFormat, this.attributeName, this.attributeType});
|
||||||
|
|
||||||
|
NotificationGetRespondAttributesList.fromJson(Map<String, dynamic> json) {
|
||||||
|
attributeDisplayName = json['ATTRIBUTE_DISPLAY_NAME'];
|
||||||
|
attributeFormat = json['ATTRIBUTE_FORMAT'];
|
||||||
|
attributeName = json['ATTRIBUTE_NAME'];
|
||||||
|
attributeType = json['ATTRIBUTE_TYPE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['ATTRIBUTE_DISPLAY_NAME'] = attributeDisplayName;
|
||||||
|
data['ATTRIBUTE_FORMAT'] = attributeFormat;
|
||||||
|
data['ATTRIBUTE_NAME'] = attributeName;
|
||||||
|
data['ATTRIBUTE_TYPE'] = attributeType;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:mohem_flutter_app/classes/consts.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
|
class PrivilegeListModel {
|
||||||
|
int? iD;
|
||||||
|
String? serviceName;
|
||||||
|
bool? previlege;
|
||||||
|
|
||||||
|
PrivilegeListModel({this.iD, this.serviceName, this.previlege});
|
||||||
|
|
||||||
|
PrivilegeListModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
iD = json['ID'];
|
||||||
|
serviceName = json['ServiceName'];
|
||||||
|
previlege = json['Previlege'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ID'] = this.iD;
|
||||||
|
data['ServiceName'] = this.serviceName;
|
||||||
|
data['Previlege'] = this.previlege;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<List<PrivilegeListModel>> getFromPrefs() async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
List encodedList = prefs.getStringList(SharedPrefsConsts.privilegeList) ?? [];
|
||||||
|
return encodedList.map((e) => PrivilegeListModel.fromJson(jsonDecode(e))).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void saveToPrefs(List<PrivilegeListModel> list) async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
List<String> encodedList = list.map((e) => jsonEncode(e.toJson())).toList();
|
||||||
|
await prefs.setStringList(SharedPrefsConsts.privilegeList, encodedList);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
class SubordinatesLeavesList {
|
||||||
|
String? aBSENCEATTENDANCETYPENAME;
|
||||||
|
String? cALENDARENTRYDESC;
|
||||||
|
String? dATEEND;
|
||||||
|
String? dATESTART;
|
||||||
|
String? eMPLOYEEIMAGE;
|
||||||
|
String? eMPLOYEENAME;
|
||||||
|
String? eMPLOYEENUMBER;
|
||||||
|
String? eVENTDATE;
|
||||||
|
String? lEAVETYPE;
|
||||||
|
int? oRGANIZATIONID;
|
||||||
|
String? oRGANIZATIONNAME;
|
||||||
|
String? pOSITIONTITLE;
|
||||||
|
String? rEPLACEMENTNAME;
|
||||||
|
String? sTATUS;
|
||||||
|
|
||||||
|
SubordinatesLeavesList(
|
||||||
|
{this.aBSENCEATTENDANCETYPENAME,
|
||||||
|
this.cALENDARENTRYDESC,
|
||||||
|
this.dATEEND,
|
||||||
|
this.dATESTART,
|
||||||
|
this.eMPLOYEEIMAGE,
|
||||||
|
this.eMPLOYEENAME,
|
||||||
|
this.eMPLOYEENUMBER,
|
||||||
|
this.eVENTDATE,
|
||||||
|
this.lEAVETYPE,
|
||||||
|
this.oRGANIZATIONID,
|
||||||
|
this.oRGANIZATIONNAME,
|
||||||
|
this.pOSITIONTITLE,
|
||||||
|
this.rEPLACEMENTNAME,
|
||||||
|
this.sTATUS});
|
||||||
|
|
||||||
|
SubordinatesLeavesList.fromJson(Map<String, dynamic> json) {
|
||||||
|
aBSENCEATTENDANCETYPENAME = json['ABSENCE_ATTENDANCE_TYPE_NAME'];
|
||||||
|
cALENDARENTRYDESC = json['CALENDAR_ENTRY_DESC'];
|
||||||
|
dATEEND = json['DATE_END'];
|
||||||
|
dATESTART = json['DATE_START'];
|
||||||
|
eMPLOYEEIMAGE = json['EMPLOYEE_IMAGE'];
|
||||||
|
eMPLOYEENAME = json['EMPLOYEE_NAME'];
|
||||||
|
eMPLOYEENUMBER = json['EMPLOYEE_NUMBER'];
|
||||||
|
eVENTDATE = json['EVENT_DATE'];
|
||||||
|
lEAVETYPE = json['LEAVE_TYPE'];
|
||||||
|
oRGANIZATIONID = json['ORGANIZATION_ID'];
|
||||||
|
oRGANIZATIONNAME = json['ORGANIZATION_NAME'];
|
||||||
|
pOSITIONTITLE = json['POSITION_TITLE'];
|
||||||
|
rEPLACEMENTNAME = json['REPLACEMENT_NAME'];
|
||||||
|
sTATUS = json['STATUS'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ABSENCE_ATTENDANCE_TYPE_NAME'] = this.aBSENCEATTENDANCETYPENAME;
|
||||||
|
data['CALENDAR_ENTRY_DESC'] = this.cALENDARENTRYDESC;
|
||||||
|
data['DATE_END'] = this.dATEEND;
|
||||||
|
data['DATE_START'] = this.dATESTART;
|
||||||
|
data['EMPLOYEE_IMAGE'] = this.eMPLOYEEIMAGE;
|
||||||
|
data['EMPLOYEE_NAME'] = this.eMPLOYEENAME;
|
||||||
|
data['EMPLOYEE_NUMBER'] = this.eMPLOYEENUMBER;
|
||||||
|
data['EVENT_DATE'] = this.eVENTDATE;
|
||||||
|
data['LEAVE_TYPE'] = this.lEAVETYPE;
|
||||||
|
data['ORGANIZATION_ID'] = this.oRGANIZATIONID;
|
||||||
|
data['ORGANIZATION_NAME'] = this.oRGANIZATIONNAME;
|
||||||
|
data['POSITION_TITLE'] = this.pOSITIONTITLE;
|
||||||
|
data['REPLACEMENT_NAME'] = this.rEPLACEMENTNAME;
|
||||||
|
data['STATUS'] = this.sTATUS;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
|
class WorkListItemTypeModelData {
|
||||||
|
late int value;
|
||||||
|
late String name;
|
||||||
|
late String fullName;
|
||||||
|
late bool active;
|
||||||
|
late List<Color> color;
|
||||||
|
late String icon;
|
||||||
|
late String key;
|
||||||
|
late bool disable;
|
||||||
|
|
||||||
|
WorkListItemTypeModelData({required this.value, required this.name, required this.fullName, required this.active, required this.color, required this.icon, required this.key, required this.disable});
|
||||||
|
|
||||||
|
WorkListItemTypeModelData.fromJson(Map<String, dynamic> json) {
|
||||||
|
value = json['value'];
|
||||||
|
name = json['name'];
|
||||||
|
fullName = json['fullName'];
|
||||||
|
active = json['active'];
|
||||||
|
color = json['color'];
|
||||||
|
icon = json['icon'];
|
||||||
|
key = json['key'];
|
||||||
|
disable = json['disable'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['value'] = value;
|
||||||
|
data['name'] = name;
|
||||||
|
data['fullName'] = fullName;
|
||||||
|
data['active'] = active;
|
||||||
|
data['color'] = color;
|
||||||
|
data['icon'] = icon;
|
||||||
|
data['key'] = key;
|
||||||
|
data['disable'] = disable;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,137 @@
|
|||||||
|
|
||||||
|
class WorkListResponseModel {
|
||||||
|
String? bEGINDATE;
|
||||||
|
String? dUEDATE;
|
||||||
|
String? eNDDATE;
|
||||||
|
String? fROMROLE;
|
||||||
|
int? fROMROWNUM;
|
||||||
|
String? fROMUSER;
|
||||||
|
String? fUNCTIONNAME;
|
||||||
|
String? iTEMKEY;
|
||||||
|
String? iTEMTYPE;
|
||||||
|
String? iTEMTYPEDISPLAYNAME;
|
||||||
|
String? lANGUAGE;
|
||||||
|
String? mAILSTATUS;
|
||||||
|
String? mOREINFOROLE;
|
||||||
|
int? nOTIFICATIONID;
|
||||||
|
String? nOTIFICATIONNAME;
|
||||||
|
int? nOOFROWS;
|
||||||
|
String? oRIGINALRECIPIENT;
|
||||||
|
String? pONUMBER;
|
||||||
|
int? pRIORITY;
|
||||||
|
String? pRIORITYF;
|
||||||
|
String? pRNUMBER;
|
||||||
|
String? rECIPIENTROLE;
|
||||||
|
String? rEQUESTNUMBER;
|
||||||
|
String? rEQUESTTYPE;
|
||||||
|
String? rESPONDER;
|
||||||
|
int? rOWNUM;
|
||||||
|
String? sELECTEDEMPLOYEENUMBER;
|
||||||
|
String? sTATUS;
|
||||||
|
String? sUBJECT;
|
||||||
|
int? tOROWNUM;
|
||||||
|
String? tOUSER;
|
||||||
|
|
||||||
|
WorkListResponseModel(
|
||||||
|
{this.bEGINDATE,
|
||||||
|
this.dUEDATE,
|
||||||
|
this.eNDDATE,
|
||||||
|
this.fROMROLE,
|
||||||
|
this.fROMROWNUM,
|
||||||
|
this.fROMUSER,
|
||||||
|
this.fUNCTIONNAME,
|
||||||
|
this.iTEMKEY,
|
||||||
|
this.iTEMTYPE,
|
||||||
|
this.iTEMTYPEDISPLAYNAME,
|
||||||
|
this.lANGUAGE,
|
||||||
|
this.mAILSTATUS,
|
||||||
|
this.mOREINFOROLE,
|
||||||
|
this.nOTIFICATIONID,
|
||||||
|
this.nOTIFICATIONNAME,
|
||||||
|
this.nOOFROWS,
|
||||||
|
this.oRIGINALRECIPIENT,
|
||||||
|
this.pONUMBER,
|
||||||
|
this.pRIORITY,
|
||||||
|
this.pRIORITYF,
|
||||||
|
this.pRNUMBER,
|
||||||
|
this.rECIPIENTROLE,
|
||||||
|
this.rEQUESTNUMBER,
|
||||||
|
this.rEQUESTTYPE,
|
||||||
|
this.rESPONDER,
|
||||||
|
this.rOWNUM,
|
||||||
|
this.sELECTEDEMPLOYEENUMBER,
|
||||||
|
this.sTATUS,
|
||||||
|
this.sUBJECT,
|
||||||
|
this.tOROWNUM,
|
||||||
|
this.tOUSER});
|
||||||
|
|
||||||
|
WorkListResponseModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
bEGINDATE = json['BEGIN_DATE'];
|
||||||
|
dUEDATE = json['DUE_DATE'];
|
||||||
|
eNDDATE = json['END_DATE'];
|
||||||
|
fROMROLE = json['FROM_ROLE'];
|
||||||
|
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||||
|
fROMUSER = json['FROM_USER'];
|
||||||
|
fUNCTIONNAME = json['FUNCTION_NAME'];
|
||||||
|
iTEMKEY = json['ITEM_KEY'];
|
||||||
|
iTEMTYPE = json['ITEM_TYPE'];
|
||||||
|
iTEMTYPEDISPLAYNAME = json['ITEM_TYPE_DISPLAY_NAME'];
|
||||||
|
lANGUAGE = json['LANGUAGE'];
|
||||||
|
mAILSTATUS = json['MAIL_STATUS'];
|
||||||
|
mOREINFOROLE = json['MORE_INFO_ROLE'];
|
||||||
|
nOTIFICATIONID = json['NOTIFICATION_ID'];
|
||||||
|
nOTIFICATIONNAME = json['NOTIFICATION_NAME'];
|
||||||
|
nOOFROWS = json['NO_OF_ROWS'];
|
||||||
|
oRIGINALRECIPIENT = json['ORIGINAL_RECIPIENT'];
|
||||||
|
pONUMBER = json['PO_NUMBER'];
|
||||||
|
pRIORITY = json['PRIORITY'];
|
||||||
|
pRIORITYF = json['PRIORITY_F'];
|
||||||
|
pRNUMBER = json['PR_NUMBER'];
|
||||||
|
rECIPIENTROLE = json['RECIPIENT_ROLE'];
|
||||||
|
rEQUESTNUMBER = json['REQUEST_NUMBER'];
|
||||||
|
rEQUESTTYPE = json['REQUEST_TYPE'];
|
||||||
|
rESPONDER = json['RESPONDER'];
|
||||||
|
rOWNUM = json['ROW_NUM'];
|
||||||
|
sELECTEDEMPLOYEENUMBER = json['SELECTED_EMPLOYEE_NUMBER'];
|
||||||
|
sTATUS = json['STATUS'];
|
||||||
|
sUBJECT = json['SUBJECT'];
|
||||||
|
tOROWNUM = json['TO_ROW_NUM'];
|
||||||
|
tOUSER = json['TO_USER'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['BEGIN_DATE'] = this.bEGINDATE;
|
||||||
|
data['DUE_DATE'] = this.dUEDATE;
|
||||||
|
data['END_DATE'] = this.eNDDATE;
|
||||||
|
data['FROM_ROLE'] = this.fROMROLE;
|
||||||
|
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||||
|
data['FROM_USER'] = this.fROMUSER;
|
||||||
|
data['FUNCTION_NAME'] = this.fUNCTIONNAME;
|
||||||
|
data['ITEM_KEY'] = this.iTEMKEY;
|
||||||
|
data['ITEM_TYPE'] = this.iTEMTYPE;
|
||||||
|
data['ITEM_TYPE_DISPLAY_NAME'] = this.iTEMTYPEDISPLAYNAME;
|
||||||
|
data['LANGUAGE'] = this.lANGUAGE;
|
||||||
|
data['MAIL_STATUS'] = this.mAILSTATUS;
|
||||||
|
data['MORE_INFO_ROLE'] = this.mOREINFOROLE;
|
||||||
|
data['NOTIFICATION_ID'] = this.nOTIFICATIONID;
|
||||||
|
data['NOTIFICATION_NAME'] = this.nOTIFICATIONNAME;
|
||||||
|
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||||
|
data['ORIGINAL_RECIPIENT'] = this.oRIGINALRECIPIENT;
|
||||||
|
data['PO_NUMBER'] = this.pONUMBER;
|
||||||
|
data['PRIORITY'] = this.pRIORITY;
|
||||||
|
data['PRIORITY_F'] = this.pRIORITYF;
|
||||||
|
data['PR_NUMBER'] = this.pRNUMBER;
|
||||||
|
data['RECIPIENT_ROLE'] = this.rECIPIENTROLE;
|
||||||
|
data['REQUEST_NUMBER'] = this.rEQUESTNUMBER;
|
||||||
|
data['REQUEST_TYPE'] = this.rEQUESTTYPE;
|
||||||
|
data['RESPONDER'] = this.rESPONDER;
|
||||||
|
data['ROW_NUM'] = this.rOWNUM;
|
||||||
|
data['SELECTED_EMPLOYEE_NUMBER'] = this.sELECTEDEMPLOYEENUMBER;
|
||||||
|
data['STATUS'] = this.sTATUS;
|
||||||
|
data['SUBJECT'] = this.sUBJECT;
|
||||||
|
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||||
|
data['TO_USER'] = this.tOUSER;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,194 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/dashboard_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||||
|
import 'package:mohem_flutter_app/main.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/dashboard/get_open_notifications_list.dart';
|
||||||
|
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
|
||||||
|
class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
|
||||||
|
//Attendance Tracking
|
||||||
|
bool isAttendanceTrackingLoading = true;
|
||||||
|
int endTime = 0, isTimeRemainingInSeconds = 0;
|
||||||
|
double progress = 0.0;
|
||||||
|
GetAttendanceTracking? attendanceTracking;
|
||||||
|
|
||||||
|
//Work List
|
||||||
|
bool isWorkListLoading = true;
|
||||||
|
int workListCounter = 0;
|
||||||
|
|
||||||
|
//Misssing Swipe
|
||||||
|
bool isMissingSwipeLoading = true;
|
||||||
|
int missingSwipeCounter = 0;
|
||||||
|
|
||||||
|
//Leave and Ticket Balance
|
||||||
|
bool isLeaveTicketBalanceLoading = true;
|
||||||
|
double leaveBalance = 0;
|
||||||
|
double ticketBalance = 0;
|
||||||
|
|
||||||
|
//Menu Entries
|
||||||
|
bool isServicesMenusLoading = true;
|
||||||
|
List<Menus>? homeMenus;
|
||||||
|
List<GetMenuEntriesList>? getMenuEntriesList;
|
||||||
|
|
||||||
|
//Attendance Tracking API's & Methods
|
||||||
|
Future<bool> fetchAttendanceTracking(context) async {
|
||||||
|
try {
|
||||||
|
attendanceTracking = await DashboardApiClient().getAttendanceTracking();
|
||||||
|
print("attendanceTracking:" + (attendanceTracking!.pRemainingHours).toString());
|
||||||
|
isAttendanceTrackingLoading = false;
|
||||||
|
// isTimeRemainingInSeconds = calculateSeconds( "00:00:00");
|
||||||
|
if (attendanceTracking?.pSwipeIn != null) {
|
||||||
|
isTimeRemainingInSeconds = calculateSeconds(attendanceTracking!.pRemainingHours ?? "00:00:00");
|
||||||
|
int totalShiftTimeInSeconds = calculateSeconds(attendanceTracking!.pScheduledHours ?? "00:00:00");
|
||||||
|
print("totalShiftTimeInSeconds: " + totalShiftTimeInSeconds.toString());
|
||||||
|
print("isTimeRemainingInSeconds: " + isTimeRemainingInSeconds.toString());
|
||||||
|
progress = (isTimeRemainingInSeconds / totalShiftTimeInSeconds);
|
||||||
|
endTime = DateTime.now().millisecondsSinceEpoch + Duration(seconds: isTimeRemainingInSeconds).inMilliseconds;
|
||||||
|
print("endTime " + endTime.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
notifyListeners();
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int calculateSeconds(String time) {
|
||||||
|
int hour = int.parse(time.split(":")[0]);
|
||||||
|
int mints = int.parse(time.split(":")[1]);
|
||||||
|
int seconds = int.parse(time.split(":")[2]);
|
||||||
|
return ((hour * 60 * 60) + (mints * 60) + seconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
update(context) {
|
||||||
|
fetchAttendanceTracking(context);
|
||||||
|
// isAttendanceTrackingLoading = !isAttendanceTrackingLoading;
|
||||||
|
// isWorkListLoading = !isWorkListLoading;
|
||||||
|
// attendanceTracking?.pSwipeIn = "a";
|
||||||
|
// isTimeRemainingInSeconds = calculateSeconds("00:10:30");
|
||||||
|
// endTime = DateTime.now().millisecondsSinceEpoch + Duration(seconds: isTimeRemainingInSeconds).inMilliseconds;
|
||||||
|
// notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
ItgFormsModel? itgFormsModel;
|
||||||
|
List<GetOpenNotificationsList>? getOpenNotificationsList;
|
||||||
|
|
||||||
|
//Work List API's & Methods
|
||||||
|
Future fetchWorkListCounter(context, {bool showLoading = false}) async {
|
||||||
|
try {
|
||||||
|
if (showLoading) Utils.showLoading(context);
|
||||||
|
GenericResponseModel? genericResponseModel = await DashboardApiClient().getOpenNotifications();
|
||||||
|
isWorkListLoading = false;
|
||||||
|
getOpenNotificationsList = genericResponseModel?.getOpenNotificationsList;
|
||||||
|
workListCounter = genericResponseModel?.pOPENNTFNUMBER ?? 0;
|
||||||
|
itgFormsModel = await DashboardApiClient().getItgFormsPendingTask();
|
||||||
|
workListCounter = workListCounter + (itgFormsModel?.totalCount ?? 0);
|
||||||
|
if (showLoading) Utils.hideLoading(context);
|
||||||
|
notifyListeners();
|
||||||
|
} catch (ex) {
|
||||||
|
isWorkListLoading = false;
|
||||||
|
logger.wtf(ex);
|
||||||
|
if (showLoading) Utils.hideLoading(context);
|
||||||
|
notifyListeners();
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Missing Siwpe API's & Methods
|
||||||
|
Future fetchMissingSwipe(context) async {
|
||||||
|
try {
|
||||||
|
GenericResponseModel? genericResponseModel = await DashboardApiClient().getOpenMissingSwipes();
|
||||||
|
isMissingSwipeLoading = false;
|
||||||
|
missingSwipeCounter = genericResponseModel!.getOpenMissingSwipesList!.pOpenMissingSwipes ?? 0;
|
||||||
|
notifyListeners();
|
||||||
|
} catch (ex) {
|
||||||
|
isMissingSwipeLoading = false;
|
||||||
|
logger.wtf(ex);
|
||||||
|
notifyListeners();
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Leave and Ticket Balance API's & Methods
|
||||||
|
Future fetchLeaveTicketBalance(context) async {
|
||||||
|
try {
|
||||||
|
GenericResponseModel? genericResponseModel = await DashboardApiClient().getAccrualBalances();
|
||||||
|
isLeaveTicketBalanceLoading = false;
|
||||||
|
leaveBalance = genericResponseModel?.getAccrualBalancesList![0].accrualNetEntitlement ?? 0.0;
|
||||||
|
ticketBalance = (genericResponseModel?.getAccrualBalancesList![1].accrualNetEntitlement ?? 0.0) + (genericResponseModel?.getAccrualBalancesList![2].accrualNetEntitlement ?? 0.0);
|
||||||
|
notifyListeners();
|
||||||
|
} catch (ex) {
|
||||||
|
isLeaveTicketBalanceLoading = false;
|
||||||
|
logger.wtf(ex);
|
||||||
|
notifyListeners();
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//List Menu API's & Methods
|
||||||
|
fetchListMenu() async {
|
||||||
|
try {
|
||||||
|
GenericResponseModel? genericResponseModel = await DashboardApiClient().getListMenu();
|
||||||
|
Map<String, String> map = {};
|
||||||
|
print(jsonEncode(genericResponseModel!.listMenu));
|
||||||
|
for (int i = 0; i < genericResponseModel.listMenu!.length; i++) {
|
||||||
|
print(genericResponseModel.listMenu![i].menuName ?? "");
|
||||||
|
map[genericResponseModel.listMenu![i].menuName ?? ""] = i.toString();
|
||||||
|
}
|
||||||
|
logger.i(map);
|
||||||
|
notifyListeners();
|
||||||
|
} catch (ex) {
|
||||||
|
logger.wtf(ex);
|
||||||
|
notifyListeners();
|
||||||
|
Utils.handleException(ex, null, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Menu Entries API's & Methods
|
||||||
|
fetchMenuEntries() async {
|
||||||
|
try {
|
||||||
|
GenericResponseModel? genericResponseModel = await DashboardApiClient().getGetMenuEntries();
|
||||||
|
getMenuEntriesList = genericResponseModel!.getMenuEntriesList;
|
||||||
|
homeMenus = parseMenues(getMenuEntriesList ?? []);
|
||||||
|
isServicesMenusLoading = false;
|
||||||
|
notifyListeners();
|
||||||
|
} catch (ex) {
|
||||||
|
logger.wtf(ex);
|
||||||
|
notifyListeners();
|
||||||
|
Utils.handleException(ex, null, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Menus> parseMenues(List<GetMenuEntriesList> getMenuEntriesList) {
|
||||||
|
List<Menus> menus = [];
|
||||||
|
for (int i = 0; i < getMenuEntriesList.length; i++) {
|
||||||
|
if (getMenuEntriesList[i].parentMenuName!.isEmpty) {
|
||||||
|
menus.add(Menus(getMenuEntriesList[i], getMenuEntriesList.where((element) => getMenuEntriesList[i].menuName == element.parentMenuName).toList()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify Menus by printing in log
|
||||||
|
// for(int i=0;i<menus.length;i++){
|
||||||
|
// logger.i(jsonEncode(menus[i].menuEntry.prompt));
|
||||||
|
// for(int j=0;j<menus[i].menuEntiesList.length;j++){
|
||||||
|
// logger.e(menus[i].menuEntiesList[j].prompt);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
return menus;
|
||||||
|
}
|
||||||
|
|
||||||
|
void notify() {
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,26 +0,0 @@
|
|||||||
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/generated/locale_keys.g.dart';
|
|
||||||
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
|
|
||||||
|
|
||||||
AppBar appBar(BuildContext context, {required String title}) {
|
|
||||||
return AppBar(
|
|
||||||
title: title.toText24(color: MyColors.darkTextColor),
|
|
||||||
centerTitle: false,
|
|
||||||
automaticallyImplyLeading: false,
|
|
||||||
backgroundColor: Colors.white,
|
|
||||||
|
|
||||||
actions: [
|
|
||||||
IconButton(
|
|
||||||
onPressed: () {
|
|
||||||
Navigator.pop(context);
|
|
||||||
},
|
|
||||||
icon: Icon(
|
|
||||||
Icons.close,
|
|
||||||
color: MyColors.darkIconColor,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,478 +0,0 @@
|
|||||||
import 'package:easy_localization/src/public_ext.dart';
|
|
||||||
import 'package:flutter/cupertino.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/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/widgets/circular_avatar.dart';
|
|
||||||
import 'package:mohem_flutter_app/widgets/circular_step_progress_bar.dart';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Dashboard extends StatefulWidget {
|
|
||||||
Dashboard({Key? key}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
|
||||||
_DashboardState createState() {
|
|
||||||
return _DashboardState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class _DashboardState extends State<Dashboard> {
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
super.initState();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void dispose() {
|
|
||||||
super.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
List<String> names = [
|
|
||||||
LocaleKeys.workList.tr(),
|
|
||||||
LocaleKeys.missingSwipes.tr(),
|
|
||||||
LocaleKeys.leaveBalance.tr(),
|
|
||||||
LocaleKeys.ticketBalance.tr()
|
|
||||||
];
|
|
||||||
List<double> namesInt = [118, 02, 18.5, 03];
|
|
||||||
List<int> namesColor = [0xff125765, 0xff239D8F, 0xff2BB8A8, 0xff1D92AA];
|
|
||||||
|
|
||||||
List<String> namesT = [
|
|
||||||
LocaleKeys.monthlyAttendance.tr(),
|
|
||||||
LocaleKeys.workFromHome.tr(),
|
|
||||||
LocaleKeys.ticketRequest.tr(),
|
|
||||||
LocaleKeys.monthlyAttendance.tr()
|
|
||||||
];
|
|
||||||
List<String> iconT = [
|
|
||||||
"assets/images/monthly_attendance.svg",
|
|
||||||
"assets/images/work_from_home.svg",
|
|
||||||
"assets/images/ticket_request.svg",
|
|
||||||
"assets/images/work_from_home.svg"
|
|
||||||
];
|
|
||||||
|
|
||||||
List<String> namesD = [
|
|
||||||
"Nostalgia Perfume Perfume",
|
|
||||||
"Al Nafoura",
|
|
||||||
"AlJadi",
|
|
||||||
"Nostalgia Perfume"
|
|
||||||
];
|
|
||||||
|
|
||||||
return Scaffold(
|
|
||||||
body: Column(
|
|
||||||
children: [
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
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(() {}),
|
|
||||||
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),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
).paddingOnly(left: 21, right: 21, top: 48, bottom: 7),
|
|
||||||
Expanded(
|
|
||||||
child: ListView(
|
|
||||||
padding: EdgeInsets.zero,
|
|
||||||
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: Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
borderRadius: BorderRadius.circular(15),
|
|
||||||
gradient: const LinearGradient(
|
|
||||||
transform: GradientRotation(.46),
|
|
||||||
begin: Alignment.topRight,
|
|
||||||
end: Alignment.bottomRight,
|
|
||||||
colors: [
|
|
||||||
MyColors.gradiantEndColor,
|
|
||||||
MyColors.gradiantStartColor,
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
child: Stack(
|
|
||||||
alignment: Alignment.center,
|
|
||||||
children: [
|
|
||||||
SvgPicture.asset("assets/images/"),
|
|
||||||
Column(
|
|
||||||
crossAxisAlignment:
|
|
||||||
CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
crossAxisAlignment:
|
|
||||||
CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
LocaleKeys.markAttendance
|
|
||||||
.tr()
|
|
||||||
.toText14(
|
|
||||||
color: Colors.white,
|
|
||||||
isBold: true),
|
|
||||||
9.height,
|
|
||||||
"07:55:12".toText14(
|
|
||||||
color: Colors.white,
|
|
||||||
isBold: true),
|
|
||||||
LocaleKeys.timeLeftToday
|
|
||||||
.tr()
|
|
||||||
.toText12(color: Colors.white),
|
|
||||||
9.height,
|
|
||||||
const ClipRRect(
|
|
||||||
borderRadius: BorderRadius.all(
|
|
||||||
Radius.circular(20),
|
|
||||||
),
|
|
||||||
child: LinearProgressIndicator(
|
|
||||||
value: 0.7,
|
|
||||||
minHeight: 8,
|
|
||||||
valueColor:
|
|
||||||
const AlwaysStoppedAnimation<
|
|
||||||
Color>(Colors.white),
|
|
||||||
backgroundColor:
|
|
||||||
const Color(0xff196D73),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
).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),
|
|
||||||
"09:00".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(
|
|
||||||
"assets/images/stop.svg"),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
).onPress(() {
|
|
||||||
Navigator.pushNamed(
|
|
||||||
context, AppRoutes.todayAttendance);
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
9.width,
|
|
||||||
Expanded(
|
|
||||||
child: GridView.builder(
|
|
||||||
shrinkWrap: true,
|
|
||||||
primary: false,
|
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
|
||||||
gridDelegate:
|
|
||||||
const SliverGridDelegateWithFixedCrossAxisCount(
|
|
||||||
crossAxisCount: 2,
|
|
||||||
childAspectRatio: 2 / 2,
|
|
||||||
crossAxisSpacing: 9,
|
|
||||||
mainAxisSpacing: 9),
|
|
||||||
padding: EdgeInsets.zero,
|
|
||||||
itemCount: 4,
|
|
||||||
itemBuilder: (BuildContext context, int index) {
|
|
||||||
return Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Color(namesColor[index]),
|
|
||||||
borderRadius: BorderRadius.circular(10),
|
|
||||||
),
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment:
|
|
||||||
MainAxisAlignment.spaceBetween,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
names[index].toText12(color: Colors.white),
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: namesInt[index]
|
|
||||||
.toStringAsFixed(1)
|
|
||||||
.toText16(
|
|
||||||
color: Colors.white,
|
|
||||||
isBold: true),
|
|
||||||
),
|
|
||||||
SvgPicture.asset(
|
|
||||||
"assets/images/arrow_next.svg",
|
|
||||||
color: Colors.white)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
],
|
|
||||||
).paddingOnly(
|
|
||||||
left: 10, right: 10, bottom: 6, top: 6),
|
|
||||||
).onPress(() {
|
|
||||||
Navigator.pushNamed(
|
|
||||||
context, AppRoutes.workList);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
20.height,
|
|
||||||
Row(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
"Other".tr().toText12(),
|
|
||||||
LocaleKeys.services.tr().toText24(isBold: true),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
LocaleKeys.viewAllServices
|
|
||||||
.tr()
|
|
||||||
.toText12(isUnderLine: true),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
).paddingOnly(left: 21, right: 21, top: 7),
|
|
||||||
SizedBox(
|
|
||||||
height: 105 + 26,
|
|
||||||
child: ListView.separated(
|
|
||||||
shrinkWrap: true,
|
|
||||||
physics: const BouncingScrollPhysics(),
|
|
||||||
padding: const EdgeInsets.only(
|
|
||||||
left: 21, right: 21, top: 13, bottom: 13),
|
|
||||||
scrollDirection: Axis.horizontal,
|
|
||||||
itemBuilder: (cxt, index) {
|
|
||||||
return AspectRatio(
|
|
||||||
aspectRatio: 105 / 105,
|
|
||||||
child: Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Colors.white,
|
|
||||||
borderRadius: BorderRadius.circular(15),
|
|
||||||
boxShadow: [
|
|
||||||
BoxShadow(
|
|
||||||
color:
|
|
||||||
const Color(0xff000000).withOpacity(.05),
|
|
||||||
blurRadius: 26,
|
|
||||||
offset: const Offset(0, -3),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
SvgPicture.asset(iconT[index]),
|
|
||||||
Row(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.end,
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child:
|
|
||||||
namesT[index].toText11(isBold: true),
|
|
||||||
),
|
|
||||||
SvgPicture.asset(
|
|
||||||
"assets/images/arrow_next.svg")
|
|
||||||
.paddingOnly(bottom: 4)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
],
|
|
||||||
).paddingOnly(
|
|
||||||
left: 10, right: 10, bottom: 10, top: 12),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
separatorBuilder: (cxt, index) => 9.width,
|
|
||||||
itemCount: 4),
|
|
||||||
),
|
|
||||||
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(
|
|
||||||
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).onPress(() {
|
|
||||||
Navigator.pushNamed(
|
|
||||||
context, AppRoutes.monthlyAttendance);
|
|
||||||
}),
|
|
||||||
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),
|
|
||||||
),
|
|
||||||
child: ClipRRect(
|
|
||||||
borderRadius: const BorderRadius.all(
|
|
||||||
Radius.circular(50),
|
|
||||||
),
|
|
||||||
child: Image.network(
|
|
||||||
"https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo",
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
4.height,
|
|
||||||
Expanded(
|
|
||||||
child: namesD[6 % (index + 1)].toText12(
|
|
||||||
isCenter: true, maxLine: 2)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
separatorBuilder: (cxt, index) => 8.width,
|
|
||||||
itemCount: 6),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -0,0 +1,390 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/colors.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/provider/dashboard_provider_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/ui/landing/widget/menus_widget.dart';
|
||||||
|
import 'package:mohem_flutter_app/ui/landing/widget/services_widget.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/circular_avatar.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class DashboardScreen extends StatefulWidget {
|
||||||
|
DashboardScreen({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_DashboardScreenState createState() {
|
||||||
|
return _DashboardScreenState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _DashboardScreenState extends State<DashboardScreen> {
|
||||||
|
late DashboardProviderModel data;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
data = Provider.of<DashboardProviderModel>(context, listen: false);
|
||||||
|
data.fetchAttendanceTracking(context);
|
||||||
|
data.fetchWorkListCounter(context);
|
||||||
|
data.fetchMissingSwipe(context);
|
||||||
|
data.fetchLeaveTicketBalance(context);
|
||||||
|
data.fetchMenuEntries();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
List<String> namesD = ["Nostalgia Perfume Perfume", "Al Nafoura", "AlJadi", "Nostalgia Perfume"];
|
||||||
|
|
||||||
|
return Scaffold(
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
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(() {}),
|
||||||
|
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),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
).onPress(() {
|
||||||
|
data.update(context);
|
||||||
|
})
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 21, right: 21, top: 48, bottom: 7),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
// padding: EdgeInsets.zero,
|
||||||
|
// physics: NeverScrollableScrollPhysics(),
|
||||||
|
children: [
|
||||||
|
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(
|
||||||
|
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(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
20.height,
|
||||||
|
],
|
||||||
|
).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(
|
||||||
|
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,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: const BorderRadius.all(
|
||||||
|
Radius.circular(100),
|
||||||
|
),
|
||||||
|
border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
|
||||||
|
),
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: const BorderRadius.all(
|
||||||
|
Radius.circular(50),
|
||||||
|
),
|
||||||
|
child: Image.network(
|
||||||
|
"https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo",
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
4.height,
|
||||||
|
Expanded(
|
||||||
|
child: namesD[6 % (index + 1)].toText12(isCenter: true, maxLine: 2),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
separatorBuilder: (cxt, index) => 8.width,
|
||||||
|
itemCount: 6),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
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,
|
||||||
|
),
|
||||||
|
type: BottomNavigationBarType.fixed,
|
||||||
|
selectedItemColor: Colors.black,
|
||||||
|
backgroundColor: Color(0xffF8F8F8),
|
||||||
|
onTap: (v) {},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,138 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:mohem_flutter_app/config/routes.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/provider/dashboard_provider_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class MenusWidget extends StatelessWidget {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
List<int> namesColor = [0xff125765, 0xff239D8F, 0xff2BB8A8, 0xff1D92AA];
|
||||||
|
|
||||||
|
return Consumer<DashboardProviderModel>(builder: (cxt, data, child) {
|
||||||
|
return GridView(
|
||||||
|
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 2 / 2, crossAxisSpacing: 9, mainAxisSpacing: 9),
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
shrinkWrap: true,
|
||||||
|
primary: false,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
children: [
|
||||||
|
data.isWorkListLoading
|
||||||
|
? MenuShimmer().onPress(() {
|
||||||
|
data.fetchWorkListCounter(context, showLoading: true);
|
||||||
|
})
|
||||||
|
: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Color(namesColor[0]),
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
LocaleKeys.workList.tr().toText12(color: Colors.white),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: data.workListCounter.toString().toText16(color: Colors.white, isBold: true),
|
||||||
|
),
|
||||||
|
SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 10, right: 10, bottom: 6, top: 6),
|
||||||
|
).onPress(() async {
|
||||||
|
//await data.fetchWorkListCounter(context, showLoading: true);
|
||||||
|
Navigator.pushNamed(context, AppRoutes.workList);
|
||||||
|
}),
|
||||||
|
data.isMissingSwipeLoading
|
||||||
|
? MenuShimmer().onPress(() {
|
||||||
|
data.fetchWorkListCounter(context);
|
||||||
|
})
|
||||||
|
: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Color(namesColor[1]),
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
LocaleKeys.missingSwipes.tr().toText12(color: Colors.white),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: data.missingSwipeCounter.toString().toText16(color: Colors.white, isBold: true),
|
||||||
|
),
|
||||||
|
SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 10, right: 10, bottom: 6, top: 6),
|
||||||
|
).onPress(() {
|
||||||
|
Navigator.pushNamed(context, AppRoutes.workList);
|
||||||
|
}),
|
||||||
|
data.isLeaveTicketBalanceLoading
|
||||||
|
? MenuShimmer().onPress(() {
|
||||||
|
data.fetchWorkListCounter(context);
|
||||||
|
})
|
||||||
|
: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Color(namesColor[2]),
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
LocaleKeys.leaveBalance.tr().toText12(color: Colors.white),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: data.leaveBalance.toString().toText16(color: Colors.white, isBold: true),
|
||||||
|
),
|
||||||
|
SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 10, right: 10, bottom: 6, top: 6),
|
||||||
|
).onPress(() {
|
||||||
|
Navigator.pushNamed(context, AppRoutes.workList);
|
||||||
|
}),
|
||||||
|
data.isLeaveTicketBalanceLoading
|
||||||
|
? MenuShimmer().onPress(() {
|
||||||
|
data.fetchWorkListCounter(context);
|
||||||
|
})
|
||||||
|
: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Color(namesColor[3]),
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
LocaleKeys.ticketBalance.tr().toText12(color: Colors.white),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: data.ticketBalance.toString().toText16(color: Colors.white, isBold: true),
|
||||||
|
),
|
||||||
|
SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 10, right: 10, bottom: 6, top: 6),
|
||||||
|
).onPress(() {
|
||||||
|
Navigator.pushNamed(context, AppRoutes.workList);
|
||||||
|
})
|
||||||
|
],
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,148 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.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/provider/dashboard_provider_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class ServicesWidget extends StatelessWidget {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
List<String> namesT = [LocaleKeys.monthlyAttendance.tr(), LocaleKeys.workFromHome.tr(), LocaleKeys.ticketRequest.tr(), LocaleKeys.monthlyAttendance.tr()];
|
||||||
|
List<String> iconT = [
|
||||||
|
"assets/images/monthly_attendance.svg",
|
||||||
|
"assets/images/work_from_home.svg",
|
||||||
|
"assets/images/ticket_request.svg",
|
||||||
|
"assets/images/work_from_home.svg",
|
||||||
|
"assets/images/work_from_home.svg",
|
||||||
|
"assets/images/work_from_home.svg",
|
||||||
|
"assets/images/work_from_home.svg",
|
||||||
|
"assets/images/work_from_home.svg"
|
||||||
|
];
|
||||||
|
|
||||||
|
return Consumer<DashboardProviderModel>(
|
||||||
|
builder: (context, data, child) {
|
||||||
|
return data.isServicesMenusLoading
|
||||||
|
? whileLoading()
|
||||||
|
: ListView.separated(
|
||||||
|
itemBuilder: (context, parentIndex) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
firstWord(data.homeMenus![parentIndex].menuEntry.prompt!).toText12(),
|
||||||
|
lastWord(data.homeMenus![parentIndex].menuEntry.prompt!).toText24(isBold: true),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
LocaleKeys.viewAllServices.tr().toText12(isUnderLine: true),
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 21, right: 21),
|
||||||
|
SizedBox(
|
||||||
|
height: 105 + 26,
|
||||||
|
child: ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const BouncingScrollPhysics(),
|
||||||
|
padding: const EdgeInsets.only(left: 21, right: 21, top: 13, bottom: 13),
|
||||||
|
scrollDirection: Axis.horizontal,
|
||||||
|
itemBuilder: (cxt, index) {
|
||||||
|
return AspectRatio(
|
||||||
|
aspectRatio: 105 / 105,
|
||||||
|
child: data.isServicesMenusLoading
|
||||||
|
? ServicesMenuShimmer()
|
||||||
|
: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(15),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: const Color(0xff000000).withOpacity(.05),
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: const Offset(0, -3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset(iconT[index]),
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: data.homeMenus![parentIndex].menuEntiesList[index].prompt!.toText11(isBold: true),
|
||||||
|
),
|
||||||
|
SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 10, right: 10, bottom: 10, top: 12),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
separatorBuilder: (cxt, index) => 9.width,
|
||||||
|
itemCount: data.homeMenus![parentIndex].menuEntiesList.length),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
separatorBuilder: (context, index) {
|
||||||
|
return 12.height;
|
||||||
|
},
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: NeverScrollableScrollPhysics(),
|
||||||
|
itemCount: data.homeMenus!.length);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
String firstWord(String value) {
|
||||||
|
return value.split(" ").length > 1 ? value.split(" ")[0] : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String lastWord(String value) {
|
||||||
|
var parts = value.split(" ");
|
||||||
|
if (parts.length == 1) {
|
||||||
|
return value;
|
||||||
|
} else {
|
||||||
|
int i = value.indexOf(" ");
|
||||||
|
return value.substring(i + 1).toCamelCase;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget whileLoading() {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
ServicesHeaderShimmer().paddingOnly(left: 21, right: 21),
|
||||||
|
SizedBox(
|
||||||
|
height: 105 + 26,
|
||||||
|
child: ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const BouncingScrollPhysics(),
|
||||||
|
padding: const EdgeInsets.only(left: 21, right: 21, top: 13, bottom: 13),
|
||||||
|
scrollDirection: Axis.horizontal,
|
||||||
|
itemBuilder: (cxt, index) {
|
||||||
|
return AspectRatio(
|
||||||
|
aspectRatio: 105 / 105,
|
||||||
|
child: ServicesMenuShimmer(),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
separatorBuilder: (cxt, index) => 9.width,
|
||||||
|
itemCount: 4,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,342 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:local_auth/auth_strings.dart';
|
||||||
|
import 'package:local_auth/local_auth.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/login_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/date_uitl.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/basic_member_information_model.dart';
|
||||||
|
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/widgets/button/default_button.dart';
|
||||||
|
|
||||||
|
class VerifyLastLoginScreen extends StatefulWidget {
|
||||||
|
VerifyLastLoginScreen({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_VerifyLastLoginScreenState createState() {
|
||||||
|
return _VerifyLastLoginScreenState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
|
||||||
|
final LocalAuthentication auth = LocalAuthentication();
|
||||||
|
List<BiometricType> _availableBioMetricType = [];
|
||||||
|
GetMobileLoginInfoListModel? mobileLoginInfoListModel;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
_getAvailableBiometrics();
|
||||||
|
// setDefault();
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
mobileLoginInfoListModel ??= ModalRoute.of(context)!.settings.arguments as GetMobileLoginInfoListModel;
|
||||||
|
String empName = AppState().isArabic(context) ? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr! : AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn!;
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
backgroundColor: Colors.transparent,
|
||||||
|
leading: IconButton(
|
||||||
|
icon: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor),
|
||||||
|
onPressed: () => Navigator.pop(context),
|
||||||
|
),
|
||||||
|
actions: [Center(child: "Employee Digital ID".toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {})), 21.width],
|
||||||
|
),
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: ListView(
|
||||||
|
padding: const EdgeInsets.all(21),
|
||||||
|
physics: const BouncingScrollPhysics(),
|
||||||
|
children: [
|
||||||
|
//12.height,
|
||||||
|
if (true)
|
||||||
|
Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
LocaleKeys.welcomeBack.tr().toText12(),
|
||||||
|
mobileLoginInfoListModel!.employeeName!.toText24(isBold: true),
|
||||||
|
10.height,
|
||||||
|
LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText16(),
|
||||||
|
Container(
|
||||||
|
height: 72,
|
||||||
|
margin: const EdgeInsets.only(top: 23, bottom: 23),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
padding: const EdgeInsets.only(left: 17, right: 12),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
color: Colors.white,
|
||||||
|
border: Border.all(
|
||||||
|
color: const Color(0xffefefef),
|
||||||
|
width: 1,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
LocaleKeys.lastLoginDetails.tr().toText16(),
|
||||||
|
DateUtil.formatDateToDate(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!), false).toText12(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
LocaleKeys.verificationType.tr().toText10(color: MyColors.grey57Color),
|
||||||
|
getVerificationType(mobileLoginInfoListModel!.loginType!).toText12(),
|
||||||
|
Expanded(child: SizedBox()),
|
||||||
|
DateUtil.formatDateToTime(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!)).toText12(),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
LocaleKeys.pleaseVerify.tr().toText16(),
|
||||||
|
GridView(
|
||||||
|
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
padding: const EdgeInsets.only(top: 9),
|
||||||
|
shrinkWrap: true,
|
||||||
|
children: [
|
||||||
|
getButton(3),
|
||||||
|
getButton(2),
|
||||||
|
getButton(1),
|
||||||
|
getButton(4),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
// else
|
||||||
|
// Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
|
||||||
|
// Image.asset(
|
||||||
|
// 'assets/images/habib-logo.png',
|
||||||
|
// height: 90,
|
||||||
|
// width: 90,
|
||||||
|
// ),
|
||||||
|
// SizedBox(height: 23),
|
||||||
|
// this.onlySMSBox == false
|
||||||
|
// ? Text(
|
||||||
|
// TranslationBase.of(context).verifyLoginWith,
|
||||||
|
// style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 25 / 16),
|
||||||
|
// )
|
||||||
|
// : Text(
|
||||||
|
// TranslationBase.of(context).verifyFingerprint2,
|
||||||
|
// style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 25 / 16),
|
||||||
|
// ),
|
||||||
|
// SizedBox(height: 23),
|
||||||
|
// Text(
|
||||||
|
// TranslationBase.of(context).pleaseVerify,
|
||||||
|
// style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.64),
|
||||||
|
// ),
|
||||||
|
// GridView(
|
||||||
|
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
|
||||||
|
// physics: NeverScrollableScrollPhysics(),
|
||||||
|
// padding: EdgeInsets.only(top: 9),
|
||||||
|
// shrinkWrap: true,
|
||||||
|
// children: [
|
||||||
|
// if (onlySMSBox == false) getButton(3),
|
||||||
|
// if (onlySMSBox == false) getButton(2),
|
||||||
|
// getButton(1),
|
||||||
|
// getButton(4),
|
||||||
|
// ],
|
||||||
|
// ),
|
||||||
|
// ]),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
12.height,
|
||||||
|
DefaultButton(
|
||||||
|
LocaleKeys.useAnotherAccount.tr(),
|
||||||
|
() => {
|
||||||
|
//Navigator.of(context).pushNamed(LOGIN_TYPE)
|
||||||
|
},
|
||||||
|
).insideContainer,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _getAvailableBiometrics() async {
|
||||||
|
try {
|
||||||
|
_availableBioMetricType = await auth.getAvailableBiometrics();
|
||||||
|
} on PlatformException catch (e) {
|
||||||
|
// AppToast.showErrorToast(message: e.message);
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
if (mounted) setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
String getVerificationType(int type) {
|
||||||
|
if (type == 1) {
|
||||||
|
LocaleKeys.sms.tr();
|
||||||
|
} else if (type == 2) {
|
||||||
|
return LocaleKeys.fingerPrint.tr();
|
||||||
|
} else if (type == 3) {
|
||||||
|
return LocaleKeys.face.tr();
|
||||||
|
} else if (type == 4) {
|
||||||
|
return LocaleKeys.whatsapp.tr();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> loginWithFaceIDAndBiometrics() async {
|
||||||
|
IOSAuthMessages iosStrings =
|
||||||
|
const IOSAuthMessages(cancelButton: 'cancel', goToSettingsButton: 'settings', goToSettingsDescription: 'Please set up your Touch ID.', lockOut: 'Please reenable your Touch ID');
|
||||||
|
bool authenticated = false;
|
||||||
|
try {
|
||||||
|
authenticated = await auth.authenticate(localizedReason: 'Scan your fingerprint to authenticate', useErrorDialogs: true, stickyAuth: true, iOSAuthStrings: iosStrings);
|
||||||
|
} on PlatformException catch (e) {
|
||||||
|
print(e);
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.showToast("Please enable your Touch or Face ID");
|
||||||
|
}
|
||||||
|
return authenticated;
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _loginOptionButton(String _title, String _icon, int _flag, int? _loginIndex) {
|
||||||
|
bool isDisable = ((_flag == 3 && !checkBiometricIsAvailable(BiometricType.face)) || (_flag == 2 && !checkBiometricIsAvailable(BiometricType.fingerprint)));
|
||||||
|
print("$_title:$isDisable");
|
||||||
|
return InkWell(
|
||||||
|
onTap: isDisable
|
||||||
|
? null
|
||||||
|
: () async {
|
||||||
|
if (_flag == 0) {
|
||||||
|
setState(() {
|
||||||
|
// isMoreOption = true;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
if (_flag == 2 || _flag == 3) {
|
||||||
|
bool authenticateWithFaceAndTouchID = await loginWithFaceIDAndBiometrics();
|
||||||
|
if (authenticateWithFaceAndTouchID) {
|
||||||
|
Navigator.pushNamedAndRemoveUntil(context, AppRoutes.dashboard, (Route<dynamic> route) => false);
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await LoginApiClient().checkMobileAppVersion();
|
||||||
|
await LoginApiClient().memberLogin(AppState().getUserName!, AppState().password!);
|
||||||
|
BasicMemberInformationModel? memberInformationModel = await LoginApiClient().mohemmSendActivationCodeByOTPNotificationType(
|
||||||
|
checkBiometricIsAvailable(BiometricType.fingerprint) ? 1 : 0, AppState().memberLoginList?.pMOBILENUMBER, _flag, AppState().getUserName);
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
OtpDialog(
|
||||||
|
context,
|
||||||
|
_flag,
|
||||||
|
int.tryParse(AppState().memberLoginList?.pMOBILENUMBER ?? ""),
|
||||||
|
(value) async {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
try {
|
||||||
|
GenericResponseModel? genericResponseModel = await LoginApiClient().checkActivationCode(false, AppState().memberLoginList?.pMOBILENUMBER, value, AppState().getUserName);
|
||||||
|
GenericResponseModel? genericResponseModel1 = await LoginApiClient().insertMobileLoginInfoNEW(
|
||||||
|
AppState().memberLoginList?.pEMAILADDRESS ?? "",
|
||||||
|
genericResponseModel?.pSESSIONID ?? 0,
|
||||||
|
genericResponseModel?.memberInformationList![0].eMPLOYEENAME ?? "",
|
||||||
|
_flag,
|
||||||
|
AppState().memberLoginList?.pMOBILENUMBER ?? "",
|
||||||
|
AppState().getUserName!,
|
||||||
|
mobileLoginInfoListModel!.deviceToken!,
|
||||||
|
Platform.isAndroid ? "android" : "ios");
|
||||||
|
if (genericResponseModel?.errorMessage != null) {
|
||||||
|
Utils.showToast(genericResponseModel?.errorMessage ?? "");
|
||||||
|
// Navigator.pop(context);
|
||||||
|
}
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Navigator.pop(context);
|
||||||
|
Navigator.pushNamedAndRemoveUntil(context, AppRoutes.dashboard, (Route<dynamic> route) => false);
|
||||||
|
} catch (ex) {
|
||||||
|
print(ex);
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
Navigator.pop(context),
|
||||||
|
},
|
||||||
|
).displayDialog(context);
|
||||||
|
|
||||||
|
// authenticateUser(_flag, isActive: _loginIndex);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.only(left: 20, right: 20, bottom: 15, top: 28),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(15),
|
||||||
|
color: isDisable ? Colors.grey.withOpacity(0.3) : Colors.white,
|
||||||
|
border: Border.all(color: MyColors.lightGreyEFColor, width: 1),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: <Widget>[
|
||||||
|
SvgPicture.asset(
|
||||||
|
_icon,
|
||||||
|
height: 38,
|
||||||
|
width: 38,
|
||||||
|
color: isDisable ? MyColors.darkTextColor.withOpacity(0.7) : null,
|
||||||
|
),
|
||||||
|
_title.toText16()
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget getButton(int flag) {
|
||||||
|
switch (flag) {
|
||||||
|
case 4:
|
||||||
|
return _loginOptionButton(LocaleKeys.verifyThroughWhatsapp.tr(), 'assets/images/login/verify_whatsapp.svg', flag, null);
|
||||||
|
case 1:
|
||||||
|
return _loginOptionButton(LocaleKeys.verifyThroughSMS.tr(), 'assets/images/login/verify_sms.svg', flag, null);
|
||||||
|
case 2:
|
||||||
|
return _loginOptionButton(LocaleKeys.verifyThroughFingerprint.tr(), 'assets/images/login/verify_thumb.svg', flag, BiometricType.fingerprint.index);
|
||||||
|
case 3:
|
||||||
|
return _loginOptionButton(LocaleKeys.verifyThroughFace.tr(), 'assets/images/login/verify_face.svg', flag, BiometricType.face.index);
|
||||||
|
default:
|
||||||
|
return const SizedBox();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool checkBiometricIsAvailable(BiometricType biometricType) {
|
||||||
|
bool isAvailable = false;
|
||||||
|
for (int i = 0; i < _availableBioMetricType.length; i++) {
|
||||||
|
if (biometricType == _availableBioMetricType[i]) {
|
||||||
|
isAvailable = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return isAvailable;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// formatDate(date) {
|
||||||
|
// return date;
|
||||||
|
// return DateFormat('MMM dd, yyy, kk:mm').format(date);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// showLoader(bool isTrue) {
|
||||||
|
// setState(() {
|
||||||
|
// // isLoading = isTrue;
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,182 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart';
|
||||||
|
import 'package:mohem_flutter_app/classes/utils.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/get_mo_Item_history_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_po_Item_history_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_quotation_analysis_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 ItemHistoryScreenParams {
|
||||||
|
String? title;
|
||||||
|
bool isItemHistory;
|
||||||
|
bool isMO;
|
||||||
|
int? pItemId;
|
||||||
|
int? pPoHeaderId;
|
||||||
|
int? pOrgId;
|
||||||
|
|
||||||
|
ItemHistoryScreenParams({@required this.title, this.isItemHistory = true, this.isMO = true, this.pItemId, this.pPoHeaderId, this.pOrgId});
|
||||||
|
}
|
||||||
|
|
||||||
|
class ItemHistoryScreen extends StatefulWidget {
|
||||||
|
ItemHistoryScreen({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ItemHistoryScreenState createState() {
|
||||||
|
return _ItemHistoryScreenState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ItemHistoryScreenState extends State<ItemHistoryScreen> {
|
||||||
|
ItemHistoryScreenParams? _screenParams;
|
||||||
|
|
||||||
|
List<GetMoItemHistoryList> moItemHistoryList = [];
|
||||||
|
List<GetPoItemHistoryList> poItemHistoryList = [];
|
||||||
|
List<GetQuotationAnalysisList> quotationAnalysisList = [];
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadData() {
|
||||||
|
if (_screenParams == null) {
|
||||||
|
_screenParams = ModalRoute.of(context)!.settings.arguments as ItemHistoryScreenParams;
|
||||||
|
getDataFromApi();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void getDataFromApi() async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
if (_screenParams!.isItemHistory) {
|
||||||
|
if (_screenParams!.isMO) {
|
||||||
|
moItemHistoryList = await WorkListApiClient().getMoItemHistory(_screenParams!.pItemId!, _screenParams!.pOrgId!);
|
||||||
|
} else {
|
||||||
|
poItemHistoryList = await WorkListApiClient().getPoItemHistory(_screenParams!.pItemId!);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
quotationAnalysisList = await WorkListApiClient().getQuotationAnalysis(_screenParams!.pItemId!, _screenParams!.pPoHeaderId!);
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
setState(() {});
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
loadData();
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBarWidget(context, title: _screenParams?.title ?? ""),
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
body: ListView(
|
||||||
|
padding: const EdgeInsets.all(21),
|
||||||
|
physics: const BouncingScrollPhysics(),
|
||||||
|
children: [
|
||||||
|
if (moItemHistoryList.isNotEmpty) loadMoItemHistoryData(),
|
||||||
|
if (poItemHistoryList.isNotEmpty) loadPoItemHistoryData(),
|
||||||
|
if (quotationAnalysisList.isNotEmpty) loadQuotationAnalysisData()
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget loadMoItemHistoryData() {
|
||||||
|
return ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemBuilder: (cxt, index) => Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
ItemDetailView(LocaleKeys.requestNumber.tr(), moItemHistoryList[index].rEQUESTNUMBER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.uom.tr(), moItemHistoryList[index].uNITOFMEASURE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quantity.tr(), moItemHistoryList[index].qUANTITY?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.dateRequired.tr(), moItemHistoryList[index].dATEREQUIRED ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.lineStatus.tr(), moItemHistoryList[index].lINESTATUSDIS ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.statusDate.tr(), moItemHistoryList[index].sTATUSDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.transactionType.tr(), moItemHistoryList[index].tRANSACTIONTYPENAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.organization.tr(), moItemHistoryList[index].oRGANIZATIONNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.operatingCode.tr(), moItemHistoryList[index].oRGANIZATIONCODE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.operatingUnit.tr(), moItemHistoryList[index].oPERATINGUNITNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.fromSubInventory.tr(), moItemHistoryList[index].fROMSUBINVENTORYCODE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.fromLocator.tr(), moItemHistoryList[index].fROMLOCATOR ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.toSubInventory.tr(), moItemHistoryList[index].tOSUBINVENTORYCODE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.toLocator.tr(), moItemHistoryList[index].tOLOCATOR ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.shipToLocation.tr(), moItemHistoryList[index].sHIPTOLOCATION ?? ""),
|
||||||
|
],
|
||||||
|
).objectContainerView(),
|
||||||
|
separatorBuilder: (cxt, index) => 12.height,
|
||||||
|
itemCount: moItemHistoryList.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget loadPoItemHistoryData() {
|
||||||
|
return ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemBuilder: (cxt, index) => Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
ItemDetailView(LocaleKeys.operatingUnit.tr(), poItemHistoryList[index].oUNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.poNumber.tr(), poItemHistoryList[index].pONUMBER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.revision.tr(), poItemHistoryList[index].rEVISIONNUM?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.creationDate.tr(), poItemHistoryList[index].cREATIONDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.supplier.tr(), poItemHistoryList[index].sUPPLIER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.buyer.tr(), poItemHistoryList[index].bUYER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.uom.tr(), poItemHistoryList[index].uOM ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quantityOrdered.tr(), poItemHistoryList[index].qUANTITYORDERED?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quantityReceived.tr(), poItemHistoryList[index].qUANTITYRECEIVED?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.bonusQuantity.tr(), poItemHistoryList[index].bONUSQUANTITY?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.purchasePrice.tr(), poItemHistoryList[index].pURCHASEPRICE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.discountPer.tr(), poItemHistoryList[index].dISCOUNTPERCENTAGE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.balanceQuantity.tr(), poItemHistoryList[index].bALANCEQUANTITY?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.netPrice.tr(), poItemHistoryList[index].nETPRICE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.closureStatus.tr(), poItemHistoryList[index].cLOSEDCODE ?? ""),
|
||||||
|
],
|
||||||
|
).objectContainerView(),
|
||||||
|
separatorBuilder: (cxt, index) => 12.height,
|
||||||
|
itemCount: poItemHistoryList.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget loadQuotationAnalysisData() {
|
||||||
|
return ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemBuilder: (cxt, index) => Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
ItemDetailView(LocaleKeys.quotationNumber.tr(), quotationAnalysisList[index].qUOTNUM ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.vendorName.tr(), quotationAnalysisList[index].vENDORNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.itemCode.tr(), quotationAnalysisList[index].iTEMCODE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.description.tr(), quotationAnalysisList[index].iTEMDESC ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quotationQty.tr(), quotationAnalysisList[index].qUOTQTY?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quotationUOM.tr(), quotationAnalysisList[index].qUOTUOM ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quotationNetPrice.tr(), quotationAnalysisList[index].qUOTUNITPRICE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quotationLineTotal.tr(), quotationAnalysisList[index].qUOTLINETOTAL?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quotationBonusQuantity.tr(), quotationAnalysisList[index].qUOTBONUSQTY ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quotationDeliveryDate.tr(), quotationAnalysisList[index].qUOTDELIVERYDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quotationMFGPartNumber.tr(), quotationAnalysisList[index].qUOTMFGPARTNUM ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.rfqNumber.tr(), quotationAnalysisList[index].rFQNUM ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.rfqQty.tr(), quotationAnalysisList[index].rFQQTY?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.rfqUOM.tr(), quotationAnalysisList[index].rFQUOM ?? ""),
|
||||||
|
],
|
||||||
|
).objectContainerView(title: "${quotationAnalysisList[index].iTEMCODE}-${quotationAnalysisList[index].iTEMDESC}"),
|
||||||
|
separatorBuilder: (cxt, index) => 12.height,
|
||||||
|
itemCount: quotationAnalysisList.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mohem_flutter_app/app_state/app_state.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 'package:mohem_flutter_app/generated/locale_keys.g.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/worklist_response_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
|
||||||
|
|
||||||
|
class DetailFragment extends StatefulWidget {
|
||||||
|
WorkListResponseModel? workListData;
|
||||||
|
MemberInformationListModel? memberInformationListModel;
|
||||||
|
|
||||||
|
DetailFragment(this.workListData, this.memberInformationListModel);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<DetailFragment> createState() => _DetailFragmentState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _DetailFragmentState extends State<DetailFragment> {
|
||||||
|
bool isOpened = false;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
ItemDetailView(LocaleKeys.from.tr(), widget.workListData!.fROMUSER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.to.tr(), widget.workListData!.tOUSER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.sent.tr(), widget.workListData!.bEGINDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.closed.tr(), widget.workListData!.eNDDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.id.tr(), widget.workListData!.nOTIFICATIONID?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.responder.tr(), widget.workListData!.rESPONDER ?? ""),
|
||||||
|
],
|
||||||
|
).objectContainerView(),
|
||||||
|
12.height,
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
ItemDetailView(LocaleKeys.employeeNumber.tr(), widget.memberInformationListModel!.eMPLOYEENUMBER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.employeeName.tr(),
|
||||||
|
(AppState().isArabic(context) ? widget.memberInformationListModel!.eMPLOYEENAMEAr : widget.memberInformationListModel!.eMPLOYEENAMEEn) ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.jobTitle.tr(), makePositionName(widget.memberInformationListModel!.pOSITIONNAME ?? "")),
|
||||||
|
ItemDetailView(LocaleKeys.grade.tr(), widget.memberInformationListModel!.gRADENAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.jobCategory.tr(), makePositionName(widget.memberInformationListModel!.pOSITIONNAME ?? "")),
|
||||||
|
ItemDetailView(LocaleKeys.category.tr(), widget.memberInformationListModel!.eMPLOYMENTCATEGORYMEANING ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.employeeEmailAddress.tr(), widget.memberInformationListModel!.eMPLOYEEEMAILADDRESS ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.payrollBranch.tr(), widget.memberInformationListModel!.pAYROLLNAME ?? ""),
|
||||||
|
],
|
||||||
|
).objectContainerView(),
|
||||||
|
],
|
||||||
|
).paddingAll(21);
|
||||||
|
}
|
||||||
|
|
||||||
|
String makePositionName(String job) {
|
||||||
|
String jobName = "";
|
||||||
|
List<String> list = job.split(".").toList();
|
||||||
|
if (list.length > 1) {
|
||||||
|
list.removeLast();
|
||||||
|
jobName = list.join(" ");
|
||||||
|
}
|
||||||
|
return jobName;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,69 +1,180 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:mohem_flutter_app/classes/colors.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/int_extensions.dart';
|
||||||
import 'package:mohem_flutter_app/extensions/string_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_absence_collection_notification_body_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_item_creation_ntf_body_list_model.dart';
|
||||||
|
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_response_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
|
||||||
|
|
||||||
class InfoFragment extends StatelessWidget {
|
class InfoFragment extends StatelessWidget {
|
||||||
|
WorkListResponseModel? workListData;
|
||||||
|
List<POHeader> poHeaderList;
|
||||||
|
List<GetAbsenceCollectionNotificationBodyList>? getAbsenceCollectionNotifications;
|
||||||
|
List<GetStampMsNotificationBodyList>? getStampMsNotifications;
|
||||||
|
List<GetStampNsNotificationBodyList>? getStampNsNotifications;
|
||||||
|
List<ItemCreationHeader> itemCreationHeader;
|
||||||
|
|
||||||
|
InfoFragment(
|
||||||
|
{this.workListData,
|
||||||
|
this.poHeaderList = const <POHeader>[],
|
||||||
|
this.itemCreationHeader = const <ItemCreationHeader>[],
|
||||||
|
this.getAbsenceCollectionNotifications,
|
||||||
|
this.getStampMsNotifications,
|
||||||
|
this.getStampNsNotifications});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
List<Widget> uiList = [
|
||||||
|
if ((workListData?.iTEMTYPE ?? "") == "INVMOA")
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
ItemDetailView(LocaleKeys.from.tr(), workListData!.fROMUSER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.to.tr(), workListData!.tOUSER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.sent.tr(), workListData!.bEGINDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.closed.tr(), workListData!.eNDDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.id.tr(), workListData!.nOTIFICATIONID?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.responder.tr(), workListData!.rESPONDER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.subject.tr(), workListData!.sUBJECT ?? ""),
|
||||||
|
],
|
||||||
|
).objectContainerView(),
|
||||||
|
if ((getAbsenceCollectionNotifications?.length ?? 0) > 0) getAbsenceCollectionNotificationsListView(getAbsenceCollectionNotifications ?? []).objectContainerView(title: "Absence Notifications"),
|
||||||
|
if (getStampMsNotifications?.isNotEmpty ?? false) getStampMsNotificationsListView(getStampMsNotifications ?? []).objectContainerView(title: "Stamp Notifications"),
|
||||||
|
if (getStampNsNotifications?.isNotEmpty ?? false) getStampNsNotificationsListView(getStampNsNotifications ?? []).objectContainerView(title: "Stamp Notifications"),
|
||||||
|
if (poHeaderList.isNotEmpty) getPoNotificationsListView(),
|
||||||
|
if (itemCreationHeader.isNotEmpty) getItemCreationHeaderView()
|
||||||
|
];
|
||||||
return Container(
|
return Container(
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
height: double.infinity,
|
height: double.infinity,
|
||||||
child: Column(
|
child: uiList.isEmpty
|
||||||
children: [
|
? LocaleKeys.noDataAvailable.tr().toText16().center
|
||||||
Container(
|
: ListView(
|
||||||
width: double.infinity,
|
padding: const EdgeInsets.all(21),
|
||||||
decoration: BoxDecoration(
|
children: uiList,
|
||||||
color: Colors.white,
|
),
|
||||||
borderRadius: BorderRadius.circular(15),
|
);
|
||||||
boxShadow: [
|
}
|
||||||
BoxShadow(
|
|
||||||
color: const Color(0xff000000).withOpacity(.05),
|
Widget getPoNotificationsListView() {
|
||||||
blurRadius: 26,
|
return ListView.separated(
|
||||||
offset: const Offset(0, -3),
|
shrinkWrap: true,
|
||||||
),
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemBuilder: (cxt, index) => Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
ItemDetailView(LocaleKeys.description.tr(), workListData!.fROMUSER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.from.tr(), workListData!.fROMUSER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.to.tr(), workListData!.tOUSER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.sent.tr(), workListData!.bEGINDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.closed.tr(), workListData!.eNDDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.id.tr(), workListData!.nOTIFICATIONID?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.supplier.tr(), poHeaderList[index].vENDORNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.site.tr(), poHeaderList[index].vENDORSITECODE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.buyer.tr(), poHeaderList[index].bUYER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.preparer.tr(), poHeaderList[index].pREPARER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.creationDate.tr(), poHeaderList[index].cREATIONDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.shipToLocation.tr(), poHeaderList[index].sHIPTOLOCATIONNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quotationNumber.tr(), poHeaderList[index].qUOTATIONNUMBER ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quotationDate.tr(), poHeaderList[index].qUOTATIONDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.paymentTerms.tr(), poHeaderList[index].pAYMENTTERMS ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.currency.tr(), poHeaderList[index].cURRENCYNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.grossAmount.tr(), poHeaderList[index].gROSSAMOUNT?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.discountAmount.tr(), poHeaderList[index].dISCOUNTAMOUNT?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.customDuty.tr(), poHeaderList[index].cUSTOMDUTY?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.shipHandle.tr(), poHeaderList[index].sHIPHANDLE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.otherCharges.tr(), poHeaderList[index].oTHERCHARGES?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.totalPOAmountWithVAT.tr(), poHeaderList[index].qUOTATIONDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.totalPOAmountInWords.tr(), poHeaderList[index].tOTPOAMTWORD ?? ""),
|
||||||
|
],
|
||||||
|
).objectContainerView(),
|
||||||
|
separatorBuilder: (cxt, index) => 4.height,
|
||||||
|
itemCount: poHeaderList.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget getAbsenceCollectionNotificationsListView(List<GetAbsenceCollectionNotificationBodyList> list) {
|
||||||
|
List<CollectionNotification> dataList = list.isEmpty ? [] : (list.first.collectionNotification ?? []);
|
||||||
|
return ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemBuilder: (cxt, index) => ItemDetailView(dataList[index].sEGMENTPROMPT!, dataList[index].sEGMENTVALUEDSP!),
|
||||||
|
separatorBuilder: (cxt, index) => 4.height,
|
||||||
|
itemCount: dataList.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget getStampMsNotificationsListView(List<GetStampMsNotificationBodyList> list) {
|
||||||
|
return ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemBuilder: (cxt, index) => Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
ItemDetailView(LocaleKeys.employeeNumber.tr(), list[index].eMPLOYEENUMBER.toString()),
|
||||||
|
ItemDetailView(LocaleKeys.assignmentNumber.tr(), list[index].aSSIGNMENTNUMBER.toString()),
|
||||||
|
ItemDetailView(LocaleKeys.employeeName.tr(), list[index].eMPLOYEENAME.toString()),
|
||||||
|
ItemDetailView(LocaleKeys.scheduleDate.tr(), DateUtil.formatDateToDate(DateUtil.convertStringToDate(list[index].sCHEDULEDATE.toString()), false)),
|
||||||
|
ItemDetailView(LocaleKeys.shiftType.tr(), list[index].sHTTYPEDESC.toString()),
|
||||||
|
ItemDetailView(LocaleKeys.shift.tr(), list[index].sHTNAME.toString()),
|
||||||
|
ItemDetailView(LocaleKeys.breakText.tr(), list[index].bREAKNAME.toString()),
|
||||||
|
ItemDetailView(LocaleKeys.actualSwipeStart.tr(), list[index].sHTACTUALSTARTTIME.toString()),
|
||||||
|
ItemDetailView(LocaleKeys.actualSwipeEnd.tr(), list[index].sHTACTUALENDTIME.toString()),
|
||||||
|
ItemDetailView(LocaleKeys.approvedSwipeStart.tr(), list[index].aPPROVEDSTARTTIME.toString()),
|
||||||
|
ItemDetailView(LocaleKeys.approvedSwipeStartReason.tr(), list[index].aPPROVEDSTARTREASON.toString()),
|
||||||
|
ItemDetailView(LocaleKeys.approvedSwipeEnd.tr(), ""),
|
||||||
|
ItemDetailView(LocaleKeys.approvedSwipeEndReason.tr(), list[index].aPPROVEDENDREASONDESC.toString()),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
margin: EdgeInsets.all(21),
|
separatorBuilder: (cxt, index) => 18.height,
|
||||||
padding: EdgeInsets.only(top: 21, bottom: 21, right: 16, left: 16),
|
itemCount: list.length);
|
||||||
child: Column(
|
}
|
||||||
|
|
||||||
|
Widget getStampNsNotificationsListView(List<GetStampNsNotificationBodyList> list) {
|
||||||
|
return ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemBuilder: (cxt, index) => Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Row(
|
ItemDetailView(LocaleKeys.employeeNumber.tr(), list[index].eMPLOYEENUMBER.toString()),
|
||||||
children: [
|
ItemDetailView(LocaleKeys.assignmentNumber.tr(), list[index].aSSIGNMENTNUMBER.toString()),
|
||||||
Expanded(
|
ItemDetailView(LocaleKeys.employeeName.tr(), list[index].eMPLOYEENAME.toString()),
|
||||||
child: "Info Details".toText16(),
|
ItemDetailView(LocaleKeys.scheduleDate.tr(), DateUtil.formatDateToDate(DateUtil.convertStringToDate(list[index].sCHEDULEDATE.toString()), false)),
|
||||||
),
|
|
||||||
// Icon(Icons.keyboard_arrow_down_rounded),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
Column(
|
|
||||||
children: [
|
|
||||||
12.height,
|
|
||||||
showItem("From:", "Alma Linde Mendoza"),
|
|
||||||
showItem("To:", "Al Yabis, Norah"),
|
|
||||||
showItem("Sent:", "1/26/2020 10:41:07 AM"),
|
|
||||||
showItem("ID:", "30581045"),
|
|
||||||
showItem("Closed:", "-"),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
separatorBuilder: (cxt, index) => 18.height,
|
||||||
],
|
itemCount: list.length);
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget showItem(String title, String value) {
|
Widget getItemCreationHeaderView() {
|
||||||
return Padding(
|
return ListView.separated(
|
||||||
padding: const EdgeInsets.only(top: 2, bottom: 2),
|
shrinkWrap: true,
|
||||||
child: Row(
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
children: [
|
itemBuilder: (cxt, index) => Column(
|
||||||
title.toText12(isBold: true),
|
mainAxisSize: MainAxisSize.min,
|
||||||
6.width,
|
children: [
|
||||||
title.toText12(isBold: false, color: MyColors.normalTextColor),
|
ItemDetailView(LocaleKeys.operatingUnit.tr(), itemCreationHeader[index].oPERATINGUNIT?.toString() ?? ""),
|
||||||
],
|
ItemDetailView(LocaleKeys.category.tr(), itemCreationHeader[index].cATEGORY?.toString() ?? ""),
|
||||||
),
|
ItemDetailView(LocaleKeys.requester.tr(), itemCreationHeader[index].rEQUESTER?.toString() ?? ""),
|
||||||
);
|
ItemDetailView(LocaleKeys.analyzedBy.tr(), itemCreationHeader[index].aNALYZEDBY?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.approvedDate.tr(), itemCreationHeader[index].aPPROVEDDATE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.itemType.tr(), itemCreationHeader[index].iTEMTYPE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.relatedTo.tr(), itemCreationHeader[index].rELATEDTO?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.requestDate.tr(), DateUtil.formatDateToDate(DateUtil.convertStringToDate(itemCreationHeader[index].rEQUESTDATE.toString()), false) ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.analyzedDate.tr(), itemCreationHeader[index].aNALYZEDDATE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.urgent.tr(), itemCreationHeader[index].uRGENTFLAGDISP?.toString() ?? ""),
|
||||||
|
],
|
||||||
|
).objectContainerView(),
|
||||||
|
separatorBuilder: (cxt, index) => 18.height,
|
||||||
|
itemCount: itemCreationHeader.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,87 +1,159 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:mohem_flutter_app/classes/colors.dart';
|
import 'package:mohem_flutter_app/config/routes.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/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/get_item_creation_ntf_body_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_mo_notification_body_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_po_notification_body_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
|
||||||
|
|
||||||
class RequestFragment extends StatefulWidget {
|
class RequestFragment extends StatelessWidget {
|
||||||
@override
|
final List<GetMoNotificationBodyList> moNotificationBodyList;
|
||||||
State<RequestFragment> createState() => _RequestFragmentState();
|
final List<ItemCreationLines> itemCreationLines;
|
||||||
}
|
final List<POLines> poLinesList;
|
||||||
|
|
||||||
class _RequestFragmentState extends State<RequestFragment> {
|
RequestFragment({
|
||||||
bool isOpened = false;
|
Key? key,
|
||||||
|
this.moNotificationBodyList = const <GetMoNotificationBodyList>[],
|
||||||
|
this.itemCreationLines = const <ItemCreationLines>[],
|
||||||
|
this.poLinesList = const <POLines>[],
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return ListView(
|
||||||
width: double.infinity,
|
physics: const BouncingScrollPhysics(),
|
||||||
height: double.infinity,
|
padding: const EdgeInsets.all(21),
|
||||||
child: Column(
|
children: [
|
||||||
children: [
|
if (moNotificationBodyList.isNotEmpty) moNotificationDataView(),
|
||||||
Container(
|
if (poLinesList.isNotEmpty) poLinesDataView(),
|
||||||
width: double.infinity,
|
if (itemCreationLines.isNotEmpty) itemCreationLinesView(),
|
||||||
decoration: BoxDecoration(
|
],
|
||||||
color: Colors.white,
|
);
|
||||||
borderRadius: BorderRadius.circular(15),
|
}
|
||||||
boxShadow: [
|
|
||||||
BoxShadow(
|
Widget poLinesDataView() {
|
||||||
color: const Color(0xff000000).withOpacity(.05),
|
return ListView.separated(
|
||||||
blurRadius: 26,
|
shrinkWrap: true,
|
||||||
offset: const Offset(0, -3),
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
),
|
itemBuilder: (cxt, index) => Column(
|
||||||
],
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
),
|
mainAxisSize: MainAxisSize.min,
|
||||||
margin: EdgeInsets.all(21),
|
|
||||||
padding: EdgeInsets.only(top: 21, bottom: 21, right: 16, left: 16),
|
|
||||||
child: Column(
|
|
||||||
children: [
|
children: [
|
||||||
|
ItemDetailView(LocaleKeys.code.tr(), poLinesList[index].iTEMCODE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.mfg.tr(), poLinesList[index].uOM ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.lineType.tr(), poLinesList[index].qUANTITY?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.unit.tr(), poLinesList[index].uOM ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.price.tr(), poLinesList[index].uNITPRICE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.lineAmount.tr(), poLinesList[index].lINEAMOUNT?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.quantity.tr(), poLinesList[index].qUANTITY?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.lineDiscount.tr(), poLinesList[index].lINEDISCPERCENTAGE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.needByDate.tr(), poLinesList[index].nEEDBYDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.promisedDate.tr(), poLinesList[index].pROMISEDDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.deliverToLocation.tr(), poLinesList[index].dELIVERTOLOCATION ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.requisitionNumber.tr(), poLinesList[index].rEQUESTOR ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.requester.tr(), poLinesList[index].pRNUM ?? ""),
|
||||||
|
12.height,
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
DefaultButton(LocaleKeys.itemHistory.tr(), () {
|
||||||
child: "Hardware Mobility 161 Messenger".toText16(),
|
Navigator.pushNamed(
|
||||||
),
|
cxt,
|
||||||
Icon(Icons.keyboard_arrow_down_rounded),
|
AppRoutes.itemHistory,
|
||||||
],
|
arguments: ItemHistoryScreenParams(title: LocaleKeys.itemHistory.tr(), isMO: false, pItemId: poLinesList[index].iTEMID),
|
||||||
),
|
);
|
||||||
Column(
|
}).expanded,
|
||||||
children: [
|
12.width,
|
||||||
12.height,
|
DefaultButton(LocaleKeys.quotationAnalysis.tr(), () {
|
||||||
showItem("Code:", "3188000067"),
|
Navigator.pushNamed(
|
||||||
showItem("Quantity:", "1"),
|
cxt,
|
||||||
showItem("Line Status:", "Pending Approval"),
|
AppRoutes.itemHistory,
|
||||||
showItem("Transection Type:", "Move Order Issue:"),
|
arguments: ItemHistoryScreenParams(
|
||||||
showItem("Organization Code:", "SWD"),
|
isItemHistory: false, isMO: false, title: LocaleKeys.quotationAnalysis.tr(), pItemId: poLinesList[index].iTEMID, pPoHeaderId: poLinesList[index].pOHEADERID),
|
||||||
showItem("From Subinventory:", "SWD_MSPS"),
|
);
|
||||||
showItem("To Subinventory:", "SWD_MSPS"),
|
}).expanded,
|
||||||
showItem("Ship To Location :",
|
|
||||||
"SWD 11206-E.R. (Emergency Room)"),
|
|
||||||
showItem("Unit:", "Each"),
|
|
||||||
showItem("Date Required:", "12/23/2019 4:54:04 PM"),
|
|
||||||
showItem("Status Date:", "12/23/2019 4:54:04 PM"),
|
|
||||||
showItem("Operation Unit:", "Sehat Al Sewedi"),
|
|
||||||
showItem("Organization:", "Sehat Al Sewedi"),
|
|
||||||
showItem("From Locator:", "-"),
|
|
||||||
showItem("To Locator :", "-"),
|
|
||||||
],
|
],
|
||||||
),
|
)
|
||||||
],
|
],
|
||||||
),
|
).objectContainerView(title: poLinesList[index].iTEMDESCRIPTION!),
|
||||||
),
|
separatorBuilder: (cxt, index) => 12.height,
|
||||||
],
|
itemCount: poLinesList.length);
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget showItem(String title, String value) {
|
Widget moNotificationDataView() {
|
||||||
return Padding(
|
return ListView.separated(
|
||||||
padding: const EdgeInsets.only(top: 2, bottom: 2),
|
shrinkWrap: true,
|
||||||
child: Row(
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
children: [
|
itemBuilder: (cxt, index) => Column(
|
||||||
title.toText12(isBold: true),
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
6.width,
|
mainAxisSize: MainAxisSize.min,
|
||||||
title.toText12(isBold: false, color: MyColors.normalTextColor),
|
children: [
|
||||||
],
|
ItemDetailView(LocaleKeys.code.tr(), moNotificationBodyList[index].iTEMCODE ?? ""),
|
||||||
),
|
ItemDetailView(LocaleKeys.unit.tr(), moNotificationBodyList[index].uOM ?? ""),
|
||||||
);
|
ItemDetailView(LocaleKeys.quantity.tr(), moNotificationBodyList[index].qUANTITY?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.dateRequired.tr(), moNotificationBodyList[index].dATEREQUIRED ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.lineStatus.tr(), moNotificationBodyList[index].lINESTATUS ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.statusDate.tr(), moNotificationBodyList[index].sTATUSDATE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.transactionType.tr(), moNotificationBodyList[index].tRANSACTIONTYPENAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.operatingUnit.tr(), moNotificationBodyList[index].oPERATINGUNIT ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.organizationCode.tr(), moNotificationBodyList[index].oRGANIZATIONCODE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.organization.tr(), moNotificationBodyList[index].oRGANIZATIONNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.fromSubInventory.tr(), moNotificationBodyList[index].fROMSUBINVENTORY ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.fromLocator.tr(), moNotificationBodyList[index].fROMLOCATOR ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.toSubInventory.tr(), moNotificationBodyList[index].tOSUBINVENTORY ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.toLocator.tr(), moNotificationBodyList[index].tOLOCATOR ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.shipToLocator.tr(), moNotificationBodyList[index].sHIPTOLOCATION ?? ""),
|
||||||
|
12.height,
|
||||||
|
DefaultButton(LocaleKeys.itemHistory.tr(), () {
|
||||||
|
Navigator.pushNamed(
|
||||||
|
cxt,
|
||||||
|
AppRoutes.itemHistory,
|
||||||
|
arguments: ItemHistoryScreenParams(title: LocaleKeys.itemHistory.tr(), pItemId: moNotificationBodyList[index].iTEMID, pOrgId: moNotificationBodyList[index].oRGID),
|
||||||
|
);
|
||||||
|
})
|
||||||
|
],
|
||||||
|
).objectContainerView(title: moNotificationBodyList[index].dESCRIPTION ?? ""),
|
||||||
|
separatorBuilder: (cxt, index) => 12.height,
|
||||||
|
itemCount: moNotificationBodyList.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget itemCreationLinesView() {
|
||||||
|
return ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemBuilder: (cxt, index) => Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
ItemDetailView(LocaleKeys.productName.tr(), itemCreationLines[index].pRODUCTNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.productDescription.tr(), itemCreationLines[index].pRODUCTDESCRIPTION ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.unitPrice.tr(), itemCreationLines[index].uNITPRICE?.toString() ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.manufacturerName.tr(), itemCreationLines[index].uSERMANUFACTURERNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.manufacturerPartName.tr(), itemCreationLines[index].uSERMFGPARTNUM ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.supplierName.tr(), itemCreationLines[index].sUPPLIERNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.supplierContact.tr(), itemCreationLines[index].sUPPLIERCONTACT ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.chargeToPatient.tr(), itemCreationLines[index].cHARGETOPATIENT ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.justification.tr(), itemCreationLines[index].jUSTIFICATION ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.itemCode.tr(), itemCreationLines[index].iTEMCODE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.itemDescription.tr(), itemCreationLines[index].iTEMDESCRIPTION ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.groupCode.tr(), itemCreationLines[index].iTEMGROUPCODE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.groupDescription.tr(), itemCreationLines[index].iTEMGROUP ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.subgroupCode.tr(), itemCreationLines[index].iTEMSUBGROUPCODE ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.subgroupDescription.tr(), itemCreationLines[index].iTEMSUBGROUP ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.primaryUOM.tr(), itemCreationLines[index].pRIMARYUOM ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.manufacturerName.tr(), itemCreationLines[index].sTANDARDMANUFACTURERNAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.manufacturerPartName.tr(), itemCreationLines[index].sTANDARDMFGPARTNUM ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.templateName.tr(), itemCreationLines[index].tEMPLATENAME ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.itemCreationStatus.tr(), itemCreationLines[index].iTEMCREATIONSTATUS ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.standardizationApprovalStatus.tr(), itemCreationLines[index].sTANDARDSTATUS ?? ""),
|
||||||
|
ItemDetailView(LocaleKeys.standardizationApprovalRejectionReason.tr(), itemCreationLines[index].sTANDARDREJECTREASON ?? ""),
|
||||||
|
],
|
||||||
|
).objectContainerView(title: itemCreationLines[index].iTEMDESCRIPTION!),
|
||||||
|
separatorBuilder: (cxt, index) => 12.height,
|
||||||
|
itemCount: itemCreationLines.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,98 +1,442 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:mohem_flutter_app/api/worklist/worklist_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/colors.dart';
|
||||||
import 'package:mohem_flutter_app/ui/app_bar.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/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/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_attachement_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_item_creation_ntf_body_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_mo_notification_body_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/get_notification_buttons_list_model.dart';
|
||||||
|
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/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_response_model.dart';
|
||||||
import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/actions_fragment.dart';
|
import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/actions_fragment.dart';
|
||||||
import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/attachments_fragment.dart';
|
import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/attachments_fragment.dart';
|
||||||
|
import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/detail_fragment.dart';
|
||||||
import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/info_fragments.dart';
|
import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/info_fragments.dart';
|
||||||
import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/request_fragment.dart';
|
import 'package:mohem_flutter_app/ui/work_list/missing_swipe/fragments/request_fragment.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/button/default_button.dart';
|
||||||
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
|
import 'package:mohem_flutter_app/widgets/dialogs/accept_reject_input_dialog.dart';
|
||||||
|
|
||||||
|
class MissingSwipeScreen extends StatefulWidget {
|
||||||
|
MissingSwipeScreen({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_MissingSwipeScreenState createState() {
|
||||||
|
return _MissingSwipeScreenState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MissingSwipeScreenState extends State<MissingSwipeScreen> {
|
||||||
|
int tabIndex = 0;
|
||||||
|
PageController controller = PageController();
|
||||||
|
bool showFabOptions = false;
|
||||||
|
|
||||||
|
WorkListResponseModel? workListData;
|
||||||
|
MemberInformationListModel? memberInformationListModel;
|
||||||
|
List<GetNotificationButtonsList> notificationButtonsList = [];
|
||||||
|
List<GetActionHistoryList> actionHistoryList = [];
|
||||||
|
List<GetAttachementList> getAttachmentList = [];
|
||||||
|
List<GetStampMsNotificationBodyList> getStampMsNotifications = [];
|
||||||
|
List<GetStampNsNotificationBodyList> getStampNsNotifications = [];
|
||||||
|
List<GetMoNotificationBodyList> getMoNotificationBodyList = [];
|
||||||
|
List<GetAbsenceCollectionNotificationBodyList>? getAbsenceCollectionNotifications;
|
||||||
|
List<NotificationGetRespondAttributesList> getNotificationRespondAttributes = [];
|
||||||
|
NotificationGetRespondAttributesList? notificationNoteInput;
|
||||||
|
|
||||||
|
GenericResponseModel? getBasicNTFBody;
|
||||||
|
GenericResponseModel? getICBody;
|
||||||
|
GenericResponseModel? subordinatesLeavesModel;
|
||||||
|
GetPoNotificationBodyList? getPoNotificationBody;
|
||||||
|
GetItemCreationNtfBodyList? getItemCreationNtfBody;
|
||||||
|
|
||||||
|
bool isCloseAvailable = false;
|
||||||
|
bool isApproveAvailable = false;
|
||||||
|
bool isRejectAvailable = false;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
void getData() async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
if (workListData!.iTEMTYPE == "HRSSA" || workListData!.iTEMTYPE == "STAMP") {
|
||||||
|
memberInformationListModel = await WorkListApiClient().getUserInformation(-999, workListData!.sELECTEDEMPLOYEENUMBER!);
|
||||||
|
}
|
||||||
|
if (workListData!.iTEMTYPE == "HRSSA") {
|
||||||
|
getBasicNTFBody = await WorkListApiClient().getBasicDetNTFBody(workListData!.nOTIFICATIONID!, -999);
|
||||||
|
getAbsenceCollectionNotifications = await WorkListApiClient().getAbsenceNotificationBody(workListData!.nOTIFICATIONID!, -999);
|
||||||
|
subordinatesLeavesModel = await WorkListApiClient().getSubordinatesLeaves("", "");
|
||||||
|
}
|
||||||
|
if (workListData!.iTEMTYPE == "STAMP") {
|
||||||
|
if (workListData!.rEQUESTTYPE == "STAMP_MS") {
|
||||||
|
getStampMsNotifications = await WorkListApiClient().getStampMsNotificationBody(workListData!.nOTIFICATIONID!, -999);
|
||||||
|
} else {
|
||||||
|
getStampNsNotifications = await WorkListApiClient().getStampNsNotificationBody(workListData!.nOTIFICATIONID!, -999);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (workListData!.iTEMTYPE == "INVMOA") {
|
||||||
|
getMoNotificationBodyList = await WorkListApiClient().getMoNotificationBody(workListData!.nOTIFICATIONID!, -999);
|
||||||
|
}
|
||||||
|
if (workListData!.iTEMTYPE == "INVITEM") {
|
||||||
|
getItemCreationNtfBody = await WorkListApiClient().getItemCreationNtfBody(workListData!.nOTIFICATIONID!, -999);
|
||||||
|
}
|
||||||
|
if (workListData!.iTEMTYPE == "POAPPRV") {
|
||||||
|
getPoNotificationBody = await WorkListApiClient().getPoNotificationBody(workListData!.nOTIFICATIONID!, -999);
|
||||||
|
}
|
||||||
|
getNotificationRespondAttributes = await WorkListApiClient().notificationGetRespondAttributes(workListData!.nOTIFICATIONID!);
|
||||||
|
if (getNotificationRespondAttributes.isNotEmpty) {
|
||||||
|
notificationNoteInput = getNotificationRespondAttributes.first;
|
||||||
|
}
|
||||||
|
notificationButtonsList = await WorkListApiClient().getNotificationButtons(workListData!.nOTIFICATIONID!);
|
||||||
|
actionHistoryList = await WorkListApiClient().getActionHistory(workListData!.nOTIFICATIONID!);
|
||||||
|
getAttachmentList = await WorkListApiClient().getAttachments(workListData!.nOTIFICATIONID!);
|
||||||
|
|
||||||
|
if (notificationButtonsList.isNotEmpty) {
|
||||||
|
isCloseAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "CLOSE");
|
||||||
|
isApproveAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "APPROVED");
|
||||||
|
isRejectAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "REJECTED");
|
||||||
|
}
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
setState(() {});
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void getDataFromState() {
|
||||||
|
if (workListData == null) {
|
||||||
|
workListData = AppState().workList![AppState().workListIndex!]; // ModalRoute.of(context)!.settings.arguments as WorkListResponseModel;
|
||||||
|
getData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class MissingSwipeScreen extends StatelessWidget {
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return DefaultTabController(
|
getDataFromState();
|
||||||
length: 4,
|
|
||||||
child: Scaffold(
|
return Scaffold(
|
||||||
appBar: appBar(context, title: "Missing Swipe Request"),
|
appBar: AppBarWidget(context, title: LocaleKeys.details.tr()),
|
||||||
body: Container(
|
backgroundColor: Colors.white,
|
||||||
width: double.infinity,
|
body: Stack(
|
||||||
height: double.infinity,
|
children: [
|
||||||
child: Column(
|
Column(
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
decoration: BoxDecoration(
|
padding: const EdgeInsets.only(left: 21, right: 21, top: 16, bottom: 16),
|
||||||
borderRadius: BorderRadius.only(bottomLeft: Radius.circular(20), bottomRight: Radius.circular(20)),
|
decoration: const BoxDecoration(
|
||||||
gradient: LinearGradient(transform: GradientRotation(.46), begin: Alignment.topRight, end: Alignment.bottomRight, colors: [
|
borderRadius: BorderRadius.only(
|
||||||
MyColors.gradiantEndColor,
|
bottomLeft: Radius.circular(25),
|
||||||
MyColors.gradiantStartColor,
|
bottomRight: Radius.circular(25),
|
||||||
]),
|
),
|
||||||
),
|
gradient: LinearGradient(
|
||||||
clipBehavior: Clip.antiAlias,
|
transform: GradientRotation(.83),
|
||||||
child: TabBar(
|
begin: Alignment.topRight,
|
||||||
indicatorColor: Colors.white,
|
end: Alignment.bottomLeft,
|
||||||
labelColor: Colors.white,
|
colors: [
|
||||||
tabs: [
|
MyColors.gradiantEndColor,
|
||||||
Tab(
|
MyColors.gradiantStartColor,
|
||||||
text: "Request",
|
],
|
||||||
),
|
),
|
||||||
Tab(
|
|
||||||
text: "Actions",
|
|
||||||
),
|
|
||||||
Tab(
|
|
||||||
text: "Attachments",
|
|
||||||
),
|
|
||||||
Tab(
|
|
||||||
text: "Info.",
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
child: Row(
|
||||||
Expanded(
|
|
||||||
child: TabBarView(
|
|
||||||
children: [
|
children: [
|
||||||
RequestFragment(),
|
myTab(LocaleKeys.info.tr(), 0),
|
||||||
ActionsFragment(),
|
(workListData!.iTEMTYPE == "HRSSA" || workListData!.iTEMTYPE == "STAMP") ? myTab(LocaleKeys.details.tr(), 1) : myTab(LocaleKeys.request.tr(), 1),
|
||||||
AttachmentsFragment(),
|
myTab(LocaleKeys.actions.tr(), 2),
|
||||||
InfoFragment(),
|
myTab(LocaleKeys.attachments.tr(), 3),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Container(
|
PageView(
|
||||||
width: double.infinity,
|
controller: controller,
|
||||||
height: 60,
|
onPageChanged: (pageIndex) {
|
||||||
padding: EdgeInsets.only(left: 21, right: 21),
|
setState(() {
|
||||||
child: Row(
|
tabIndex = pageIndex;
|
||||||
children: [
|
});
|
||||||
Expanded(
|
},
|
||||||
child: DefaultButton(
|
children: [
|
||||||
"Reject",
|
InfoFragment(
|
||||||
() {},
|
poHeaderList: getPoNotificationBody?.pOHeader ?? [],
|
||||||
colors: [
|
workListData: workListData,
|
||||||
Color(0xffEB8C90),
|
getAbsenceCollectionNotifications: getAbsenceCollectionNotifications,
|
||||||
Color(0xffDE6C70),
|
itemCreationHeader: getItemCreationNtfBody?.itemCreationHeader ?? [],
|
||||||
],
|
getStampMsNotifications: getStampMsNotifications),
|
||||||
),
|
(workListData!.iTEMTYPE == "HRSSA" || workListData!.iTEMTYPE == "STAMP")
|
||||||
),
|
? DetailFragment(workListData, memberInformationListModel)
|
||||||
12.width,
|
: RequestFragment(
|
||||||
Expanded(
|
moNotificationBodyList: getMoNotificationBodyList,
|
||||||
child: DefaultButton(
|
poLinesList: getPoNotificationBody?.pOLines ?? [],
|
||||||
"Approve",
|
itemCreationLines: getItemCreationNtfBody?.itemCreationLines ?? [],
|
||||||
() {},
|
),
|
||||||
colors: [
|
ActionsFragment(actionHistoryList),
|
||||||
Color(0xff32D892),
|
AttachmentsFragment(getAttachmentList),
|
||||||
Color(0xff1AB170),
|
],
|
||||||
],
|
).expanded,
|
||||||
|
if (isApproveAvailable || isRejectAvailable || isCloseAvailable)
|
||||||
|
Container(
|
||||||
|
padding: const EdgeInsets.only(top: 14, bottom: 14, left: 21, right: 21),
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
border: Border(
|
||||||
|
top: BorderSide(
|
||||||
|
color: MyColors.lightGreyEFColor,
|
||||||
|
width: 1.0,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
if (isRejectAvailable)
|
||||||
|
DefaultButton(
|
||||||
|
LocaleKeys.reject.tr(),
|
||||||
|
() => performAction("REJECTED"),
|
||||||
|
colors: const [
|
||||||
|
Color(0xffE47A7E),
|
||||||
|
Color(0xffDE6D71),
|
||||||
|
],
|
||||||
|
).expanded,
|
||||||
|
if (isApproveAvailable && isRejectAvailable) 8.width,
|
||||||
|
if (isApproveAvailable)
|
||||||
|
DefaultButton(
|
||||||
|
LocaleKeys.approve.tr(),
|
||||||
|
() => performAction("APPROVED"),
|
||||||
|
colors: const [
|
||||||
|
Color(0xff28C884),
|
||||||
|
Color(0xff1BB271),
|
||||||
|
],
|
||||||
|
).expanded,
|
||||||
|
if (isCloseAvailable)
|
||||||
|
DefaultButton(
|
||||||
|
LocaleKeys.ok.tr(),
|
||||||
|
() => performAction("CLOSE"),
|
||||||
|
colors: const [
|
||||||
|
Color(0xff32D892),
|
||||||
|
Color(0xff1AB170),
|
||||||
|
],
|
||||||
|
).expanded,
|
||||||
|
8.width,
|
||||||
|
Container(
|
||||||
|
height: 43,
|
||||||
|
width: 43,
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
color: MyColors.lightGreyE6Color,
|
||||||
|
),
|
||||||
|
child: Icon(showFabOptions ? Icons.more_vert_rounded : Icons.more_horiz_rounded, color: MyColors.darkIconColor),
|
||||||
|
).onPress(() {
|
||||||
|
setState(() {
|
||||||
|
showFabOptions = true;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
IgnorePointer(
|
||||||
|
ignoring: !showFabOptions,
|
||||||
|
child: AnimatedOpacity(
|
||||||
|
opacity: showFabOptions ? 1 : 0,
|
||||||
|
duration: const Duration(milliseconds: 250),
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.only(left: 21, right: 21, bottom: 75 - 12),
|
||||||
|
width: double.infinity,
|
||||||
|
height: double.infinity,
|
||||||
|
color: Colors.white.withOpacity(.67),
|
||||||
|
alignment: Alignment.bottomRight,
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
myFab("Skip", "assets/images/skip.svg").onPress(() {
|
||||||
|
if (AppState().workList!.length - 1 > AppState().workListIndex!) {
|
||||||
|
AppState().setWorkListIndex = AppState().workListIndex! + 1;
|
||||||
|
workListData = null;
|
||||||
|
showFabOptions = false;
|
||||||
|
getDataFromState();
|
||||||
|
} else if (AppState().workList!.length - 1 == AppState().workListIndex!) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
12.height,
|
||||||
|
...viewApiButtonsList(notificationButtonsList),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)
|
),
|
||||||
],
|
).onPress(() {
|
||||||
|
setState(() {
|
||||||
|
showFabOptions = false;
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
floatingActionButton: (!isApproveAvailable && !isRejectAvailable && !isCloseAvailable)
|
||||||
|
? Container(
|
||||||
|
height: 43,
|
||||||
|
width: 43,
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
color: MyColors.lightGreyE6Color,
|
||||||
|
),
|
||||||
|
child: Icon(showFabOptions ? Icons.more_vert_rounded : Icons.more_horiz_rounded, color: MyColors.darkIconColor),
|
||||||
|
).onPress(() {
|
||||||
|
setState(() {
|
||||||
|
showFabOptions = true;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
: null,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Widget> viewApiButtonsList(List<GetNotificationButtonsList> notificationButtonsList) {
|
||||||
|
List<Widget> fabs = [];
|
||||||
|
for (int i = 0; i < notificationButtonsList.length; i++) {
|
||||||
|
if (notificationButtonsList[i].bUTTONACTION! == "REJECTED" || notificationButtonsList[i].bUTTONACTION! == "APPROVED" || notificationButtonsList[i].bUTTONACTION! == "CLOSE") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
fabs.add(myFab(notificationButtonsList[i].bUTTONLABEL!, notificationButtonsList[i].bUTTONICON ?? "", isIconAsset: false)
|
||||||
|
.paddingOnly(bottom: 12)
|
||||||
|
.onPress(() => handleFabAction(notificationButtonsList[i])));
|
||||||
|
}
|
||||||
|
return fabs;
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleFabAction(GetNotificationButtonsList notificationButton) {
|
||||||
|
switch (notificationButton.bUTTONACTION) {
|
||||||
|
case "DELEGATE":
|
||||||
|
// do something
|
||||||
|
break;
|
||||||
|
case "REQUEST_INFO":
|
||||||
|
// do something else
|
||||||
|
break;
|
||||||
|
case "RFC":
|
||||||
|
// do something else
|
||||||
|
break;
|
||||||
|
case "UPDATE_ACTION":
|
||||||
|
// do something else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget myTab(String title, int index) {
|
||||||
|
bool isSelected = (index == tabIndex);
|
||||||
|
return Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
title.toText12(color: isSelected ? Colors.white : Colors.white.withOpacity(.74), isCenter: true),
|
||||||
|
4.height,
|
||||||
|
Container(
|
||||||
|
height: 8,
|
||||||
|
width: 8,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
color: isSelected ? Colors.white : Colors.transparent,
|
||||||
|
),
|
||||||
|
).onPress(() {
|
||||||
|
setState(() {
|
||||||
|
showFabOptions = true;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
],
|
||||||
|
).onPress(() {
|
||||||
|
controller.jumpToPage(index);
|
||||||
|
}).expanded;
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget myFab(String title, String icon, {bool isIconAsset = true}) {
|
||||||
|
return Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
title.toText16(),
|
||||||
|
14.width,
|
||||||
|
Container(
|
||||||
|
height: 43,
|
||||||
|
width: 43,
|
||||||
|
padding: const EdgeInsets.all(12),
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
gradient: LinearGradient(
|
||||||
|
transform: GradientRotation(.46),
|
||||||
|
begin: Alignment.topRight,
|
||||||
|
end: Alignment.bottomLeft,
|
||||||
|
colors: [
|
||||||
|
MyColors.gradiantEndColor,
|
||||||
|
MyColors.gradiantStartColor,
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
child: isIconAsset
|
||||||
|
? SvgPicture.asset(icon)
|
||||||
|
: Image.memory(
|
||||||
|
base64Decode(icon),
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void performAction(String actionMode) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (cxt) => AcceptRejectInputDialog(
|
||||||
|
message: LocaleKeys.requestedItems.tr(),
|
||||||
|
notificationGetRespond: notificationNoteInput,
|
||||||
|
onTap: (note) {
|
||||||
|
Map<String, dynamic> payload = {
|
||||||
|
"P_ACTION_MODE": actionMode,
|
||||||
|
"P_APPROVER_INDEX": null,
|
||||||
|
"P_COMMENTS": "",
|
||||||
|
"P_FORWARD_TO_USER_NAME": "",
|
||||||
|
"P_NOTIFICATION_ID": workListData!.nOTIFICATIONID!,
|
||||||
|
"RespondAttributeList": [
|
||||||
|
if (notificationNoteInput != null) {notificationNoteInput!.attributeName: note}
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
performNotificationAction(payload);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void performNotificationAction(Map<String, dynamic> payload) async {
|
||||||
|
try {
|
||||||
|
Utils.showLoading(context);
|
||||||
|
GenericResponseModel model = await WorkListApiClient().postNotificationActions(payload);
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.showToast(LocaleKeys.yourChangeHasBeenSavedSuccessfully.tr());
|
||||||
|
Navigator.pop(context, true);
|
||||||
|
} catch (ex) {
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Utils.handleException(ex, context, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,39 @@
|
|||||||
|
/* ZiK */
|
||||||
|
|
||||||
|
import 'dart:async';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
|
||||||
|
typedef ChildProvider<E> = Widget Function(BuildContext context, E? data);
|
||||||
|
|
||||||
|
class Updater<T> extends StatelessWidget{
|
||||||
|
final ChildProvider<T> childProvider;
|
||||||
|
StreamController<T?>? sink;
|
||||||
|
T? initialData;
|
||||||
|
List<T?> _history = [];
|
||||||
|
|
||||||
|
Stream<T?>? _stream;
|
||||||
|
Updater({T? initialData, required this.childProvider}){
|
||||||
|
this.sink = StreamController<T?>();
|
||||||
|
this.initialData = initialData;
|
||||||
|
_stream = this.sink?.stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return StreamBuilder<T?>(
|
||||||
|
initialData: this.initialData,
|
||||||
|
stream: _stream,
|
||||||
|
builder: (ctx, snapshot){
|
||||||
|
return childProvider(context, snapshot.data);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
pushData(T? data) {
|
||||||
|
_history.add(data);
|
||||||
|
sink?.sink.add(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<T?> getDataHistory() => _history;
|
||||||
|
T? getLatestData() => _history.last;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
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';
|
||||||
|
|
||||||
|
AppBar AppBarWidget(BuildContext context, {required String title, bool showHomeButton = false}) {
|
||||||
|
return AppBar(
|
||||||
|
leadingWidth: 0,
|
||||||
|
// leading: GestureDetector(
|
||||||
|
// behavior: HitTestBehavior.opaque,
|
||||||
|
// onTap: Feedback.wrapForTap(() => Navigator.maybePop(context), context),
|
||||||
|
// child: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor),
|
||||||
|
// ),
|
||||||
|
//titleSpacing: -1.44,
|
||||||
|
title: Row(
|
||||||
|
children: [
|
||||||
|
GestureDetector(
|
||||||
|
behavior: HitTestBehavior.opaque,
|
||||||
|
onTap: Feedback.wrapForTap(() => Navigator.maybePop(context), context),
|
||||||
|
child: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor),
|
||||||
|
),
|
||||||
|
4.width,
|
||||||
|
title.toText24(color: MyColors.darkTextColor, isBold: true, considerHeight: false).expanded,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
centerTitle: false,
|
||||||
|
elevation: 0,
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
actions: [
|
||||||
|
if (showHomeButton)
|
||||||
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
// Navigator.pushAndRemoveUntil(
|
||||||
|
// context,
|
||||||
|
// MaterialPageRoute(builder: (context) => LandingPage()),
|
||||||
|
// (Route<dynamic> route) => false,
|
||||||
|
// );
|
||||||
|
},
|
||||||
|
icon: const Icon(Icons.home, color: MyColors.darkIconColor),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -0,0 +1,103 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
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/widget_extensions.dart';
|
||||||
|
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
|
||||||
|
import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/input_widget.dart';
|
||||||
|
|
||||||
|
class AcceptRejectInputDialog extends StatelessWidget {
|
||||||
|
final String? title;
|
||||||
|
final String? message;
|
||||||
|
final String? okTitle;
|
||||||
|
final NotificationGetRespondAttributesList? notificationGetRespond;
|
||||||
|
final Function(String) onTap;
|
||||||
|
|
||||||
|
AcceptRejectInputDialog({Key? key, this.title, @required this.message, this.okTitle, required this.onTap, this.notificationGetRespond}) : super(key: key);
|
||||||
|
|
||||||
|
String note = "";
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Dialog(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
shape: const RoundedRectangleBorder(),
|
||||||
|
insetPadding: const EdgeInsets.only(left: 21, right: 21),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 20, right: 20, top: 18, bottom: 28),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 16.0),
|
||||||
|
child: Text(
|
||||||
|
title ?? LocaleKeys.confirm.tr(),
|
||||||
|
style: const TextStyle(fontSize: 24, fontWeight: FontWeight.w600, color: Color(0xff2B353E), height: 35 / 24, letterSpacing: -0.96),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
icon: const Icon(Icons.close),
|
||||||
|
color: const Color(0xff2B353E),
|
||||||
|
constraints: const BoxConstraints(),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
message ?? "",
|
||||||
|
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff808080), letterSpacing: -0.48),
|
||||||
|
),
|
||||||
|
if (notificationGetRespond != null) ...[
|
||||||
|
14.height,
|
||||||
|
InputWidget(
|
||||||
|
"Enter a Note",
|
||||||
|
notificationGetRespond!.attributeDisplayName!,
|
||||||
|
TextEditingController(),
|
||||||
|
isBackgroundEnable: true,
|
||||||
|
lines: 3,
|
||||||
|
onChange: (String note) {
|
||||||
|
this.note = note;
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
28.height,
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
DefaultButton(
|
||||||
|
LocaleKeys.cancel.tr(),
|
||||||
|
() => Navigator.pop(context),
|
||||||
|
colors: const [MyColors.lightGreyEAColor, MyColors.lightGreyEAColor],
|
||||||
|
textColor: MyColors.darkTextColor,
|
||||||
|
).expanded,
|
||||||
|
10.width,
|
||||||
|
DefaultButton(
|
||||||
|
LocaleKeys.ok.tr(),
|
||||||
|
() {
|
||||||
|
Navigator.pop(context);
|
||||||
|
onTap(note);
|
||||||
|
},
|
||||||
|
colors: const [
|
||||||
|
Color(0xff28C884),
|
||||||
|
Color(0xff1BB271),
|
||||||
|
],
|
||||||
|
).expanded,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
|
||||||
|
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
|
||||||
|
|
||||||
|
class ConfirmDialog extends StatelessWidget {
|
||||||
|
final String? title;
|
||||||
|
final String? message;
|
||||||
|
final String? okTitle;
|
||||||
|
final VoidCallback? onTap;
|
||||||
|
|
||||||
|
const ConfirmDialog({Key? key, this.title, @required this.message, this.okTitle, this.onTap}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Dialog(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
shape: RoundedRectangleBorder(),
|
||||||
|
insetPadding: EdgeInsets.only(left: 21, right: 21),
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.only(left: 20, right: 20, top: 18, bottom: 28),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 16.0),
|
||||||
|
child: Text(
|
||||||
|
title ?? LocaleKeys.confirm.tr(),
|
||||||
|
style: TextStyle(fontSize: 24, fontWeight: FontWeight.w600, color: Color(0xff2B353E), height: 35 / 24, letterSpacing: -0.96),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
icon: Icon(Icons.close),
|
||||||
|
color: Color(0xff2B353E),
|
||||||
|
constraints: BoxConstraints(),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
message ?? "",
|
||||||
|
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff808080), letterSpacing: -0.48),
|
||||||
|
),
|
||||||
|
SizedBox(height: 28),
|
||||||
|
DefaultButton(
|
||||||
|
okTitle ?? LocaleKeys.ok.tr(),
|
||||||
|
onTap == null ? () => Navigator.pop(context) : onTap,
|
||||||
|
textColor: Colors.white,
|
||||||
|
//color: Ap.green,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
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';
|
||||||
|
|
||||||
|
class ItemDetailView extends StatelessWidget {
|
||||||
|
final String title;
|
||||||
|
final String value;
|
||||||
|
const ItemDetailView(this.title, this.value, {Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"$title:".toText12(isBold: true, color: const Color(0xff2D3238)),
|
||||||
|
6.width,
|
||||||
|
(value.isEmpty ? "--" : value).toText12(color: MyColors.normalTextColor).expanded,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,249 @@
|
|||||||
|
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/utils.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) {
|
||||||
|
Geolocator.checkPermission().then((value) async {
|
||||||
|
if (value == LocationPermission.denied) {
|
||||||
|
value = await Geolocator.requestPermission();
|
||||||
|
callback(![LocationPermission.denied, LocationPermission.deniedForever].contains(value));
|
||||||
|
} else {
|
||||||
|
callback(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static isEnabled(Function(bool) callback) {
|
||||||
|
Geolocator.isLocationServiceEnabled().then((value) => callback(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool _listeningSettingChange = true;
|
||||||
|
|
||||||
|
static listenGPS({bool change = true, Function(bool)? onChange}) async {
|
||||||
|
_listeningSettingChange = change;
|
||||||
|
if (change == false) return;
|
||||||
|
|
||||||
|
Future.doWhile(() async {
|
||||||
|
await Utils.delay(1000);
|
||||||
|
var enable = await Geolocator.isLocationServiceEnabled();
|
||||||
|
onChange!(enable);
|
||||||
|
return _listeningSettingChange;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static getCurrentLocation(Function(LatLng?) callback) {
|
||||||
|
done(Position position) {
|
||||||
|
//AppStorage.sp.saveLocation(position);
|
||||||
|
|
||||||
|
LatLng? myCurrentLocation = LatLng(position.latitude, position.longitude);
|
||||||
|
callback(myCurrentLocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
AppPermissions.location((granted) {
|
||||||
|
|
||||||
|
if (granted)
|
||||||
|
Geolocator.getLastKnownPosition(forceAndroidLocationManager: true).then((value) {
|
||||||
|
if (value == null) {
|
||||||
|
Geolocator.getCurrentPosition().then((value) {
|
||||||
|
done(value);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
done(value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// static LatLng locationAwayFrom(
|
||||||
|
// {required LatLng loc1, num distanceMeters = 200.0, num bearing = 270.0}) {
|
||||||
|
// geodesy.LatLng l1 = geodesy.LatLng(loc1.latitude, loc1.longitude);
|
||||||
|
// geodesy.LatLng destinationPoint = geodesy.Geodesy()
|
||||||
|
// .destinationPointByDistanceAndBearing(l1, distanceMeters, bearing);
|
||||||
|
// return LatLng(destinationPoint.latitude, destinationPoint.longitude);
|
||||||
|
// }
|
||||||
|
|
||||||
|
static Future<double> distanceTo(LatLng destination) async {
|
||||||
|
var myLoc = await Geolocator.getLastKnownPosition();
|
||||||
|
var distance = 0.0;
|
||||||
|
if (myLoc != null) {
|
||||||
|
distance = Geolocator.distanceBetween(destination.latitude, destination.longitude, myLoc.latitude, myLoc.longitude);
|
||||||
|
}
|
||||||
|
return distance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _Map {
|
||||||
|
Marker createMarker(
|
||||||
|
String id, {
|
||||||
|
required LatLng coordinates,
|
||||||
|
BitmapDescriptor? icon,
|
||||||
|
VoidCallback? onTap,
|
||||||
|
}) {
|
||||||
|
final MarkerId markerId = MarkerId(id);
|
||||||
|
return Marker(
|
||||||
|
icon: icon ?? BitmapDescriptor.defaultMarker,
|
||||||
|
markerId: markerId,
|
||||||
|
position: coordinates,
|
||||||
|
flat: false,
|
||||||
|
// infoWindow: InfoWindow(title: id, snippet: '*'),
|
||||||
|
onTap: onTap,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
CameraPosition initialCamera({required Completer<GoogleMapController> mapController, LatLng? position, double zoom = 12}) {
|
||||||
|
position = position ?? LatLng(24.7249303, 46.5416656);
|
||||||
|
CameraPosition riyadhEye = CameraPosition(
|
||||||
|
target: position,
|
||||||
|
zoom: zoom,
|
||||||
|
);
|
||||||
|
mapController.future.then((controller) {
|
||||||
|
controller.animateCamera(CameraUpdate.newCameraPosition(riyadhEye));
|
||||||
|
});
|
||||||
|
return riyadhEye;
|
||||||
|
}
|
||||||
|
|
||||||
|
CameraPosition moveTo(LatLng location, {double zoom = 12, double direction = 0.0, required Completer<GoogleMapController> mapController, bool? animation}) {
|
||||||
|
var camera = CameraPosition(target: location, zoom: zoom, bearing: direction);
|
||||||
|
mapController.future.then((controller) {
|
||||||
|
animation ?? false ? controller.animateCamera(CameraUpdate.newCameraPosition(camera)) : controller.moveCamera(CameraUpdate.newCameraPosition(camera));
|
||||||
|
});
|
||||||
|
return camera;
|
||||||
|
}
|
||||||
|
|
||||||
|
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}) {
|
||||||
|
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}) {
|
||||||
|
Location.getCurrentLocation((location) {
|
||||||
|
moveTo(location!, zoom: 17, mapController: mapController!, animation: animation, direction: direction!);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var routes = Map<String, DirectionsRoute>();
|
||||||
|
|
||||||
|
setRoutePolylines(LatLng? source, LatLng? destination, Set<Polyline> polylines, Completer<GoogleMapController> mapController, Function(DirectionsRoute?) completion) {
|
||||||
|
if (source == null || destination == null) {
|
||||||
|
completion(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var origin = '${source.latitude},${source.longitude}';
|
||||||
|
var destin = '${destination.latitude},${destination.longitude}';
|
||||||
|
var routeId = '$origin->$destination';
|
||||||
|
|
||||||
|
createPolyline(DirectionsRoute results) {
|
||||||
|
List<LatLng> polylineCoordinates = results.overviewPath!.map((e) => LatLng(e.latitude, e.longitude)).toList();
|
||||||
|
PolylineId id = PolylineId("route");
|
||||||
|
Polyline polyline = Polyline(
|
||||||
|
polylineId: id,
|
||||||
|
color: accentColor,
|
||||||
|
width: 5,
|
||||||
|
jointType: JointType.round,
|
||||||
|
startCap: Cap.roundCap,
|
||||||
|
endCap: Cap.roundCap,
|
||||||
|
points: polylineCoordinates,
|
||||||
|
);
|
||||||
|
|
||||||
|
polylines.removeWhere((element) => true);
|
||||||
|
polylines.add(polyline);
|
||||||
|
|
||||||
|
LatLngBounds bound = getBounds(coordinates: polylineCoordinates);
|
||||||
|
focusCameraToLatLngBounds(bound: bound, mapController: mapController, padding: 100);
|
||||||
|
completion(routes[routeId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var availableRoute = routes[routeId];
|
||||||
|
if (availableRoute == null) {
|
||||||
|
var request = DirectionsRequest(origin: origin, destination: destin);
|
||||||
|
DirectionsService().route(request, (response, status) {
|
||||||
|
if (status == DirectionsStatus.ok && response.routes!.isNotEmpty) {
|
||||||
|
routes[routeId] = response.routes!.first;
|
||||||
|
createPolyline(response.routes!.first);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
createPolyline(availableRoute);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LatLngBounds getBounds({required List<LatLng> coordinates}) {
|
||||||
|
var lngs = coordinates.map<double>((c) => c.longitude).toList();
|
||||||
|
var lats = coordinates.map<double>((c) => c.latitude).toList();
|
||||||
|
|
||||||
|
double bottomMost = lngs.reduce(min);
|
||||||
|
double topMost = lngs.reduce(max);
|
||||||
|
double leftMost = lats.reduce(min);
|
||||||
|
double rightMost = lats.reduce(max);
|
||||||
|
|
||||||
|
LatLngBounds bounds = LatLngBounds(
|
||||||
|
northeast: LatLng(rightMost, topMost),
|
||||||
|
southwest: LatLng(leftMost, bottomMost),
|
||||||
|
);
|
||||||
|
return bounds;
|
||||||
|
|
||||||
|
double? x0, x1, y0, y1;
|
||||||
|
for (LatLng latLng in coordinates) {
|
||||||
|
if (x0 == null) {
|
||||||
|
x0 = x1 = latLng.latitude;
|
||||||
|
y0 = y1 = latLng.longitude;
|
||||||
|
} else {
|
||||||
|
if (latLng.latitude > x1!) x1 = latLng.latitude;
|
||||||
|
if (latLng.latitude < x0) x0 = latLng.latitude;
|
||||||
|
if (latLng.longitude > y1!) y1 = latLng.longitude;
|
||||||
|
if (latLng.longitude < y0!) y0 = latLng.longitude;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return LatLngBounds(northeast: LatLng(x1!, y1!), southwest: LatLng(x0!, y0!));
|
||||||
|
}
|
||||||
|
|
||||||
|
focusCameraToLatLngBounds({LatLngBounds? bound, Completer<GoogleMapController>? mapController, double? padding}) async {
|
||||||
|
if (bound == null) return;
|
||||||
|
|
||||||
|
CameraUpdate camera = CameraUpdate.newLatLngBounds(bound, padding!);
|
||||||
|
final GoogleMapController controller = await mapController!.future;
|
||||||
|
controller.animateCamera(camera);
|
||||||
|
}
|
||||||
|
|
||||||
|
focusCameraTo2Points({LatLng? point1, LatLng? point2, Completer<GoogleMapController>? mapController, double? padding}) async {
|
||||||
|
var source = point1;
|
||||||
|
var destination = point2;
|
||||||
|
if (source != null && destination != null) {
|
||||||
|
// 'package:google_maps_flutter_platform_interface/src/types/location.dart': Failed assertion: line 72 pos 16: 'southwest.latitude <= northeast.latitude': is not true.
|
||||||
|
LatLngBounds bound;
|
||||||
|
if (source.latitude <= destination.latitude) {
|
||||||
|
bound = LatLngBounds(southwest: source, northeast: destination);
|
||||||
|
} else {
|
||||||
|
bound = LatLngBounds(southwest: destination, northeast: source);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bound == null) return;
|
||||||
|
|
||||||
|
focusCameraToLatLngBounds(bound: bound, mapController: mapController, padding: padding);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,187 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:nfc_manager/nfc_manager.dart';
|
||||||
|
import 'package:nfc_manager/platform_tags.dart';
|
||||||
|
|
||||||
|
void showNfcReader(BuildContext context, {required Function(String? nfcId) onNcfScan}) {
|
||||||
|
showModalBottomSheet(
|
||||||
|
context: context,
|
||||||
|
enableDrag: false,
|
||||||
|
isDismissible: false,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.only(topLeft: Radius.circular(12), topRight: Radius.circular(12)),
|
||||||
|
),
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
builder: (context) {
|
||||||
|
return NfcLayout(
|
||||||
|
onNcfScan: onNcfScan,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
class NfcLayout extends StatefulWidget {
|
||||||
|
Function(String? nfcId) onNcfScan;
|
||||||
|
|
||||||
|
NfcLayout({required this.onNcfScan});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_NfcLayoutState createState() => _NfcLayoutState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _NfcLayoutState extends State<NfcLayout> {
|
||||||
|
bool _reading = false;
|
||||||
|
Widget? mainWidget;
|
||||||
|
String? nfcId;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
|
||||||
|
NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async {
|
||||||
|
print(tag.data);
|
||||||
|
var f = MifareUltralight(tag: tag, identifier: tag.data["nfca"]["identifier"], type: 2, maxTransceiveLength: 252, timeout: 22);
|
||||||
|
final String identifier = f.identifier.map((e) => e.toRadixString(16).padLeft(2, '0')).join('');
|
||||||
|
// print(identifier); // => 0428fcf2255e81
|
||||||
|
nfcId = identifier;
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
_reading = true;
|
||||||
|
mainWidget = doneNfc();
|
||||||
|
});
|
||||||
|
|
||||||
|
Future.delayed(const Duration(seconds: 1), () {
|
||||||
|
NfcManager.instance.stopSession();
|
||||||
|
Navigator.pop(context);
|
||||||
|
widget.onNcfScan(nfcId);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
(mainWidget == null && !_reading) ? mainWidget = scanNfc() : mainWidget = doneNfc();
|
||||||
|
return AnimatedSwitcher(duration: Duration(milliseconds: 500), child: mainWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget scanNfc() {
|
||||||
|
return Container(
|
||||||
|
key: ValueKey(1),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: <Widget>[
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
"Ready To Scan",
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 24,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
"assets/icons/nfc/ic_nfc.png",
|
||||||
|
height: MediaQuery.of(context).size.width / 3,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
"Approach an NFC Tag",
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
ButtonTheme(
|
||||||
|
minWidth: MediaQuery.of(context).size.width / 1.2,
|
||||||
|
height: 45.0,
|
||||||
|
buttonColor: Colors.grey[300],
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(6),
|
||||||
|
),
|
||||||
|
child: RaisedButton(
|
||||||
|
onPressed: () {
|
||||||
|
NfcManager.instance.stopSession();
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
elevation: 0,
|
||||||
|
child: Text("CANCEL"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget doneNfc() {
|
||||||
|
return Container(
|
||||||
|
key: ValueKey(2),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: <Widget>[
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
"Successfully Scanned",
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 24,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
"assets/icons/nfc/ic_done.png",
|
||||||
|
height: MediaQuery.of(context).size.width / 3,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
"Approach an NFC Tag",
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
ButtonTheme(
|
||||||
|
minWidth: MediaQuery.of(context).size.width / 1.2,
|
||||||
|
height: 45.0,
|
||||||
|
buttonColor: Colors.grey[300],
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(6),
|
||||||
|
),
|
||||||
|
child: RaisedButton(
|
||||||
|
// onPressed: () {
|
||||||
|
// _stream?.cancel();
|
||||||
|
// widget.onNcfScan(nfcId);
|
||||||
|
// Navigator.pop(context);
|
||||||
|
// },
|
||||||
|
onPressed: null,
|
||||||
|
elevation: 0,
|
||||||
|
child: Text("DONE"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,189 @@
|
|||||||
|
import 'package:easy_localization/src/public_ext.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.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:shimmer/shimmer.dart';
|
||||||
|
|
||||||
|
class GetAttendanceTrackingShimmer extends StatelessWidget {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
width: double.infinity,
|
||||||
|
height: double.infinity,
|
||||||
|
clipBehavior: Clip.antiAlias,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(15),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: const Color(0xff000000).withOpacity(.05),
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: const Offset(0, -3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Stack(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
children: [
|
||||||
|
// SvgPicture.asset("assets/images/"),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true).toShimmer(),
|
||||||
|
16.height,
|
||||||
|
"07:55:12".toText10(color: Colors.white, isBold: true).toShimmer(),
|
||||||
|
3.height,
|
||||||
|
LocaleKeys.timeLeftToday.tr().toText10(color: Colors.white).toShimmer(),
|
||||||
|
9.height,
|
||||||
|
const ClipRRect(
|
||||||
|
borderRadius: BorderRadius.all(
|
||||||
|
Radius.circular(20),
|
||||||
|
),
|
||||||
|
child: LinearProgressIndicator(
|
||||||
|
value: 0.7,
|
||||||
|
minHeight: 8,
|
||||||
|
valueColor: const AlwaysStoppedAnimation<Color>(Colors.white),
|
||||||
|
backgroundColor: const Color(0xff196D73),
|
||||||
|
),
|
||||||
|
).toShimmer(),
|
||||||
|
],
|
||||||
|
).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).toShimmer(),
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 12),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: 45,
|
||||||
|
height: 45,
|
||||||
|
// color: Colors.blue,
|
||||||
|
padding: const EdgeInsets.only(left: 14, right: 14),
|
||||||
|
).toShimmer(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MenuShimmer extends StatelessWidget {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
clipBehavior: Clip.antiAlias,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(15),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: const Color(0xff000000).withOpacity(.05),
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: const Offset(0, -3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
LocaleKeys.workList.tr().toText12(color: Colors.white).toShimmer(),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
flex: 3,
|
||||||
|
child: 123.toString().toText10(color: Colors.white, isBold: true).toShimmer(),
|
||||||
|
),
|
||||||
|
12.width,
|
||||||
|
SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white).toShimmer()
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 10, right: 10, bottom: 6, top: 6),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ServicesHeaderShimmer extends StatelessWidget {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
"Other".tr().toText10().toShimmer(),
|
||||||
|
6.height,
|
||||||
|
LocaleKeys.services.tr().toText12(isBold: true).toShimmer(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
LocaleKeys.viewAllServices.tr().toText12(isUnderLine: true).toShimmer(),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ServicesMenuShimmer extends StatelessWidget {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(15),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: const Color(0xff000000).withOpacity(.05),
|
||||||
|
blurRadius: 26,
|
||||||
|
offset: const Offset(0, -3),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset("assets/images/monthly_attendance.svg").toShimmer(),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
"Attendan".toText11(isBold: false).toShimmer(),
|
||||||
|
5.height,
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: "Attendance".toText11(isBold: false).toShimmer(),
|
||||||
|
),
|
||||||
|
6.width,
|
||||||
|
SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4).toShimmer()
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
).paddingOnly(left: 10, right: 10, bottom: 10, top: 12),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,194 @@
|
|||||||
|
// import 'dart:async';
|
||||||
|
//
|
||||||
|
// import 'package:flutter/material.dart';
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// void showNfcReader(BuildContext context, {Function onNcfScan}) {
|
||||||
|
// showModalBottomSheet(
|
||||||
|
// context: context,
|
||||||
|
// enableDrag: false,
|
||||||
|
// isDismissible: false,
|
||||||
|
// shape: RoundedRectangleBorder(
|
||||||
|
// borderRadius: BorderRadius.only(topLeft: Radius.circular(12), topRight: Radius.circular(12)),
|
||||||
|
// ),
|
||||||
|
// backgroundColor: Colors.white,
|
||||||
|
// builder: (context) {
|
||||||
|
// return NfcLayout(
|
||||||
|
// onNcfScan: onNcfScan,
|
||||||
|
// );
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// class NfcLayout extends StatefulWidget {
|
||||||
|
// Function onNcfScan;
|
||||||
|
//
|
||||||
|
// NfcLayout({this.onNcfScan});
|
||||||
|
//
|
||||||
|
// @override
|
||||||
|
// _NfcLayoutState createState() => _NfcLayoutState();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// class _NfcLayoutState extends State<NfcLayout> {
|
||||||
|
// StreamSubscription<NDEFMessage> _stream;
|
||||||
|
// bool _reading = false;
|
||||||
|
// Widget mainWidget;
|
||||||
|
// String nfcId;
|
||||||
|
//
|
||||||
|
// @override
|
||||||
|
// void initState() {
|
||||||
|
// super.initState();
|
||||||
|
//
|
||||||
|
// setState(() {
|
||||||
|
// // _reading = true;
|
||||||
|
// // Start reading using NFC.readNDEF()
|
||||||
|
// _stream = NFC.readNDEF(once: false, throwOnUserCancel: false, readerMode: NFCDispatchReaderMode()).listen((NDEFMessage message) {
|
||||||
|
// setState(() {
|
||||||
|
// _reading = true;
|
||||||
|
// mainWidget = doneNfc();
|
||||||
|
// });
|
||||||
|
// Future.delayed(const Duration(milliseconds: 500), () {
|
||||||
|
// _stream?.cancel();
|
||||||
|
// widget.onNcfScan(nfcId);
|
||||||
|
// Navigator.pop(context);
|
||||||
|
// });
|
||||||
|
// print("read NDEF id: ${message.id}");
|
||||||
|
// print("NFC Record " + message.payload);
|
||||||
|
// print("NFC Record Lenght " + message.records.length.toString());
|
||||||
|
// print("NFC Record " + message.records.first.id);
|
||||||
|
// print("NFC Record " + message.records.first.payload);
|
||||||
|
// print("NFC Record " + message.records.first.data);
|
||||||
|
// print("NFC Record " + message.records.first.type);
|
||||||
|
// // widget.onNcfScan(message.id);
|
||||||
|
// nfcId = message.id;
|
||||||
|
// }, onError: (e) {
|
||||||
|
// // Check error handling guide below
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @override
|
||||||
|
// Widget build(BuildContext context) {
|
||||||
|
// (mainWidget == null && !_reading) ? mainWidget = scanNfc() : mainWidget = doneNfc();
|
||||||
|
// return AnimatedSwitcher(duration: Duration(milliseconds: 500), child: mainWidget);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Widget scanNfc() {
|
||||||
|
// return Container(
|
||||||
|
// key: ValueKey(1),
|
||||||
|
// child: Column(
|
||||||
|
// mainAxisSize: MainAxisSize.min,
|
||||||
|
// children: <Widget>[
|
||||||
|
// SizedBox(
|
||||||
|
// height: 30,
|
||||||
|
// ),
|
||||||
|
// Text(
|
||||||
|
// "Ready To Scan",
|
||||||
|
// style: TextStyle(
|
||||||
|
// fontWeight: FontWeight.bold,
|
||||||
|
// fontSize: 24,
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// SizedBox(
|
||||||
|
// height: 30,
|
||||||
|
// ),
|
||||||
|
// Image.asset(
|
||||||
|
// "assets/images/nfc/ic_nfc.png",
|
||||||
|
// height: MediaQuery.of(context).size.width / 3,
|
||||||
|
// ),
|
||||||
|
// SizedBox(
|
||||||
|
// height: 30,
|
||||||
|
// ),
|
||||||
|
// Text(
|
||||||
|
// "Approach an NFC Tag",
|
||||||
|
// style: TextStyle(
|
||||||
|
// fontSize: 18,
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// SizedBox(
|
||||||
|
// height: 30,
|
||||||
|
// ),
|
||||||
|
// ButtonTheme(
|
||||||
|
// minWidth: MediaQuery.of(context).size.width / 1.2,
|
||||||
|
// height: 45.0,
|
||||||
|
// buttonColor: Colors.grey[300],
|
||||||
|
// shape: RoundedRectangleBorder(
|
||||||
|
// borderRadius: BorderRadius.circular(6),
|
||||||
|
// ),
|
||||||
|
// child: RaisedButton(
|
||||||
|
// onPressed: () {
|
||||||
|
// _stream?.cancel();
|
||||||
|
// Navigator.pop(context);
|
||||||
|
// },
|
||||||
|
// elevation: 0,
|
||||||
|
// child: Text("CANCEL"),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// SizedBox(
|
||||||
|
// height: 30,
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Widget doneNfc() {
|
||||||
|
// return Container(
|
||||||
|
// key: ValueKey(2),
|
||||||
|
// child: Column(
|
||||||
|
// mainAxisSize: MainAxisSize.min,
|
||||||
|
// children: <Widget>[
|
||||||
|
// SizedBox(
|
||||||
|
// height: 30,
|
||||||
|
// ),
|
||||||
|
// Text(
|
||||||
|
// "Successfully Scanned",
|
||||||
|
// style: TextStyle(
|
||||||
|
// fontWeight: FontWeight.bold,
|
||||||
|
// fontSize: 24,
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// SizedBox(
|
||||||
|
// height: 30,
|
||||||
|
// ),
|
||||||
|
// Image.asset(
|
||||||
|
// "assets/images/nfc/ic_done.png",
|
||||||
|
// height: MediaQuery.of(context).size.width / 3,
|
||||||
|
// ),
|
||||||
|
// SizedBox(
|
||||||
|
// height: 30,
|
||||||
|
// ),
|
||||||
|
// Text(
|
||||||
|
// "Approach an NFC Tag",
|
||||||
|
// style: TextStyle(
|
||||||
|
// fontSize: 18,
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// SizedBox(
|
||||||
|
// height: 30,
|
||||||
|
// ),
|
||||||
|
// ButtonTheme(
|
||||||
|
// minWidth: MediaQuery.of(context).size.width / 1.2,
|
||||||
|
// height: 45.0,
|
||||||
|
// buttonColor: Colors.grey[300],
|
||||||
|
// shape: RoundedRectangleBorder(
|
||||||
|
// borderRadius: BorderRadius.circular(6),
|
||||||
|
// ),
|
||||||
|
// child: RaisedButton(
|
||||||
|
// // onPressed: () {
|
||||||
|
// // _stream?.cancel();
|
||||||
|
// // widget.onNcfScan(nfcId);
|
||||||
|
// // Navigator.pop(context);
|
||||||
|
// // },
|
||||||
|
// onPressed: null,
|
||||||
|
// elevation: 0,
|
||||||
|
// child: Text("DONE"),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// SizedBox(
|
||||||
|
// height: 30,
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
@ -1,535 +0,0 @@
|
|||||||
# Generated by pub
|
|
||||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
|
||||||
packages:
|
|
||||||
args:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: args
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.3.0"
|
|
||||||
async:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: async
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.8.2"
|
|
||||||
boolean_selector:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: boolean_selector
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.1.0"
|
|
||||||
characters:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: characters
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.2.0"
|
|
||||||
charcode:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: charcode
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.3.1"
|
|
||||||
clock:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: clock
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.1.0"
|
|
||||||
collection:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: collection
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.15.0"
|
|
||||||
crypto:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: crypto
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.1"
|
|
||||||
cupertino_icons:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: cupertino_icons
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.0.4"
|
|
||||||
easy_localization:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: easy_localization
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.0"
|
|
||||||
easy_logger:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: easy_logger
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "0.0.2"
|
|
||||||
fake_async:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: fake_async
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.2.0"
|
|
||||||
ffi:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: ffi
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.1.2"
|
|
||||||
file:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: file
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "6.1.2"
|
|
||||||
flutter:
|
|
||||||
dependency: "direct main"
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.0"
|
|
||||||
flutter_calendar_carousel:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: flutter_calendar_carousel
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.1.0"
|
|
||||||
flutter_lints:
|
|
||||||
dependency: "direct dev"
|
|
||||||
description:
|
|
||||||
name: flutter_lints
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.0.4"
|
|
||||||
flutter_localizations:
|
|
||||||
dependency: transitive
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.0"
|
|
||||||
flutter_plugin_android_lifecycle:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: flutter_plugin_android_lifecycle
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.5"
|
|
||||||
flutter_svg:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: flutter_svg
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.0.3"
|
|
||||||
flutter_test:
|
|
||||||
dependency: "direct dev"
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.0"
|
|
||||||
flutter_web_plugins:
|
|
||||||
dependency: transitive
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.0"
|
|
||||||
fluttertoast:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: fluttertoast
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "8.0.8"
|
|
||||||
http:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: http
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "0.13.4"
|
|
||||||
http_parser:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: http_parser
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "4.0.0"
|
|
||||||
injector:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: injector
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.0"
|
|
||||||
intl:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: intl
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "0.17.0"
|
|
||||||
js:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: js
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "0.6.3"
|
|
||||||
lints:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: lints
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.0.1"
|
|
||||||
local_auth:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: local_auth
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.1.10"
|
|
||||||
matcher:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: matcher
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "0.12.11"
|
|
||||||
meta:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: meta
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.7.0"
|
|
||||||
nested:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: nested
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.0.0"
|
|
||||||
path:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: path
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.8.0"
|
|
||||||
path_drawing:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: path_drawing
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.0.0"
|
|
||||||
path_parsing:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: path_parsing
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.0.0"
|
|
||||||
path_provider:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: path_provider
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.8"
|
|
||||||
path_provider_android:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: path_provider_android
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.11"
|
|
||||||
path_provider_ios:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: path_provider_ios
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.7"
|
|
||||||
path_provider_linux:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: path_provider_linux
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.1.5"
|
|
||||||
path_provider_macos:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: path_provider_macos
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.5"
|
|
||||||
path_provider_platform_interface:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: path_provider_platform_interface
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.3"
|
|
||||||
path_provider_windows:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: path_provider_windows
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.5"
|
|
||||||
permission_handler:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: permission_handler
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "8.3.0"
|
|
||||||
permission_handler_platform_interface:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: permission_handler_platform_interface
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "3.7.0"
|
|
||||||
petitparser:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: petitparser
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "4.4.0"
|
|
||||||
pie_chart:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: pie_chart
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "5.1.0"
|
|
||||||
platform:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: platform
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "3.1.0"
|
|
||||||
plugin_platform_interface:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: plugin_platform_interface
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.1.2"
|
|
||||||
process:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: process
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "4.2.4"
|
|
||||||
provider:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: provider
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "6.0.2"
|
|
||||||
shared_preferences:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: shared_preferences
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.12"
|
|
||||||
shared_preferences_android:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: shared_preferences_android
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.10"
|
|
||||||
shared_preferences_ios:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: shared_preferences_ios
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.9"
|
|
||||||
shared_preferences_linux:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: shared_preferences_linux
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.4"
|
|
||||||
shared_preferences_macos:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: shared_preferences_macos
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.2"
|
|
||||||
shared_preferences_platform_interface:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: shared_preferences_platform_interface
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.0"
|
|
||||||
shared_preferences_web:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: shared_preferences_web
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.3"
|
|
||||||
shared_preferences_windows:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: shared_preferences_windows
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.4"
|
|
||||||
sizer:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: sizer
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.15"
|
|
||||||
sky_engine:
|
|
||||||
dependency: transitive
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.99"
|
|
||||||
source_span:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: source_span
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.8.1"
|
|
||||||
stack_trace:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: stack_trace
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.10.0"
|
|
||||||
stream_channel:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: stream_channel
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.1.0"
|
|
||||||
string_scanner:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: string_scanner
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.1.0"
|
|
||||||
syncfusion_flutter_calendar:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: syncfusion_flutter_calendar
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "19.4.48"
|
|
||||||
syncfusion_flutter_core:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: syncfusion_flutter_core
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "19.4.48"
|
|
||||||
syncfusion_flutter_datepicker:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: syncfusion_flutter_datepicker
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "19.4.48"
|
|
||||||
term_glyph:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: term_glyph
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.2.0"
|
|
||||||
test_api:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: test_api
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "0.4.3"
|
|
||||||
timezone:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: timezone
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "0.8.0"
|
|
||||||
typed_data:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: typed_data
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.3.0"
|
|
||||||
universal_io:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: universal_io
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.4"
|
|
||||||
vector_math:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: vector_math
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.1.1"
|
|
||||||
win32:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: win32
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.3.9"
|
|
||||||
xdg_directories:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: xdg_directories
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "0.2.0"
|
|
||||||
xml:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: xml
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "5.3.1"
|
|
||||||
sdks:
|
|
||||||
dart: ">=2.15.0 <3.0.0"
|
|
||||||
flutter: ">=2.5.0"
|
|
||||||