minor fixes

aamir_dev
Faiz Hashmi 1 year ago
parent af3d63a80f
commit 0fdb9b4acc

@ -269,11 +269,6 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
} }
Future<void> _updateAppointment(BuildContext context, int branchId) async { Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getMyAppointmentsForProvider( await context.read<AppointmentsVM>().getMyAppointmentsForProvider(branchID: branchId);
{
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
},
);
} }
} }

@ -26,45 +26,37 @@ import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
class AppointmentPage extends StatefulWidget { class AppointmentPage extends StatefulWidget {
BranchDetailModel branch; final BranchDetailModel branch;
AppointmentPage({ const AppointmentPage({required this.branch, super.key});
required this.branch,
Key? key,
}) : super(key: key);
@override @override
State<AppointmentPage> createState() => _AppointmentPageState(); State<AppointmentPage> createState() => _AppointmentPageState();
} }
class _AppointmentPageState extends State<AppointmentPage> { class _AppointmentPageState extends State<AppointmentPage> {
String date = ""; late AppointmentsVM appointmentsVM;
GlobalKey<RefreshIndicatorState> refreshIndicatorKey = GlobalKey<RefreshIndicatorState>(); GlobalKey<RefreshIndicatorState> refreshIndicatorKey = GlobalKey<RefreshIndicatorState>();
Future<void> _pullRefresh(BuildContext context) async { Future<void> _pullRefresh(BuildContext context) async {
await context.read<AppointmentsVM>().getAppointmentSlotsInfo( await appointmentsVM.getAppointmentSlotsInfo(
context: context, context: context,
map: {"ProviderBranchID": widget.branch.id.toString(), "FromDate": date, "ToDate": date}, branchID: widget.branch.id!,
isNeedToRebuild: true, isNeedToRebuild: true,
); );
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({ await appointmentsVM.getAppointmentsBasedOnFiltersForProviders(branchID: widget.branch.id!);
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": widget.branch.id.toString(),
"FromDate": date,
"DateTo": date,
});
} }
@override @override
void initState() { void initState() {
// TODO: implement initState
super.initState(); super.initState();
appointmentsVM = context.read<AppointmentsVM>();
appointmentsVM.selectedBranchIdForAppointments = widget.branch.id!;
scheduleMicrotask(() { scheduleMicrotask(() {
date = DateHelper.formatAsYearMonthDay(DateTime.now()); appointmentsVM.selectedDateForAppointments = DateHelper.formatAsYearMonthDay(DateTime.now());
context.read<AppointmentsVM>().populateAppointmentsFilterList(); appointmentsVM.populateAppointmentsFilterList();
_pullRefresh(context); _pullRefresh(context);
context.read<AppointmentsVM>().selectedBranch = widget.branch.id ?? 0;
}); });
} }
@ -74,6 +66,23 @@ class _AppointmentPageState extends State<AppointmentPage> {
appBar: CustomAppBar( appBar: CustomAppBar(
//profileImageUrl: MyAssets.carBanner, //profileImageUrl: MyAssets.carBanner,
title: widget.branch.branchName, title: widget.branch.branchName,
actions: [
Consumer(builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
return Padding(
padding: EdgeInsets.only(top: appointmentsVM.appointmentFiltersCounter > 0 ? 20 : 0, right: 21),
child: Badge(
isLabelVisible: appointmentsVM.appointmentFiltersCounter > 0,
largeSize: 15,
smallSize: 20,
backgroundColor: MyColors.darkPrimaryColor,
label: Text('${appointmentsVM.appointmentFiltersCounter}'),
child: MyAssets.searchIcon.buildSvg(),
),
).onPress(() {
navigateWithName(context, AppRoutes.appoinmentSearchFilterPage);
});
}),
],
), ),
body: SizedBox( body: SizedBox(
width: double.infinity, width: double.infinity,
@ -113,7 +122,7 @@ class _AppointmentPageState extends State<AppointmentPage> {
appointmentListModel: appointmentsVM.myFilteredAppointments2[index], appointmentListModel: appointmentsVM.myFilteredAppointments2[index],
isNeedTotalPayment: false, isNeedTotalPayment: false,
onTap: () { onTap: () {
context.read<AppointmentsVM>().selectedAppointmentIndex = index; appointmentsVM.selectedAppointmentIndex = index;
navigateWithName( navigateWithName(
context, context,
AppRoutes.appointmentDetailList, AppRoutes.appointmentDetailList,
@ -124,9 +133,7 @@ class _AppointmentPageState extends State<AppointmentPage> {
}, },
); );
}, },
separatorBuilder: (context, snapchat) { separatorBuilder: (context, snapchat) => 21.height,
return 21.height;
},
itemCount: appointmentsVM.myFilteredAppointments2.length, itemCount: appointmentsVM.myFilteredAppointments2.length,
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
@ -160,7 +167,7 @@ class _AppointmentPageState extends State<AppointmentPage> {
), ),
Row( Row(
children: [ children: [
date.toText( appointmentsVM.selectedDateForAppointments.toText(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
const Icon( const Icon(
@ -178,12 +185,12 @@ class _AppointmentPageState extends State<AppointmentPage> {
), ),
) )
.onPress(() async { .onPress(() async {
date = await Utils.pickDateFromDatePicker( String date = await Utils.pickDateFromDatePicker(
context, context,
firstDate: null, firstDate: null,
); );
appointmentsVM.selectedDateForAppointments = date;
_pullRefresh(context); _pullRefresh(context);
// context.read<AppointmentsVM>().notifyListeners();
}), }),
], ],
), ),

@ -111,9 +111,6 @@ class MergeAppointmentListPage extends StatelessWidget {
} }
Future<void> _updateAppointment(BuildContext context, int branchId) async { Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({ await context.read<AppointmentsVM>().getMyAppointmentsForProvider(branchID: branchId);
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
});
} }
} }

