Commit c71dbe0b authored by William Goszal's avatar William Goszal 🚴

tambah break_start dan break_end

parent c21740a1
...@@ -29,9 +29,7 @@ class Api { ...@@ -29,9 +29,7 @@ class Api {
// dynamic jsonObject = await httpRequest( // dynamic jsonObject = await httpRequest(
// typePost, apiUrl, "getNearestBranch", // typePost, apiUrl, "getNearestBranch",
// bodies: bodies); // bodies: bodies);
HttpResponseApi apiResult = await ConstantApi.httpRequest( HttpResponseApi apiResult = await ConstantApi.httpRequest(typePost, apiUrl, "getNearestBranch", bodies: bodies);
typePost, apiUrl, "getNearestBranch",
bodies: bodies);
if (apiResult.succes == false) { if (apiResult.succes == false) {
return apiResult.apiResponse!; return apiResult.apiResponse!;
} else { } else {
...@@ -47,12 +45,9 @@ class Api { ...@@ -47,12 +45,9 @@ class Api {
), ),
); );
} }
ConstantString.outletDistance = ConstantString.outletDistance = jsonObject['data']['max_distance'].toString();
jsonObject['data']['max_distance'].toString(); ConstantString.logoUrlHome = jsonObject['data']['logo_attendance_home'];
ConstantString.logoUrlHome = ConstantString.logoUrlCamera = jsonObject['data']['logo_attendance_camera'];
jsonObject['data']['logo_attendance_home'];
ConstantString.logoUrlCamera =
jsonObject['data']['logo_attendance_camera'];
return ApiResponse( return ApiResponse(
error: false, error: false,
msg: Strings.succesGetData, msg: Strings.succesGetData,
...@@ -169,8 +164,7 @@ class Api { ...@@ -169,8 +164,7 @@ class Api {
} }
} }
static Future<ApiResponse> shiftIn( static Future<ApiResponse> shiftIn(String branchId, String nik, String shiftId, String photoBase64,
String branchId, String nik, String shiftId, String photoBase64,
{int forceSubmit = 0}) async { {int forceSubmit = 0}) async {
String apiUrl = "$baseUrl${endPoint}clock_in"; String apiUrl = "$baseUrl${endPoint}clock_in";
// Position position = await Geolocator.getCurrentPosition(); // Position position = await Geolocator.getCurrentPosition();
...@@ -212,8 +206,7 @@ class Api { ...@@ -212,8 +206,7 @@ class Api {
if (jsonObject['status'] == "ok") { if (jsonObject['status'] == "ok") {
// simpan NIK user // simpan NIK user
List<String> listAbsentUser = getListAbsentUser(); List<String> listAbsentUser = getListAbsentUser();
int indexList = int indexList = listAbsentUser.indexWhere((element) => element == nik);
listAbsentUser.indexWhere((element) => element == nik);
if (indexList == -1) { if (indexList == -1) {
listAbsentUser.add(nik); listAbsentUser.add(nik);
setListAbsentUser(listAbsentUser); setListAbsentUser(listAbsentUser);
...@@ -243,9 +236,7 @@ class Api { ...@@ -243,9 +236,7 @@ class Api {
} }
} }
static Future<ApiResponse> shiftOut( static Future<ApiResponse> shiftOut(String branchId, String nik, String photoBase64, {int forceSubmit = 0}) async {
String branchId, String nik, String photoBase64,
{int forceSubmit = 0}) async {
String apiUrl = "$baseUrl${endPoint}clock_out"; String apiUrl = "$baseUrl${endPoint}clock_out";
// Position position = await Geolocator.getCurrentPosition(); // Position position = await Geolocator.getCurrentPosition();
...@@ -286,8 +277,72 @@ class Api { ...@@ -286,8 +277,72 @@ class Api {
if (jsonObject['status'] == "ok") { if (jsonObject['status'] == "ok") {
// simpan NIK user // simpan NIK user
List<String> listAbsentUser = getListAbsentUser(); List<String> listAbsentUser = getListAbsentUser();
int indexList = int indexList = listAbsentUser.indexWhere((element) => element == nik);
listAbsentUser.indexWhere((element) => element == nik); if (indexList == -1) {
listAbsentUser.add(nik);
setListAbsentUser(listAbsentUser);
}
return ApiResponse(
error: false,
msg: Strings.succesGetData,
data: AbsentSuccessModel.json(
jsonObject['data'],
),
);
} else {
return ApiResponse(
error: true,
msg: jsonObject['msg'],
code: jsonObject['code'],
);
}
}
} catch (e) {
return ApiResponse(error: true, msg: "Error: $e");
}
}
static Future<ApiResponse> submitBreak(bool isIn, String branchId, String nik, String photoBase64,
{int forceSubmit = 0}) async {
String action = isIn ? "break_start" : "break_end";
String apiUrl = "$baseUrl$endPoint$action";
IpAddress ipAddress = IpAddress(type: RequestType.json);
dynamic dataIp = await ipAddress.getIpAddress();
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
String userAgent = "";
if (kIsWeb) {
WebBrowserInfo browser = await deviceInfo.webBrowserInfo;
userAgent = browser.userAgent ?? "";
}
try {
Map<String, dynamic> data = {
"branch_id": branchId,
"brand_code": brandCode,
"nik": nik,
"user_lat": getLatitude(),
"user_long": getLongitude(),
"photo_base64": photoBase64,
"ip": dataIp['ip'],
"user_agent": userAgent,
"forced_submit": forceSubmit,
};
String bodies = jsonEncode(data);
HttpResponseApi apiResult = await ConstantApi.httpRequest(
typePost,
apiUrl,
"shiftIn",
bodies: bodies,
);
if (apiResult.succes == false) {
return ApiResponse(error: true, msg: Strings.cantConnectToServer);
} else {
Map<String, dynamic> jsonObject = apiResult.jsonObject!;
if (jsonObject['status'] == "ok") {
// simpan NIK user
List<String> listAbsentUser = getListAbsentUser();
int indexList = listAbsentUser.indexWhere((element) => element == nik);
if (indexList == -1) { if (indexList == -1) {
listAbsentUser.add(nik); listAbsentUser.add(nik);
setListAbsentUser(listAbsentUser); setListAbsentUser(listAbsentUser);
...@@ -369,5 +424,3 @@ int typePost = 2; ...@@ -369,5 +424,3 @@ int typePost = 2;
// this.code = "", // this.code = "",
// }); // });
// } // }
...@@ -4,6 +4,7 @@ import 'package:ravintola_attendance/models/profile.dart'; ...@@ -4,6 +4,7 @@ import 'package:ravintola_attendance/models/profile.dart';
import 'package:ravintola_attendance/models/shift.dart'; import 'package:ravintola_attendance/models/shift.dart';
class AbsentCameraArguments { class AbsentCameraArguments {
final int actionType; // 1 = Absent, 2 = Break
final bool isIn; final bool isIn;
final BranchModel branchModel; final BranchModel branchModel;
final ShiftModel? shiftModel; final ShiftModel? shiftModel;
...@@ -14,6 +15,7 @@ class AbsentCameraArguments { ...@@ -14,6 +15,7 @@ class AbsentCameraArguments {
final String shiftEndTime; final String shiftEndTime;
AbsentCameraArguments({ AbsentCameraArguments({
this.actionType = 1,
required this.isIn, required this.isIn,
required this.branchModel, required this.branchModel,
required this.nik, required this.nik,
...@@ -39,6 +41,7 @@ class AbsentSuccessArguments { ...@@ -39,6 +41,7 @@ class AbsentSuccessArguments {
final AbsentSuccessModel absentSuccess; final AbsentSuccessModel absentSuccess;
final ProfileModel profil; final ProfileModel profil;
final String nik; final String nik;
final int actionType;
final bool isIn; final bool isIn;
final String shiftStart; final String shiftStart;
final String shiftEnd; final String shiftEnd;
...@@ -48,6 +51,7 @@ class AbsentSuccessArguments { ...@@ -48,6 +51,7 @@ class AbsentSuccessArguments {
required this.absentSuccess, required this.absentSuccess,
required this.profil, required this.profil,
required this.nik, required this.nik,
required this.actionType,
required this.isIn, required this.isIn,
required this.shiftStart, required this.shiftStart,
required this.shiftEnd, required this.shiftEnd,
......
...@@ -30,9 +30,19 @@ import 'package:flutter/material.dart'; ...@@ -30,9 +30,19 @@ import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:quiver/async.dart'; import 'package:quiver/async.dart';
String getAbsentText(bool isIn, int actionType) {
if (actionType == 1) {
return isIn ? "Absen Masuk" : "Absen Keluar";
} else if (actionType == 2) {
return isIn ? "Break Start" : "Break End";
}
return "Unknown";
}
class AbsentCameraView extends StatefulWidget { class AbsentCameraView extends StatefulWidget {
const AbsentCameraView({ const AbsentCameraView({
super.key, super.key,
required this.actionType,
required this.isIn, required this.isIn,
required this.branchModel, required this.branchModel,
required this.nik, required this.nik,
...@@ -43,6 +53,7 @@ class AbsentCameraView extends StatefulWidget { ...@@ -43,6 +53,7 @@ class AbsentCameraView extends StatefulWidget {
required this.shiftEndTime, required this.shiftEndTime,
}); });
final int actionType; // 1 = Absent, 2 = Break
final bool isIn; final bool isIn;
final BranchModel branchModel; final BranchModel branchModel;
final ShiftModel? shiftModel; final ShiftModel? shiftModel;
...@@ -93,6 +104,9 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -93,6 +104,9 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
} }
void initStateFunc() { void initStateFunc() {
print("isIn: ${widget.isIn}");
print("actionType: ${widget.actionType}");
getCameraDescrption().then((value) { getCameraDescrption().then((value) {
cameras = value; cameras = value;
if (debug) { if (debug) {
...@@ -139,8 +153,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -139,8 +153,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
Routes.errorWidget, Routes.errorWidget,
(route) => false, (route) => false,
arguments: ErrorWidgetArguments( arguments: ErrorWidgetArguments(
errorMessage: errorMessage: Strings.cameraFrontNotFound(cameras!.length.toString()),
Strings.cameraFrontNotFound(cameras!.length.toString()),
), ),
); );
} }
...@@ -161,6 +174,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -161,6 +174,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
); );
break; break;
default: default:
// setState(() { // setState(() {
// errorCamera = "$e"; // errorCamera = "$e";
// }); // });
...@@ -355,8 +369,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -355,8 +369,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
Container( Container(
width: size.width, width: size.width,
height: size.height, height: size.height,
padding: EdgeInsets.only( padding: EdgeInsets.only(top: AppPadding.safeAreaTop(context) + 40),
top: AppPadding.safeAreaTop(context) + 40),
child: (pictureIsTaken) child: (pictureIsTaken)
? (isPhone) ? (isPhone)
? Image.file( ? Image.file(
...@@ -374,8 +387,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -374,8 +387,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
Container( Container(
width: size.width, width: size.width,
height: size.height, height: size.height,
padding: EdgeInsets.only( padding: EdgeInsets.only(top: AppPadding.safeAreaTop(context) + 40),
top: AppPadding.safeAreaTop(context) + 40),
child: Image( child: Image(
fit: BoxFit.fill, fit: BoxFit.fill,
image: AssetImage(Assets.frameOverlay), image: AssetImage(Assets.frameOverlay),
...@@ -397,8 +409,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -397,8 +409,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
color: ColorManager.primary, color: ColorManager.primary,
), ),
child: Container( child: Container(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(horizontal: AppPadding.p20),
horizontal: AppPadding.p20),
margin: EdgeInsets.only( margin: EdgeInsets.only(
top: AppPadding.safeAreaTop(context), top: AppPadding.safeAreaTop(context),
), ),
...@@ -465,161 +476,247 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -465,161 +476,247 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
status: Strings.pleaseWait, status: Strings.pleaseWait,
maskType: EasyLoadingMaskType.none, maskType: EasyLoadingMaskType.none,
); );
if (widget.isIn) {
ApiResponse apiResponse = if (widget.actionType == 1) {
await Api.shiftIn( if (widget.isIn) {
widget.branchModel.id, ApiResponse apiResponse = await Api.shiftIn(
widget.nik, widget.branchModel.id,
widget.shiftModel!.id, widget.nik,
imageBase64!, widget.shiftModel!.id,
); imageBase64!,
// stopTimer(); );
EasyLoading.dismiss(); // stopTimer();
if (apiResponse.error) { EasyLoading.dismiss();
// Start modal dialog konfirmasi kalau dia out of range if (apiResponse.error) {
if (apiResponse.code == // Start modal dialog konfirmasi kalau dia out of range
"DISTANCE_OUT_OF_RANGE") { if (apiResponse.code == "DISTANCE_OUT_OF_RANGE") {
modalDialogGlobal( modalDialogGlobal(
context: context, context: context,
size: size: MediaQuery.of(context).size,
MediaQuery.of(context).size, title: "Konfirmasi",
title: "Konfirmasi", contentBody: apiResponse.msg,
contentBody: apiResponse.msg, buttonText: "YA",
buttonText: "YA", tapButtonOk: () async {
tapButtonOk: () async { await EasyLoading.show(
await EasyLoading.show( status: Strings.pleaseWait,
status: Strings.pleaseWait, maskType: EasyLoadingMaskType.none,
maskType:
EasyLoadingMaskType
.none,
);
ApiResponse apiResponse =
await Api.shiftIn(
widget.branchModel.id,
widget.nik,
widget.shiftModel!.id,
imageBase64!,
forceSubmit: 1,
);
EasyLoading.dismiss();
if (apiResponse.error) {
modalDialogGlobal(
context: context,
size:
MediaQuery.of(context)
.size,
title: "Gagal",
contentBody:
apiResponse.msg,
buttonText: "OK",
tapButtonOk: () {
Navigator.pop(context);
Navigator.pop(context);
recallCamera();
},
); );
return; ApiResponse apiResponse = await Api.shiftIn(
} else { widget.branchModel.id,
Navigator.pop(context); widget.nik,
AbsentSuccessModel widget.shiftModel!.id,
absentSuccess = imageBase64!,
apiResponse.data forceSubmit: 1,
as AbsentSuccessModel;
Navigator
.pushNamedAndRemoveUntil(
context,
Routes.absentSuccess,
(route) => false,
arguments: AbsentSuccessArguments(
absentSuccess:
absentSuccess,
profil:
widget.profile,
nik: widget.nik,
isIn: true,
shiftName: widget
.shiftNameSelected,
shiftEnd: widget
.shiftEndTime,
shiftStart: widget
.shiftStartTime),
); );
EasyLoading.dismiss();
if (apiResponse.error) {
modalDialogGlobal(
context: context,
size: MediaQuery.of(context).size,
title: "Gagal",
contentBody: apiResponse.msg,
buttonText: "OK",
tapButtonOk: () {
Navigator.pop(context);
Navigator.pop(context);
recallCamera();
},
);
return;
} else {
Navigator.pop(context);
AbsentSuccessModel absentSuccess =
apiResponse.data as AbsentSuccessModel;
Navigator.pushNamedAndRemoveUntil(
context,
Routes.absentSuccess,
(route) => false,
arguments: AbsentSuccessArguments(
absentSuccess: absentSuccess,
profil: widget.profile,
nik: widget.nik,
actionType: widget.actionType,
isIn: true,
shiftName: widget.shiftNameSelected,
shiftEnd: widget.shiftEndTime,
shiftStart: widget.shiftStartTime),
);
return; return;
} }
}, },
isActiveCancelButton: true, isActiveCancelButton: true,
cancelButtonText: "Tidak", cancelButtonText: "Tidak",
tapButtonCancel: () { tapButtonCancel: () {
// kalau pilih tidak, recall lagi camera suruh foto ulang // kalau pilih tidak, recall lagi camera suruh foto ulang
Navigator.pop(context);
recallCamera();
},
);
return;
}
// END modal dialog konfirmasi kalau dia out of range
modalDialogGlobal(
context: context,
size: MediaQuery.of(context).size,
title: "Gagal",
contentBody: apiResponse.msg,
buttonText: "OK",
tapButtonOk: () {
Navigator.pop(context); Navigator.pop(context);
recallCamera(); recallCamera();
}, },
); );
return; return;
} }
// END modal dialog konfirmasi kalau dia out of range AbsentSuccessModel absentSuccess = apiResponse.data as AbsentSuccessModel;
Navigator.pushNamedAndRemoveUntil(
modalDialogGlobal( context,
context: context, Routes.absentSuccess,
size: MediaQuery.of(context).size, (route) => false,
title: "Gagal", arguments: AbsentSuccessArguments(
contentBody: apiResponse.msg, absentSuccess: absentSuccess,
buttonText: "OK", profil: widget.profile,
tapButtonOk: () { nik: widget.nik,
Navigator.pop(context); actionType: widget.actionType,
recallCamera(); isIn: true,
}, shiftName: widget.shiftNameSelected,
shiftEnd: widget.shiftEndTime,
shiftStart: widget.shiftStartTime),
); );
return; } else {
Api.shiftOut(
widget.branchModel.id,
widget.nik,
imageBase64!,
).then((apiResponse) {
// stopTimer();
EasyLoading.dismiss();
if (apiResponse.error) {
// Start modal dialog konfirmasi kalau dia out of range
if (apiResponse.code == "DISTANCE_OUT_OF_RANGE") {
modalDialogGlobal(
context: context,
size: MediaQuery.of(context).size,
title: "Konfirmasi",
contentBody: apiResponse.msg,
buttonText: "YA",
tapButtonOk: () async {
await EasyLoading.show(
status: Strings.pleaseWait,
maskType: EasyLoadingMaskType.none,
);
ApiResponse apiResponse = await Api.shiftOut(
widget.branchModel.id,
widget.nik,
imageBase64!,
forceSubmit: 1,
);
EasyLoading.dismiss();
if (apiResponse.error) {
modalDialogGlobal(
context: context,
size: MediaQuery.of(context).size,
title: "Gagal",
contentBody: apiResponse.msg,
buttonText: "OK",
tapButtonOk: () {
Navigator.pop(context);
Navigator.pop(context);
recallCamera();
},
);
return;
} else {
Navigator.pop(context);
AbsentSuccessModel absentSuccess =
apiResponse.data as AbsentSuccessModel;
Navigator.pushNamedAndRemoveUntil(
context,
Routes.absentSuccess,
(route) => false,
arguments: AbsentSuccessArguments(
absentSuccess: absentSuccess,
profil: widget.profile,
nik: widget.nik,
actionType: widget.actionType,
isIn: false,
shiftName: widget.shiftNameSelected,
shiftEnd: widget.shiftEndTime,
shiftStart: widget.shiftStartTime),
);
return;
}
},
isActiveCancelButton: true,
cancelButtonText: "Tidak",
tapButtonCancel: () {
// kalau pilih tidak, recall lagi camera suruh foto ulang
Navigator.pop(context);
recallCamera();
},
);
return;
}
// END modal dialog konfirmasi kalau dia out of range
modalDialogGlobal(
context: context,
size: MediaQuery.of(context).size,
title: "Gagal",
contentBody: apiResponse.msg,
buttonText: "OK",
tapButtonOk: () {
Navigator.pop(context);
recallCamera();
},
);
return;
}
AbsentSuccessModel absentSuccess = apiResponse.data as AbsentSuccessModel;
Navigator.pushNamedAndRemoveUntil(
context,
Routes.absentSuccess,
(route) => false,
arguments: AbsentSuccessArguments(
absentSuccess: absentSuccess,
profil: widget.profile,
nik: widget.nik,
actionType: widget.actionType,
isIn: false,
shiftName: widget.shiftNameSelected,
shiftEnd: widget.shiftEndTime,
shiftStart: widget.shiftStartTime),
);
});
} }
AbsentSuccessModel absentSuccess = }
apiResponse.data
as AbsentSuccessModel; /** Submit Break, Start and End */
Navigator.pushNamedAndRemoveUntil( if (widget.actionType == 2) {
context, Api.submitBreak(
Routes.absentSuccess, widget.isIn,
(route) => false,
arguments: AbsentSuccessArguments(
absentSuccess: absentSuccess,
profil: widget.profile,
nik: widget.nik,
isIn: true,
shiftName:
widget.shiftNameSelected,
shiftEnd: widget.shiftEndTime,
shiftStart:
widget.shiftStartTime),
);
} else {
Api.shiftOut(
widget.branchModel.id, widget.branchModel.id,
widget.nik, widget.nik,
imageBase64!, imageBase64!,
).then((apiResponse) { ).then((apiResponse) {
// stopTimer();
EasyLoading.dismiss(); EasyLoading.dismiss();
if (apiResponse.error) { if (apiResponse.error) {
// Start modal dialog konfirmasi kalau dia out of range // Start modal dialog konfirmasi kalau dia out of range
if (apiResponse.code == if (apiResponse.code == "DISTANCE_OUT_OF_RANGE") {
"DISTANCE_OUT_OF_RANGE") {
modalDialogGlobal( modalDialogGlobal(
context: context, context: context,
size: MediaQuery.of(context) size: MediaQuery.of(context).size,
.size,
title: "Konfirmasi", title: "Konfirmasi",
contentBody: apiResponse.msg, contentBody: apiResponse.msg,
buttonText: "YA", buttonText: "YA",
tapButtonOk: () async { tapButtonOk: () async {
await EasyLoading.show( await EasyLoading.show(
status: status: Strings.pleaseWait,
Strings.pleaseWait, maskType: EasyLoadingMaskType.none,
maskType:
EasyLoadingMaskType
.none,
); );
ApiResponse apiResponse = ApiResponse apiResponse = await Api.submitBreak(
await Api.shiftOut( widget.isIn,
widget.branchModel.id, widget.branchModel.id,
widget.nik, widget.nik,
imageBase64!, imageBase64!,
...@@ -629,46 +726,34 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -629,46 +726,34 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
if (apiResponse.error) { if (apiResponse.error) {
modalDialogGlobal( modalDialogGlobal(
context: context, context: context,
size: MediaQuery.of( size: MediaQuery.of(context).size,
context)
.size,
title: "Gagal", title: "Gagal",
contentBody: contentBody: apiResponse.msg,
apiResponse.msg,
buttonText: "OK", buttonText: "OK",
tapButtonOk: () { tapButtonOk: () {
Navigator.pop( Navigator.pop(context);
context); Navigator.pop(context);
Navigator.pop(
context);
recallCamera(); recallCamera();
}, },
); );
return; return;
} else { } else {
Navigator.pop(context); Navigator.pop(context);
AbsentSuccessModel AbsentSuccessModel absentSuccess =
absentSuccess = apiResponse.data as AbsentSuccessModel;
apiResponse.data Navigator.pushNamedAndRemoveUntil(
as AbsentSuccessModel;
Navigator
.pushNamedAndRemoveUntil(
context, context,
Routes.absentSuccess, Routes.absentSuccess,
(route) => false, (route) => false,
arguments: AbsentSuccessArguments( arguments: AbsentSuccessArguments(
absentSuccess: absentSuccess: absentSuccess,
absentSuccess, profil: widget.profile,
profil:
widget.profile,
nik: widget.nik, nik: widget.nik,
actionType: widget.actionType,
isIn: false, isIn: false,
shiftName: widget shiftName: widget.shiftNameSelected,
.shiftNameSelected, shiftEnd: widget.shiftEndTime,
shiftEnd: widget shiftStart: widget.shiftStartTime),
.shiftEndTime,
shiftStart: widget
.shiftStartTime),
); );
return; return;
} }
...@@ -676,7 +761,6 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -676,7 +761,6 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
isActiveCancelButton: true, isActiveCancelButton: true,
cancelButtonText: "Tidak", cancelButtonText: "Tidak",
tapButtonCancel: () { tapButtonCancel: () {
// kalau pilih tidak, recall lagi camera suruh foto ulang
Navigator.pop(context); Navigator.pop(context);
recallCamera(); recallCamera();
}, },
...@@ -686,8 +770,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -686,8 +770,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
// END modal dialog konfirmasi kalau dia out of range // END modal dialog konfirmasi kalau dia out of range
modalDialogGlobal( modalDialogGlobal(
context: context, context: context,
size: size: MediaQuery.of(context).size,
MediaQuery.of(context).size,
title: "Gagal", title: "Gagal",
contentBody: apiResponse.msg, contentBody: apiResponse.msg,
buttonText: "OK", buttonText: "OK",
...@@ -698,9 +781,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -698,9 +781,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
); );
return; return;
} }
AbsentSuccessModel absentSuccess = AbsentSuccessModel absentSuccess = apiResponse.data as AbsentSuccessModel;
apiResponse.data
as AbsentSuccessModel;
Navigator.pushNamedAndRemoveUntil( Navigator.pushNamedAndRemoveUntil(
context, context,
Routes.absentSuccess, Routes.absentSuccess,
...@@ -709,12 +790,11 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -709,12 +790,11 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
absentSuccess: absentSuccess, absentSuccess: absentSuccess,
profil: widget.profile, profil: widget.profile,
nik: widget.nik, nik: widget.nik,
actionType: widget.actionType,
isIn: false, isIn: false,
shiftName: shiftName: widget.shiftNameSelected,
widget.shiftNameSelected,
shiftEnd: widget.shiftEndTime, shiftEnd: widget.shiftEndTime,
shiftStart: shiftStart: widget.shiftStartTime),
widget.shiftStartTime),
); );
}); });
} }
...@@ -747,17 +827,14 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -747,17 +827,14 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
await _initializeControllerFuture; await _initializeControllerFuture;
// ambil imagenya // ambil imagenya
XFile image = await _controller! XFile image = await _controller!.takePicture();
.takePicture();
String? imageResultPhone; String? imageResultPhone;
Uint8List? imageResultWeb; Uint8List? imageResultWeb;
if (isPhone) { if (isPhone) {
imageResultPhone = image.path; imageResultPhone = image.path;
imageResultWeb = imageResultWeb = await image.readAsBytes();
await image.readAsBytes();
} else { } else {
imageResultWeb = imageResultWeb = await image.readAsBytes();
await image.readAsBytes();
} }
// kalau gak ke ambil gak ngelakuin aksi apa2 // kalau gak ke ambil gak ngelakuin aksi apa2
...@@ -766,14 +843,12 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -766,14 +843,12 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
pictureIsTaken = true; pictureIsTaken = true;
imagePath = imageResultWeb; imagePath = imageResultWeb;
imagePathPhone = imageResultPhone; imagePathPhone = imageResultPhone;
imageBase64 = imageBase64 = base64Encode(imageResultWeb!);
base64Encode(imageResultWeb!);
}); });
} catch (e) { } catch (e) {
if (debug) { if (debug) {
// ignore: avoid_print // ignore: avoid_print
print( print("TERJADI KESALAHAAN SAAT AMBIL GAMBER, ERROR: $e");
"TERJADI KESALAHAAN SAAT AMBIL GAMBER, ERROR: $e");
} }
} }
}, },
...@@ -781,8 +856,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -781,8 +856,7 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
width: 80, width: 80,
height: 80, height: 80,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: borderRadius: BorderRadius.circular(100),
BorderRadius.circular(100),
border: Border.all( border: Border.all(
width: 1.5, width: 1.5,
color: Colors.black, color: Colors.black,
...@@ -797,33 +871,26 @@ class _AbsentCameraViewState extends State<AbsentCameraView> { ...@@ -797,33 +871,26 @@ class _AbsentCameraViewState extends State<AbsentCameraView> {
GestureDetector( GestureDetector(
onTap: () async { onTap: () async {
if (cameras!.length > 1) { if (cameras!.length > 1) {
_controller _controller?.dispose().then((value) {
?.dispose()
.then((value) {
setState(() {}); setState(() {});
CameraDescription? switchTo; CameraDescription? switchTo;
if (_cameraDescription == if (_cameraDescription == cameras![0]) {
cameras![0]) { _cameraDescription = cameras![1];
_cameraDescription =
cameras![1];
switchTo = cameras![1]; switchTo = cameras![1];
} else { } else {
_cameraDescription = _cameraDescription = cameras![0];
cameras![0];
switchTo = cameras![0]; switchTo = cameras![0];
} }
_controller = CameraController( _controller = CameraController(
switchTo, switchTo,
ResolutionPreset.medium, ResolutionPreset.medium,
imageFormatGroup: imageFormatGroup: ImageFormatGroup.jpeg,
ImageFormatGroup.jpeg,
enableAudio: false, enableAudio: false,
); );
initCamera(_controller!); initCamera(_controller!);
}); });
} else { } else {
EasyLoading.showToast( EasyLoading.showToast("Kamera lain tidak terdeteksi");
"Kamera lain tidak terdeteksi");
} }
}, },
child: Icon( child: Icon(
...@@ -1045,7 +1112,7 @@ class _InfoUserAttendanceState extends State<InfoUserAttendance> { ...@@ -1045,7 +1112,7 @@ class _InfoUserAttendanceState extends State<InfoUserAttendance> {
top: AppMargin.m10, top: AppMargin.m10,
), ),
child: Text( child: Text(
(widget.widget.isIn) ? "Absen Masuk" : "Absen Keluar", getAbsentText(widget.widget.isIn, widget.widget.actionType),
style: getMediumStyle( style: getMediumStyle(
color: Colors.black, color: Colors.black,
fontSize: FontSize.s16, fontSize: FontSize.s16,
......
...@@ -11,11 +11,21 @@ import 'package:ravintola_attendance/resource/size.dart'; ...@@ -11,11 +11,21 @@ import 'package:ravintola_attendance/resource/size.dart';
import 'package:ravintola_attendance/resource/style.dart'; import 'package:ravintola_attendance/resource/style.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
String getAbsentText(bool isIn, int actionType) {
if (actionType == 1) {
return isIn ? "Absen Masuk" : "Absen Keluar";
} else if (actionType == 2) {
return isIn ? "Break Start" : "Break End";
}
return "Unknown";
}
class AbsentSuccessView extends StatelessWidget { class AbsentSuccessView extends StatelessWidget {
const AbsentSuccessView({ const AbsentSuccessView({
super.key, super.key,
required this.absentSuccess, required this.absentSuccess,
required this.isIn, required this.isIn,
required this.actionType,
required this.nik, required this.nik,
required this.profil, required this.profil,
required this.shiftStart, required this.shiftStart,
...@@ -26,6 +36,7 @@ class AbsentSuccessView extends StatelessWidget { ...@@ -26,6 +36,7 @@ class AbsentSuccessView extends StatelessWidget {
final AbsentSuccessModel absentSuccess; final AbsentSuccessModel absentSuccess;
final ProfileModel profil; final ProfileModel profil;
final String nik; final String nik;
final int actionType;
final bool isIn; final bool isIn;
final String shiftStart; final String shiftStart;
final String shiftEnd; final String shiftEnd;
...@@ -37,6 +48,7 @@ class AbsentSuccessView extends StatelessWidget { ...@@ -37,6 +48,7 @@ class AbsentSuccessView extends StatelessWidget {
backgroundColor: ColorManager.backgroundColor, backgroundColor: ColorManager.backgroundColor,
body: ScreenResponsive( body: ScreenResponsive(
widget: BodyWidget( widget: BodyWidget(
actionType: actionType,
isIn: isIn, isIn: isIn,
profil: profil, profil: profil,
nik: nik, nik: nik,
...@@ -54,6 +66,7 @@ class AbsentSuccessView extends StatelessWidget { ...@@ -54,6 +66,7 @@ class AbsentSuccessView extends StatelessWidget {
class BodyWidget extends StatelessWidget { class BodyWidget extends StatelessWidget {
const BodyWidget({ const BodyWidget({
super.key, super.key,
required this.actionType,
required this.isIn, required this.isIn,
required this.profil, required this.profil,
required this.nik, required this.nik,
...@@ -63,6 +76,7 @@ class BodyWidget extends StatelessWidget { ...@@ -63,6 +76,7 @@ class BodyWidget extends StatelessWidget {
required this.shiftName, required this.shiftName,
}); });
final int actionType;
final bool isIn; final bool isIn;
final ProfileModel profil; final ProfileModel profil;
final String nik; final String nik;
...@@ -134,11 +148,7 @@ class BodyWidget extends StatelessWidget { ...@@ -134,11 +148,7 @@ class BodyWidget extends StatelessWidget {
width: double.infinity, width: double.infinity,
child: Center( child: Center(
child: Text( child: Text(
(isIn) getAbsentText(isIn, actionType),
? '''Absen Masuk
Sukses'''
: '''Absen Keluar
Sukses''',
style: getSemiBoldStyle( style: getSemiBoldStyle(
color: Colors.black, color: Colors.black,
fontSize: FontSize.s24, fontSize: FontSize.s24,
......
...@@ -25,8 +25,7 @@ import 'package:flutter/material.dart'; ...@@ -25,8 +25,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
class HomeView extends StatelessWidget { class HomeView extends StatelessWidget {
const HomeView( const HomeView({super.key, required this.nearestBranch, required this.shiftList});
{super.key, required this.nearestBranch, required this.shiftList});
final List<BranchModel> nearestBranch; final List<BranchModel> nearestBranch;
final List<ShiftModel> shiftList; final List<ShiftModel> shiftList;
...@@ -380,6 +379,7 @@ class _BodyWidgetState extends State<BodyWidget> { ...@@ -380,6 +379,7 @@ class _BodyWidgetState extends State<BodyWidget> {
), ),
child: Row( child: Row(
children: [ children: [
/** Clock In */
Expanded( Expanded(
child: CustomButton( child: CustomButton(
text: "Masuk", text: "Masuk",
...@@ -396,8 +396,7 @@ class _BodyWidgetState extends State<BodyWidget> { ...@@ -396,8 +396,7 @@ class _BodyWidgetState extends State<BodyWidget> {
builder: (c) { builder: (c) {
return WidgetSelectShift( return WidgetSelectShift(
shiftList: widget.shiftList, shiftList: widget.shiftList,
branchModel: branchModel: widget.nearestBranch[selectedOutlet],
widget.nearestBranch[selectedOutlet],
nik: nikController.text, nik: nikController.text,
); );
}, },
...@@ -407,24 +406,165 @@ class _BodyWidgetState extends State<BodyWidget> { ...@@ -407,24 +406,165 @@ class _BodyWidgetState extends State<BodyWidget> {
), ),
), ),
SizedBox( SizedBox(
width: AppMargin.m20, width: AppMargin.m4,
), ),
/** Break Start */
Expanded( Expanded(
child: CustomButton( child: CustomButton(
text: "Keluar", text: "Break Start",
onTap: () async { onTap: () async {
if (nikController.text.isEmpty) { if (nikController.text.isEmpty) {
EasyLoading.showToast( EasyLoading.showToast("NIK harus diisi");
"NIK harus diisi", } else {
await EasyLoading.show(
status: Strings.pleaseWait,
maskType: EasyLoadingMaskType.none,
); );
Api.getUserProfile(
widget.nearestBranch[selectedOutlet].id,
nikController.text,
).then((apiResponse) {
print("user profile received response");
EasyLoading.dismiss();
if (apiResponse.error) {
modalDialogGlobal(
context: context,
size: MediaQuery.of(context).size,
title: "Gagal",
contentBody: apiResponse.msg,
buttonText: "Ok",
tapButtonOk: () {
Navigator.pop(context);
});
} else {
ProfileModel profileUser = apiResponse.data as ProfileModel;
if (profileUser.attendanceIn == false) {
print("attendance in false");
modalDialogGlobal(
context: context,
size: MediaQuery.of(context).size,
title: "Gagal",
contentBody: Strings.outButNotIn,
buttonText: "Ok",
tapButtonOk: () {
Navigator.pop(context);
});
return;
}
if (profileUser.attendanceOut) {
/** can user re enter break start again */
}
print("navigating to absent camera");
Navigator.pushNamed(
context,
Routes.absentCamera,
arguments: AbsentCameraArguments(
actionType: 2,
isIn: true,
branchModel: widget.nearestBranch[selectedOutlet],
profile: profileUser,
nik: nikController.text,
shiftNameSelected: profileUser.shiftSelectedName,
shiftStartTime: profileUser.shiftStart,
shiftEndTime: profileUser.shiftEnd,
),
);
}
});
}
},
),
),
SizedBox(
width: AppMargin.m4,
),
/** Break End */
Expanded(
child: CustomButton(
text: "Break End",
onTap: () async {
if (nikController.text.isEmpty) {
EasyLoading.showToast("NIK harus diisi");
} else { } else {
await EasyLoading.show( await EasyLoading.show(
status: Strings.pleaseWait, status: Strings.pleaseWait,
maskType: EasyLoadingMaskType.none, maskType: EasyLoadingMaskType.none,
); );
Api.getUserProfile( Api.getUserProfile(
widget.nearestBranch[selectedOutlet].id, widget.nearestBranch[selectedOutlet].id,
nikController.text) nikController.text,
).then((apiResponse) {
EasyLoading.dismiss();
if (apiResponse.error) {
modalDialogGlobal(
context: context,
size: MediaQuery.of(context).size,
title: "Gagal",
contentBody: apiResponse.msg,
buttonText: "Ok",
tapButtonOk: () {
Navigator.pop(context);
});
} else {
ProfileModel profileUser = apiResponse.data as ProfileModel;
if (profileUser.attendanceIn == false) {
print("attendance in false");
modalDialogGlobal(
context: context,
size: MediaQuery.of(context).size,
title: "Gagal",
contentBody: Strings.outButNotIn,
buttonText: "Ok",
tapButtonOk: () {
Navigator.pop(context);
});
return;
}
/** can user re enter break start again */
if (profileUser.attendanceOut) {}
/** navigate to absent camera */
Navigator.pushNamed(
context,
Routes.absentCamera,
arguments: AbsentCameraArguments(
actionType: 2,
isIn: false,
branchModel: widget.nearestBranch[selectedOutlet],
profile: profileUser,
nik: nikController.text,
shiftNameSelected: profileUser.shiftSelectedName,
shiftStartTime: profileUser.shiftStart,
shiftEndTime: profileUser.shiftEnd,
),
);
}
});
}
},
),
),
SizedBox(
width: AppMargin.m4,
),
/** Clock Out */
Expanded(
child: CustomButton(
text: "Keluar",
onTap: () async {
if (nikController.text.isEmpty) {
EasyLoading.showToast("NIK harus diisi");
} else {
await EasyLoading.show(
status: Strings.pleaseWait,
maskType: EasyLoadingMaskType.none,
);
Api.getUserProfile(widget.nearestBranch[selectedOutlet].id, nikController.text)
.then((apiResponse) { .then((apiResponse) {
EasyLoading.dismiss(); EasyLoading.dismiss();
if (apiResponse.error) { if (apiResponse.error) {
...@@ -438,8 +578,7 @@ class _BodyWidgetState extends State<BodyWidget> { ...@@ -438,8 +578,7 @@ class _BodyWidgetState extends State<BodyWidget> {
Navigator.pop(context); Navigator.pop(context);
}); });
} else { } else {
ProfileModel profileUser = ProfileModel profileUser = apiResponse.data as ProfileModel;
apiResponse.data as ProfileModel;
if (profileUser.attendanceIn == false) { if (profileUser.attendanceIn == false) {
modalDialogGlobal( modalDialogGlobal(
...@@ -467,14 +606,11 @@ class _BodyWidgetState extends State<BodyWidget> { ...@@ -467,14 +606,11 @@ class _BodyWidgetState extends State<BodyWidget> {
Routes.absentCamera, Routes.absentCamera,
arguments: AbsentCameraArguments( arguments: AbsentCameraArguments(
isIn: false, isIn: false,
branchModel: widget branchModel: widget.nearestBranch[selectedOutlet],
.nearestBranch[selectedOutlet],
profile: profileUser, profile: profileUser,
nik: nikController.text, nik: nikController.text,
shiftNameSelected: shiftNameSelected: profileUser.shiftSelectedName,
profileUser.shiftSelectedName, shiftStartTime: profileUser.shiftStart,
shiftStartTime:
profileUser.shiftStart,
shiftEndTime: profileUser.shiftEnd, shiftEndTime: profileUser.shiftEnd,
), ),
); );
...@@ -491,12 +627,10 @@ class _BodyWidgetState extends State<BodyWidget> { ...@@ -491,12 +627,10 @@ class _BodyWidgetState extends State<BodyWidget> {
Routes.absentCamera, Routes.absentCamera,
arguments: AbsentCameraArguments( arguments: AbsentCameraArguments(
isIn: false, isIn: false,
branchModel: branchModel: widget.nearestBranch[selectedOutlet],
widget.nearestBranch[selectedOutlet],
profile: profileUser, profile: profileUser,
nik: nikController.text, nik: nikController.text,
shiftNameSelected: shiftNameSelected: profileUser.shiftSelectedName,
profileUser.shiftSelectedName,
shiftStartTime: profileUser.shiftStart, shiftStartTime: profileUser.shiftStart,
shiftEndTime: profileUser.shiftEnd, shiftEndTime: profileUser.shiftEnd,
), ),
...@@ -796,10 +930,7 @@ class _WidgetSelectOutletState extends State<WidgetSelectOutlet> { ...@@ -796,10 +930,7 @@ class _WidgetSelectOutletState extends State<WidgetSelectOutlet> {
margin: EdgeInsets.only(top: AppMargin.m20), margin: EdgeInsets.only(top: AppMargin.m20),
child: Text( child: Text(
"Pilih Outlet", "Pilih Outlet",
style: getMediumStyle( style: getMediumStyle(color: Colors.black, fontSize: 20, fontFamily: FontConstants.poppins),
color: Colors.black,
fontSize: 20,
fontFamily: FontConstants.poppins),
), ),
), ),
Container( Container(
...@@ -808,10 +939,7 @@ class _WidgetSelectOutletState extends State<WidgetSelectOutlet> { ...@@ -808,10 +939,7 @@ class _WidgetSelectOutletState extends State<WidgetSelectOutlet> {
child: Center( child: Center(
child: Text( child: Text(
"Outlet dalam radius ${ConstantString.outletDistance} Km", "Outlet dalam radius ${ConstantString.outletDistance} Km",
style: getMediumStyle( style: getMediumStyle(color: Colors.black, fontSize: 16, fontFamily: FontConstants.poppins),
color: Colors.black,
fontSize: 16,
fontFamily: FontConstants.poppins),
), ),
), ),
), ),
...@@ -846,8 +974,7 @@ class _WidgetSelectOutletState extends State<WidgetSelectOutlet> { ...@@ -846,8 +974,7 @@ class _WidgetSelectOutletState extends State<WidgetSelectOutlet> {
}); });
}, },
child: Container( child: Container(
margin: margin: const EdgeInsets.symmetric(horizontal: 6, vertical: 3),
const EdgeInsets.symmetric(horizontal: 6, vertical: 3),
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
horizontal: AppPadding.p10, horizontal: AppPadding.p10,
vertical: AppPadding.p14, vertical: AppPadding.p14,
...@@ -870,9 +997,7 @@ class _WidgetSelectOutletState extends State<WidgetSelectOutlet> { ...@@ -870,9 +997,7 @@ class _WidgetSelectOutletState extends State<WidgetSelectOutlet> {
child: Text( child: Text(
widget.nearestBranch[index].name, widget.nearestBranch[index].name,
style: getRegularStyle( style: getRegularStyle(
color: (selectedOutlet == index) color: (selectedOutlet == index) ? ColorManager.link : Colors.black,
? ColorManager.link
: Colors.black,
fontSize: 20, fontSize: 20,
fontFamily: FontConstants.poppins, fontFamily: FontConstants.poppins,
), ),
...@@ -886,9 +1011,7 @@ class _WidgetSelectOutletState extends State<WidgetSelectOutlet> { ...@@ -886,9 +1011,7 @@ class _WidgetSelectOutletState extends State<WidgetSelectOutlet> {
Text( Text(
"${widget.nearestBranch[index].distance} Km", "${widget.nearestBranch[index].distance} Km",
style: getRegularStyle( style: getRegularStyle(
color: (selectedOutlet == index) color: (selectedOutlet == index) ? ColorManager.link : Colors.black,
? ColorManager.link
: Colors.black,
fontSize: 12, fontSize: 12,
fontFamily: FontConstants.poppins, fontFamily: FontConstants.poppins,
), ),
...@@ -1001,10 +1124,7 @@ class _WidgetSelectShiftState extends State<WidgetSelectShift> { ...@@ -1001,10 +1124,7 @@ class _WidgetSelectShiftState extends State<WidgetSelectShift> {
margin: EdgeInsets.only(top: AppMargin.m20), margin: EdgeInsets.only(top: AppMargin.m20),
child: Text( child: Text(
"Pilih Shift", "Pilih Shift",
style: getMediumStyle( style: getMediumStyle(color: Colors.black, fontSize: 20, fontFamily: FontConstants.poppins),
color: Colors.black,
fontSize: 20,
fontFamily: FontConstants.poppins),
), ),
), ),
Container( Container(
...@@ -1064,9 +1184,7 @@ class _WidgetSelectShiftState extends State<WidgetSelectShift> { ...@@ -1064,9 +1184,7 @@ class _WidgetSelectShiftState extends State<WidgetSelectShift> {
child: Text( child: Text(
widget.shiftList[index].name, widget.shiftList[index].name,
style: getRegularStyle( style: getRegularStyle(
color: (selectedShift == index) color: (selectedShift == index) ? ColorManager.link : Colors.black,
? ColorManager.link
: Colors.black,
fontSize: FontSize.s16, fontSize: FontSize.s16,
fontFamily: FontConstants.poppins, fontFamily: FontConstants.poppins,
), ),
...@@ -1080,9 +1198,7 @@ class _WidgetSelectShiftState extends State<WidgetSelectShift> { ...@@ -1080,9 +1198,7 @@ class _WidgetSelectShiftState extends State<WidgetSelectShift> {
Text( Text(
"${DateFormatCustom.getTimeHourMinuteOnly(widget.shiftList[index].startTime)} - ${DateFormatCustom.getTimeHourMinuteOnly(widget.shiftList[index].endTime)}", "${DateFormatCustom.getTimeHourMinuteOnly(widget.shiftList[index].startTime)} - ${DateFormatCustom.getTimeHourMinuteOnly(widget.shiftList[index].endTime)}",
style: getRegularStyle( style: getRegularStyle(
color: (selectedShift == index) color: (selectedShift == index) ? ColorManager.link : Colors.black,
? ColorManager.link
: Colors.black,
fontSize: FontSize.s20, fontSize: FontSize.s20,
fontFamily: FontConstants.openSans, fontFamily: FontConstants.openSans,
), ),
...@@ -1142,12 +1258,9 @@ class _WidgetSelectShiftState extends State<WidgetSelectShift> { ...@@ -1142,12 +1258,9 @@ class _WidgetSelectShiftState extends State<WidgetSelectShift> {
shiftModel: widget.shiftList[selectedShift!], shiftModel: widget.shiftList[selectedShift!],
profile: profileUser, profile: profileUser,
nik: widget.nik, nik: widget.nik,
shiftNameSelected: shiftNameSelected: widget.shiftList[selectedShift!].name,
widget.shiftList[selectedShift!].name, shiftStartTime: widget.shiftList[selectedShift!].startTime,
shiftStartTime: shiftEndTime: widget.shiftList[selectedShift!].endTime,
widget.shiftList[selectedShift!].startTime,
shiftEndTime:
widget.shiftList[selectedShift!].endTime,
), ),
); );
}, },
...@@ -1168,10 +1281,8 @@ class _WidgetSelectShiftState extends State<WidgetSelectShift> { ...@@ -1168,10 +1281,8 @@ class _WidgetSelectShiftState extends State<WidgetSelectShift> {
shiftModel: widget.shiftList[selectedShift!], shiftModel: widget.shiftList[selectedShift!],
profile: profileUser, profile: profileUser,
nik: widget.nik, nik: widget.nik,
shiftNameSelected: shiftNameSelected: widget.shiftList[selectedShift!].name,
widget.shiftList[selectedShift!].name, shiftStartTime: widget.shiftList[selectedShift!].startTime,
shiftStartTime:
widget.shiftList[selectedShift!].startTime,
shiftEndTime: widget.shiftList[selectedShift!].endTime, shiftEndTime: widget.shiftList[selectedShift!].endTime,
), ),
); );
......
...@@ -23,8 +23,7 @@ class RouteGenerator { ...@@ -23,8 +23,7 @@ class RouteGenerator {
static Route<dynamic> getRoute(RouteSettings routeSettings) { static Route<dynamic> getRoute(RouteSettings routeSettings) {
switch (routeSettings.name) { switch (routeSettings.name) {
case Routes.onBoarding: case Routes.onBoarding:
return pageRouteCustom(const OnBoardingView(), return pageRouteCustom(const OnBoardingView(), nameRoute: Routes.onBoarding);
nameRoute: Routes.onBoarding);
case Routes.home: case Routes.home:
HomeArguments args = routeSettings.arguments as HomeArguments; HomeArguments args = routeSettings.arguments as HomeArguments;
return pageRouteCustom( return pageRouteCustom(
...@@ -37,10 +36,11 @@ class RouteGenerator { ...@@ -37,10 +36,11 @@ class RouteGenerator {
); );
case Routes.absentCamera: case Routes.absentCamera:
AbsentCameraArguments args = AbsentCameraArguments args = routeSettings.arguments as AbsentCameraArguments;
routeSettings.arguments as AbsentCameraArguments; print("Generating route for AbsentCamera with isIn: ${args.isIn}, actionType: ${args.actionType}");
return pageRouteCustom( return pageRouteCustom(
AbsentCameraView( AbsentCameraView(
actionType: args.actionType,
isIn: args.isIn, isIn: args.isIn,
branchModel: args.branchModel, branchModel: args.branchModel,
shiftModel: args.shiftModel, shiftModel: args.shiftModel,
...@@ -54,13 +54,13 @@ class RouteGenerator { ...@@ -54,13 +54,13 @@ class RouteGenerator {
routeSettings: routeSettings, routeSettings: routeSettings,
); );
case Routes.absentSuccess: case Routes.absentSuccess:
AbsentSuccessArguments args = AbsentSuccessArguments args = routeSettings.arguments as AbsentSuccessArguments;
routeSettings.arguments as AbsentSuccessArguments;
return pageRouteCustom( return pageRouteCustom(
AbsentSuccessView( AbsentSuccessView(
absentSuccess: args.absentSuccess, absentSuccess: args.absentSuccess,
profil: args.profil, profil: args.profil,
nik: args.nik, nik: args.nik,
actionType: args.actionType,
isIn: args.isIn, isIn: args.isIn,
shiftEnd: args.shiftEnd, shiftEnd: args.shiftEnd,
shiftStart: args.shiftStart, shiftStart: args.shiftStart,
...@@ -70,8 +70,7 @@ class RouteGenerator { ...@@ -70,8 +70,7 @@ class RouteGenerator {
routeSettings: routeSettings, routeSettings: routeSettings,
); );
case Routes.errorWidget: case Routes.errorWidget:
ErrorWidgetArguments args = ErrorWidgetArguments args = routeSettings.arguments as ErrorWidgetArguments;
routeSettings.arguments as ErrorWidgetArguments;
return pageRouteCustom( return pageRouteCustom(
ErrorWidgetView( ErrorWidgetView(
messageError: args.errorMessage, messageError: args.errorMessage,
...@@ -104,10 +103,10 @@ class RouteGenerator { ...@@ -104,10 +103,10 @@ class RouteGenerator {
}) { }) {
// setTitle(title); // setTitle(title);
if (nameRoute == Routes.absentCamera) { if (nameRoute == Routes.absentCamera) {
AbsentCameraArguments args = AbsentCameraArguments args = routeSettings!.arguments as AbsentCameraArguments;
routeSettings!.arguments as AbsentCameraArguments;
return PageRouteBuilder( return PageRouteBuilder(
pageBuilder: (context, a, b) => AbsentCameraView( pageBuilder: (context, a, b) => AbsentCameraView(
actionType: args.actionType,
isIn: args.isIn, isIn: args.isIn,
branchModel: args.branchModel, branchModel: args.branchModel,
shiftModel: args.shiftModel, shiftModel: args.shiftModel,
...@@ -123,8 +122,7 @@ class RouteGenerator { ...@@ -123,8 +122,7 @@ class RouteGenerator {
// name: nameRoute.replaceFirst("/", ""), arguments: args), // name: nameRoute.replaceFirst("/", ""), arguments: args),
); );
} else if (nameRoute == Routes.errorWidget) { } else if (nameRoute == Routes.errorWidget) {
ErrorWidgetArguments args = ErrorWidgetArguments args = routeSettings!.arguments as ErrorWidgetArguments;
routeSettings!.arguments as ErrorWidgetArguments;
return PageRouteBuilder( return PageRouteBuilder(
pageBuilder: (context, a, b) => ErrorWidgetView( pageBuilder: (context, a, b) => ErrorWidgetView(
messageError: args.errorMessage, messageError: args.errorMessage,
...@@ -147,13 +145,13 @@ class RouteGenerator { ...@@ -147,13 +145,13 @@ class RouteGenerator {
// name: nameRoute.replaceFirst("/", ""), arguments: args), // name: nameRoute.replaceFirst("/", ""), arguments: args),
); );
} else if (nameRoute == Routes.absentSuccess) { } else if (nameRoute == Routes.absentSuccess) {
AbsentSuccessArguments args = AbsentSuccessArguments args = routeSettings!.arguments as AbsentSuccessArguments;
routeSettings!.arguments as AbsentSuccessArguments;
return PageRouteBuilder( return PageRouteBuilder(
pageBuilder: (context, a, b) => AbsentSuccessView( pageBuilder: (context, a, b) => AbsentSuccessView(
absentSuccess: args.absentSuccess, absentSuccess: args.absentSuccess,
profil: args.profil, profil: args.profil,
nik: args.nik, nik: args.nik,
actionType: args.actionType,
isIn: args.isIn, isIn: args.isIn,
shiftEnd: args.shiftEnd, shiftEnd: args.shiftEnd,
shiftStart: args.shiftStart, shiftStart: args.shiftStart,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment