@ -1,13 +1,10 @@
import ' package:car_provider_app/config/provider_routes.dart ' ;
import ' package:car_provider_app/views/appoinments/widget/sheets.dart ' ;
import ' package:car_provider_app/views/dashboard/widget/general_appointment_widget.dart ' ;
import ' package:flutter/cupertino.dart ' ;
import ' package:flutter/material.dart ' ;
import ' package:mc_common_app/classes/app_state.dart ' ;
import ' package:mc_common_app/config/dependency_injection.dart ' ;
import ' package:mc_common_app/config/routes.dart ' ;
import ' package:mc_common_app/extensions/int_extensions.dart ' ;
import ' package:mc_common_app/extensions/string_extensions.dart ' ;
import ' package:mc_common_app/generated/locale_keys.g.dart ' ;
import ' package:mc_common_app/models/appointments_models/appointment_list_model.dart ' ;
import ' package:mc_common_app/theme/colors.dart ' ;
@ -22,10 +19,15 @@ import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import ' package:provider/provider.dart ' ;
import ' package:easy_localization/easy_localization.dart ' ;
class UpdateAppointmentPage extends State less Widget {
late AppointmentListModel appointmentListModel ;
class UpdateAppointmentPage extends State fu lWidget {
const UpdateAppointmentPage ( { super . key } ) ;
UpdateAppointmentPage ( { Key ? key } ) : super ( key: key ) ;
@ override
State < UpdateAppointmentPage > createState ( ) = > _UpdateAppointmentPageState ( ) ;
}
class _UpdateAppointmentPageState extends State < UpdateAppointmentPage > {
late AppointmentListModel appointmentListModel ;
@ override
Widget build ( BuildContext context ) {
@ -39,144 +41,157 @@ class UpdateAppointmentPage extends StatelessWidget {
if ( appointmentsVM . state = = ViewState . busy ) {
return const Center ( child: CircularProgressIndicator ( ) ) ;
} else {
return Column (
children: [
Expanded (
child: ListView (
padding: const EdgeInsets . all ( 21 ) ,
children: [
GeneralAppointmentWidget (
appointmentListModel: appointmentListModel ,
isNeedTotalPayment: true ,
isNeedToShowItems: true ,
isNeedToShowToMoreText: false ,
onTap: ( ) { } ,
) ,
21. height ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . confirmed | |
appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . arrived | |
appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . workStarted ) . . . [
ShowFillButton (
title: ( " + ${ LocaleKeys . addNewService . tr ( ) } " ) ,
txtColor: MyColors . darkPrimaryColor ,
isFilled: false ,
onPressed: ( ) {
navigateWithName (
context ,
AppRoutes . addServiceInAppointment ,
arguments: appointmentListModel ,
) ;
} ,
return RefreshIndicator (
onRefresh: ( ) async = > _updateAppointment ( context , appointmentListModel . branchId ? ? 0 ) ,
child: Column (
children: [
Expanded (
child: ListView (
padding: const EdgeInsets . all ( 21 ) ,
children: [
GeneralAppointmentWidget (
appointmentListModel: appointmentListModel ,
isNeedTotalPayment: true ,
isNeedToShowItems: true ,
isNeedToShowToMoreText: false ,
isFromUpdateAppointmentPage: true ,
onTap: ( ) { } ,
) ,
21. height ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . confirmed | |
appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . arrived | |
appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . workStarted ) . . . [
ShowFillButton (
title: ( " + ${ LocaleKeys . addNewService . tr ( ) } " ) ,
txtColor: MyColors . darkPrimaryColor ,
isFilled: false ,
onPressed: ( ) {
navigateWithName (
context ,
AppRoutes . addServiceInAppointment ,
arguments: appointmentListModel ,
) ;
} ,
) ,
] ,
] ,
] ,
) ,
) ,
) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . cancelled ) . . . [
Utils . buildStatusContainer ( LocaleKeys . appointmentCancelled . tr ( ) ) . paddingAll ( 10 ) ,
] ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . booked )
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
Expanded ( child: showPayNowButton ( context , appointmentsVM ) ) ,
12. width ,
Expanded ( child: showCancelButton ( context , appointmentsVM ) ) ,
] ,
) . paddingAll ( 21 ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . cancelled ) . . . [
Utils . buildStatusContainer ( LocaleKeys . appointmentCancelled . tr ( ) ) . paddingAll ( 10 ) ,
] ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . booked )
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
Expanded ( child: showPayNowButton ( context , appointmentsVM , color: MyColors . greenColor ) ) ,
12. width ,
Expanded ( child: showCancelButton ( context , appointmentsVM ) ) ,
] ,
) . paddingAll ( 21 ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . confirmed & &
( appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payPartial | |
appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . defaultStatus ) )
Column (
children: [
Row (
children: [
Expanded ( child: showArrivedButton ( context , appointmentsVM ) ) ,
12. width ,
Expanded ( child: showCancelButton ( context , appointmentsVM ) ) ,
] ,
) ,
] ,
) . paddingAll ( 21 ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . confirmed & &
( appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payPartial | | appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . defaultStatus ) )
Column (
children: [
showArrivedButton ( context , appointmentsVM ) ,
] ,
) . paddingAll ( 21 ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . arrived & &
( appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payPartial | |
appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . defaultStatus ) )
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
Expanded ( child: showPayNowButton ( context , appointmentsVM ) ) ,
12. width ,
Expanded ( child: showPayLaterButton ( context , appointmentsVM ) ) ,
] ,
) . paddingAll ( 21 ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . arrived & &
( appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payPartial | | appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . defaultStatus ) )
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
Expanded ( child: showPayNowButton ( context , appointmentsVM ) ) ,
12. width ,
Expanded ( child: showPayLaterButton ( context , appointmentsVM ) ) ,
] ,
) . paddingAll ( 21 ) ,
if ( ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . arrived | | appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . workStarted ) & &
appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payNow )
Utils . buildStatusContainer ( LocaleKeys . waitingPaymentfromtheCustomer . tr ( ) ) . paddingAll ( 10 ) ,
if ( ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . arrived | | appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . workStarted ) & &
appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payNow )
Utils . buildStatusContainer ( LocaleKeys . waitingPaymentfromtheCustomer . tr ( ) ) . paddingAll ( 10 ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . arrived & &
( appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . paid | |
appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payLater ) )
Column (
children: [
showWorkStartButton ( context , appointmentsVM ) ,
] ,
) . paddingAll ( 21 ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . arrived & &
( appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . paid | | appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payLater ) )
Column (
children: [
showWorkStartButton ( context , appointmentsVM ) ,
] ,
) . paddingAll ( 21 ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . workStarted & & appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payPartial )
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
Expanded ( child: showPayNowButton ( context , appointmentsVM ) ) ,
12. width ,
Expanded ( child: showPayLaterButton ( context , appointmentsVM ) ) ,
] ,
) . paddingAll ( 21 ) ,
/ / " Show Pay Now " . toText ( ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . workStarted & & appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payPartial )
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
Expanded ( child: showPayNowButton ( context , appointmentsVM ) ) ,
12. width ,
Expanded ( child: showPayLaterButton ( context , appointmentsVM ) ) ,
] ,
) . paddingAll ( 21 ) ,
/ / " Show Pay Now " . toText ( ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . workStarted & & appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . paid )
Column (
children: [
showCompleteButton ( context , appointmentsVM ) ,
] ,
) . paddingAll ( 21 ) ,
/ / " Show Complete Button " . toText ( ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . workStarted & & appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payLater )
showPayNowButton ( context , appointmentsVM ) . paddingAll ( 21 ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . workStarted & & appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . paid )
Column (
children: [
showCompleteButton ( context , appointmentsVM ) ,
] ,
) . paddingAll ( 21 ) ,
/ / " Show Complete Button " . toText ( ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . workStarted & & appointmentListModel . appointmentPaymentStatusEnum = = AppointmentPaymentStatusEnum . payLater )
showPayNowButton ( context , appointmentsVM ) . paddingAll ( 21 ) ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . visitCompleted ) . . . [
Utils . buildStatusContainer ( LocaleKeys . appointmentisCompleted . tr ( ) ) . paddingAll ( 10 ) ,
] ,
if ( appointmentListModel . appointmentStatusEnum = = AppointmentStatusEnum . visitCompleted ) . . . [
Utils . buildStatusContainer ( LocaleKeys . appointmentisCompleted . tr ( ) ) . paddingAll ( 10 ) ,
/ / TODO: THIS NEEDS TO BE CHECKED . IMPORTANT
/ / Padding (
/ / padding: const EdgeInsets . all ( 21.0 ) ,
/ / child: Column (
/ / children: [
/ / ShowFillButton (
/ / title: " Confirm Arrive " ,
/ / maxWidth: double . infinity ,
/ / onPressed: ( ) {
/ / showMyBottomSheet (
/ / context ,
/ / child: ShowCollectPaymentSheet (
/ / onClickYes: ( ) { } ,
/ / onClickNo: ( ) { } ,
/ / ) ,
/ / ) ;
/ / } ,
/ / ) ,
/ / 12. height ,
/ / ShowFillButton (
/ / title: " Cancel Appointment " ,
/ / maxWidth: double . infinity ,
/ / isFilled: false ,
/ / txtColor: MyColors . redColor ,
/ / borderColor: MyColors . redColor ,
/ / onPressed: ( ) {
/ / showMyBottomSheet ( context ,
/ / child: CancelAppointmentReasonSheet (
/ / onCancelClick: ( String reason ) { } ,
/ / ) ) ;
/ / } ,
/ / ) ,
/ / ] ,
/ / ) ,
/ / ) ,
] ,
/ / TODO: THIS NEEDS TO BE CHECKED . IMPORTANT
/ / Padding (
/ / padding: const EdgeInsets . all ( 21.0 ) ,
/ / child: Column (
/ / children: [
/ / ShowFillButton (
/ / title: " Confirm Arrive " ,
/ / maxWidth: double . infinity ,
/ / onPressed: ( ) {
/ / showMyBottomSheet (
/ / context ,
/ / child: ShowCollectPaymentSheet (
/ / onClickYes: ( ) { } ,
/ / onClickNo: ( ) { } ,
/ / ) ,
/ / ) ;
/ / } ,
/ / ) ,
/ / 12. height ,
/ / ShowFillButton (
/ / title: " Cancel Appointment " ,
/ / maxWidth: double . infinity ,
/ / isFilled: false ,
/ / txtColor: MyColors . redColor ,
/ / borderColor: MyColors . redColor ,
/ / onPressed: ( ) {
/ / showMyBottomSheet ( context ,
/ / child: CancelAppointmentReasonSheet (
/ / onCancelClick: ( String reason ) { } ,
/ / ) ) ;
/ / } ,
/ / ) ,
/ / ] ,
/ / ) ,
/ / ) ,
] ,
) ,
) ;
}
} ) ) ,
@ -189,9 +204,14 @@ class UpdateAppointmentPage extends StatelessWidget {
maxWidth: double . infinity ,
onPressed: ( ) async {
Utils . showLoading ( context ) ;
await appointmentsVM . updateAppointmentStatus ( appointmentId: appointmentListModel . id ! , appointmentStatusEnum: AppointmentStatusEnum . workStarted ) ;
bool status = await appointmentsVM . updateAppointmentStatus ( appointmentId: appointmentListModel . id ! , appointmentStatusEnum: AppointmentStatusEnum . workStarted ) ;
if ( status ) {
_updateAppointment ( context , appointmentListModel . branchId ? ? 0 ) ;
}
Utils . hideLoading ( context ) ;
pop ( context ) ;
/ / pop ( context ) ;
/ / showMyBottomSheet (
/ / context ,
@ -204,14 +224,17 @@ class UpdateAppointmentPage extends StatelessWidget {
) ;
}
Widget showPayNowButton ( BuildContext context , AppointmentsVM appointmentsVM ) {
Widget showPayNowButton ( BuildContext context , AppointmentsVM appointmentsVM , { Color ? color } ) {
return ShowFillButton (
title: LocaleKeys . payNow . tr ( ) ,
maxWidth: double . infinity ,
backgroundColor: color ? ? MyColors . darkPrimaryColor ,
onPressed: ( ) async {
Utils . showLoading ( context ) ;
await appointmentsVM . updateAppointmentPaymentStatus ( { " appointmentID " : appointmentListModel . id . toString ( ) , " appointmentServicePaymentStatusID " : 2 } ) ;
_updateAppointment ( context , appointmentListModel . branchId ? ? 0 ) ;
bool status = await appointmentsVM . updateAppointmentPaymentStatus ( { " appointmentID " : appointmentListModel . id . toString ( ) , " appointmentServicePaymentStatusID " : 2 } ) ;
if ( status ) {
_updateAppointment ( context , appointmentListModel . branchId ? ? 0 ) ;
}
Utils . hideLoading ( context ) ;
pop ( context ) ;
} ,
@ -222,10 +245,14 @@ class UpdateAppointmentPage extends StatelessWidget {
return ShowFillButton (
title: LocaleKeys . arrived . tr ( ) ,
maxWidth: double . infinity ,
txtColor: MyColors . white ,
backgroundColor: MyColors . greenColor ,
onPressed: ( ) async {
Utils . showLoading ( context ) ;
await appointmentsVM . updateAppointmentStatus ( appointmentId: appointmentListModel . id ! , appointmentStatusEnum: AppointmentStatusEnum . arrived ) ;
_updateAppointment ( context , appointmentListModel . branchId ? ? 0 ) ;
bool status = await appointmentsVM . updateAppointmentStatus ( appointmentId: appointmentListModel . id ! , appointmentStatusEnum: AppointmentStatusEnum . arrived ) ;
if ( status ) {
_updateAppointment ( context , appointmentListModel . branchId ? ? 0 ) ;
}
Utils . hideLoading ( context ) ;
pop ( context ) ;
} ,
@ -260,19 +287,25 @@ class UpdateAppointmentPage extends StatelessWidget {
) ;
}
Widget showCancelButton ( BuildContext c ontext, AppointmentsVM appointmentsVM ) {
Widget showCancelButton ( BuildContext pC ontext, AppointmentsVM appointmentsVM ) {
return ShowFillButton (
title: LocaleKeys . cancel . tr ( ) ,
maxWidth: double . infinity ,
isFilled: false ,
txtColor: MyColors . redColor ,
borderColor: MyColors . redColor ,
txtColor: MyColors . white ,
backgroundColor: MyColors . redColor ,
onPressed: ( ) {
showMyBottomSheet (
context ,
child: ShowCollectPaymentSheet (
onClickYes: ( ) { } ,
onClickNo: ( ) { } ,
showModalBottomSheet (
context: pContext ,
isScrollControlled: true ,
builder: ( context ) = > CancelAppointmentReasonSheet (
onCancelClick: ( String reason ) async {
pop ( context ) ;
await appointmentsVM . onCancelAppointmentPressed ( context: pContext , appointmentListModel: appointmentListModel ) . whenComplete ( ( ) async {
await _updateAppointment ( pContext , appointmentListModel . branchId ? ? 0 ) ;
pop ( pContext ) ;
pop ( pContext ) ;
} ) ;
} ,
) ,
) ;
} ,