@ -313,9 +313,6 @@ class _UpdateAppointmentPageState extends State<UpdateAppointmentPage> {
} }
Future<void> _updateAppointment(BuildContext context, int branchId) async { Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({ await context.read<AppointmentsVM>().getMyAppointmentsForProvider(branchID: branchId);
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
});
} }
} }

@ -134,8 +134,11 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
value: isServiceActive, value: isServiceActive,
onChanged: (value) async { onChanged: (value) async {
if (isEditDisabled) return; if (isEditDisabled) return;
bool status = await updateServiceStatus(context, value);
isServiceActive = await updateServiceStatus(context, value); if (status) {
isServiceActive = value;
}
setState(() {}); setState(() {});
}, },
), ),
@ -385,12 +388,11 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
if (list.isEmpty) { if (list.isEmpty) {
bool status = await serviceVM.updateServiceStatus( bool status = await serviceVM.updateServiceStatus(
context: context, context: context,
serviceStatusEnum: ServiceStatusEnum.deactivated, serviceStatusEnum: value ? ServiceStatusEnum.approvedOrActive : ServiceStatusEnum.deactivated,
branchId: int.parse(widget.branchModel!.branchId), branchId: int.parse(widget.branchModel!.branchId),
providerServiceIds: providerServiceIds, providerServiceIds: providerServiceIds,
); );
return status;
return !status;
} else { } else {
serviceVM.buildDealNotCompletedBottomSheetOptions( serviceVM.buildDealNotCompletedBottomSheetOptions(
mainContext: context, mainContext: context,

@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:developer'; import 'dart:developer';
import 'package:car_provider_app/views/branch_management/services/duplication/sheet/approved_branches_list_sheet.dart'; import 'package:car_provider_app/views/branch_management/services/duplication/sheet/approved_branches_list_sheet.dart';
@ -38,6 +39,8 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
super.initState(); super.initState();
serviceVM = Provider.of<ServiceVM>(context, listen: false); serviceVM = Provider.of<ServiceVM>(context, listen: false);
getMatchedServices(); getMatchedServices();
serviceVM.isAllSelected = false;
setState(() {});
} }
getMatchedServices() { getMatchedServices() {
@ -60,40 +63,44 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
child: Column( child: Column(
children: [ children: [
12.height, 12.height,
DropDownText( DropDownText(title: widget.matchServicesArguments!.oldBranchName, showDropDownIcon: false),
title: widget.matchServicesArguments!.oldBranchName, // 12.height,
showDropDownIcon: false, // Consumer(
), // builder: (BuildContext context, ServiceVM serviceVM, Widget? child) {
12.height, // if (serviceVM.matchedServices == null || serviceVM.matchedServices!.isEmpty) {
GestureDetector( // return const SizedBox();
onTap: () { // }
bool newValue = !context.read<ServiceVM>().isAllSelected; // return GestureDetector(
serviceVM.selectAllServices(newValue); // onTap: () {
}, // bool newValue = !context.read<ServiceVM>().isAllSelected;
child: Row( // serviceVM.selectAllServices(newValue);
mainAxisAlignment: MainAxisAlignment.end, // },
children: [ // child: Row(
SizedBox( // mainAxisAlignment: MainAxisAlignment.end,
height: 30, // children: [
width: 30, // SizedBox(
child: Checkbox( // height: 30,
value: context.watch<ServiceVM>().isAllSelected, // width: 30,
onChanged: (v) { // child: Checkbox(
serviceVM.selectAllServices(v ?? false); // value: context.watch<ServiceVM>().isAllSelected,
}, // onChanged: (v) {
), // serviceVM.selectAllServices(v ?? false);
), // },
LocaleKeys.selectAll.tr().toText(fontSize: 14), // ),
], // ),
), // LocaleKeys.selectAll.tr().toText(fontSize: 14),
), // ],
// ),
// );
// },
// ),
12.height, 12.height,
Expanded( Expanded(
child: Consumer<ServiceVM>(builder: (context, ServiceVM serviceVM, _) { child: Consumer<ServiceVM>(builder: (context, ServiceVM serviceVM, _) {
if (serviceVM.matchedServices == null) { if (serviceVM.matchedServices == null) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else if (serviceVM.matchedServices!.isEmpty) { } else if (serviceVM.matchedServices!.isEmpty) {
return EmptyWidget(text: LocaleKeys.noServicesAvailable.tr(), isWrappedColumn: false); return EmptyWidget(text: LocaleKeys.noServicesAvailableToCopy.tr(), isWrappedColumn: false);
} }
return ListView.separated( return ListView.separated(
itemBuilder: (context, index) { itemBuilder: (context, index) {
@ -101,17 +108,35 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Checkbox( Builder(builder: (context) {
value: serviceVM.matchedServices![index].isExpandedOrSelected, int lengthSelected = serviceVM.matchedServices![index].serviceItems!.where((c) => c.isUpdateOrSelected == true).length;
onChanged: (v) { int totalLength = serviceVM.matchedServices![index].serviceItems!.length;
if (serviceVM.matchedServices![index].serviceItems!.isEmpty) { if (lengthSelected == 0 || lengthSelected < totalLength) {
Utils.showToast(LocaleKeys.noAvailableItems.tr()); serviceVM.matchedServices![index].isExpandedOrSelected = false;
} else { serviceVM.isAllSelected = false;
serviceVM.matchedServices![index].isExpandedOrSelected = v ?? false; }
serviceVM.updateServiceItem(index, serviceVM.matchedServices![index].isExpandedOrSelected);
} return Checkbox(
}, value: lengthSelected == totalLength ? true : serviceVM.matchedServices![index].isExpandedOrSelected,
), onChanged: (v) {
if (serviceVM.matchedServices![index].serviceItems!.isEmpty) {
Utils.showToast(LocaleKeys.noAvailableItems.tr());
} else {
serviceVM.matchedServices![index].isExpandedOrSelected = v ?? false;
serviceVM.updateServiceItem(index, serviceVM.matchedServices![index].isExpandedOrSelected);
bool isAllChecked = true;
for (var service in serviceVM.matchedServices!) {
if (service.isExpandedOrSelected == false) {
isAllChecked = false;
break;
}
}
serviceVM.isAllSelected = isAllChecked;
setState(() {});
}
},
);
}),
Expanded( Expanded(
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
@ -120,7 +145,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
serviceVM.matchedServices![index].serviceDescription.toString().toText(fontSize: 16, isBold: true), serviceVM.matchedServices![index].serviceDescription.toString().toText(fontSize: 16, isBold: true),
"${serviceVM.matchedServices![index].serviceItems!.where((c) => c.isUpdateOrSelected == true).length} items selected out of ${serviceVM.matchedServices![index].serviceItems!.length}" "${serviceVM.matchedServices![index].serviceItems!.where((c) => c.isUpdateOrSelected == true).length} items selected out of ${serviceVM.matchedServices![index].serviceItems!.length}"
.toText(color: MyColors.lightTextColor), .toText(color: MyColors.lightTextColor),
LocaleKeys.tapToSeeItems.toText(color: MyColors.lightTextColor), LocaleKeys.tapToSeeItems.tr().toText(color: MyColors.lightTextColor),
], ],
), ),
), ),
@ -129,6 +154,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
() { () {
showMyBottomSheet( showMyBottomSheet(
context, context,
isDismissible: false,
child: ItemsSelectionSheet( child: ItemsSelectionSheet(
serviceVM.matchedServices![index].serviceItems ?? [], serviceVM.matchedServices![index].serviceItems ?? [],
onItemCopied: (List<ItemData> selected) { onItemCopied: (List<ItemData> selected) {

@ -3,7 +3,6 @@ import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_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/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/services_models/item_model.dart'; import 'package:mc_common_app/models/services_models/item_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/checkbox_with_title_desc.dart'; import 'package:mc_common_app/widgets/checkbox_with_title_desc.dart';
@ -30,8 +29,20 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
tempItems = widget.serviceItems.map((item) => ItemData.fromJson(item.toJson())).toList(); tempItems = List.from(widget.serviceItems);
setState(() {});
filteredItems = List.from(tempItems!); // Initially show all items filteredItems = List.from(tempItems!); // Initially show all items
bool isAllChecked = true;
for (var item in filteredItems!) {
if (item.isUpdateOrSelected == false) {
isAllChecked = false;
break;
}
}
isAllItemsSelected = isAllChecked;
} }
// Method to filter items based on search query // Method to filter items based on search query
@ -56,6 +67,15 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
updateTempItem(int index, bool value) { updateTempItem(int index, bool value) {
filteredItems![index].isUpdateOrSelected = value; filteredItems![index].isUpdateOrSelected = value;
bool isAllChecked = true;
for (var item in filteredItems!) {
if (item.isUpdateOrSelected == false) {
isAllChecked = false;
break;
}
}
isAllItemsSelected = isAllChecked;
setState(() {}); setState(() {});
} }
@ -78,29 +98,23 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
}, },
), ),
6.height, 6.height,
GestureDetector( Row(
onTap: () { mainAxisAlignment: MainAxisAlignment.end,
isAllItemsSelected = false; children: [
selectAllTempItems(false); SizedBox(
}, height: 30,
child: Row( width: 30,
mainAxisAlignment: MainAxisAlignment.end, child: Checkbox(
children: [ value: isAllItemsSelected,
SizedBox( onChanged: (v) {
height: 30, if (v == null) return;
width: 30, isAllItemsSelected = v;
child: Checkbox( selectAllTempItems(v);
value: isAllItemsSelected, },
onChanged: (v) {
if (v == null) return;
isAllItemsSelected = v;
selectAllTempItems(v);
},
),
), ),
LocaleKeys.selectAll.tr().toText(fontSize: 14), ),
], LocaleKeys.selectAll.tr().toText(fontSize: 14),
), ],
), ),
Flexible( Flexible(
child: ListView.separated( child: ListView.separated(
@ -124,7 +138,7 @@ class _ItemsSelectionSheetState extends State<ItemsSelectionSheet> {
), ),
12.height, 12.height,
ShowFillButton( ShowFillButton(
title: "Copy Selected Item", title: LocaleKeys.done.tr(),
maxWidth: double.infinity, maxWidth: double.infinity,
onPressed: () { onPressed: () {
widget.onItemCopied(filteredItems ?? []); widget.onItemCopied(filteredItems ?? []);

@ -77,7 +77,9 @@ class _ServicesListPageState extends State<ServicesListPage> {
context.read<ServiceVM>().applyFilterOnBranchServices(serviceStatusEnum: status); context.read<ServiceVM>().applyFilterOnBranchServices(serviceStatusEnum: status);
filteredServices = categoryData.services!.where((i) => i.serviceStatusEnum == status).toList(); filteredServices = categoryData.services!.where((i) => i.serviceStatusEnum == status).toList();
int index = categoryData.services!.indexWhere((i) => i.serviceStatusEnum != ServiceStatusEnum.deactivated); int index = categoryData.services!.indexWhere((i) => i.serviceStatusEnum != ServiceStatusEnum.deactivated);
if (index != -1) { if (index == -1) {
isCategoryActive = false;
} else {
isCategoryActive = true; isCategoryActive = true;
} }
screenState = ViewState.idle; screenState = ViewState.idle;
@ -93,20 +95,17 @@ class _ServicesListPageState extends State<ServicesListPage> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Expanded( Padding(
flex: 1, padding: const EdgeInsets.only(top: 5),
child: Padding( child: SvgPicture.asset(
padding: const EdgeInsets.only(top: 5), MyAssets.maintenanceIcon,
child: SvgPicture.asset( width: 14,
MyAssets.maintenanceIcon, height: 14,
width: 14,
height: 14,
),
), ),
), ),
8.width, 8.width,
Expanded( Expanded(
flex: 20, flex: 10,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,

@ -24,23 +24,6 @@ class BranchAppointmentFragment extends StatelessWidget {
appBar: CustomAppBar( appBar: CustomAppBar(
title: LocaleKeys.selectBranch.tr(), title: LocaleKeys.selectBranch.tr(),
isRemoveBackButton: true, isRemoveBackButton: true,
actions: [
Consumer(builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
return Padding(
padding: EdgeInsets.only(top: appointmentsVM.appointmentFiltersCounter > 0 ? 20 : 0, right: 21),
child: Badge(
isLabelVisible: appointmentsVM.appointmentFiltersCounter > 0,
largeSize: 15,
smallSize: 20,
backgroundColor: MyColors.darkPrimaryColor,
label: Text('${appointmentsVM.appointmentFiltersCounter}'),
child: MyAssets.searchIcon.buildSvg(),
),
).onPress(() {
navigateWithName(context, AppRoutes.appoinmentSearchFilterPage);
});
}),
],
), ),
body: SizedBox( body: SizedBox(
width: double.infinity, width: double.infinity,
@ -111,7 +94,7 @@ class BranchAppointmentFragment extends StatelessWidget {
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
"Tap to view".toText(fontSize: 10, color: MyColors.grey70Color), LocaleKeys.tapToView.tr().toText(fontSize: 10, color: MyColors.grey70Color),
], ],
), ),
), ),

Loading…
Cancel
Save