Issues Fixed

aamir_dev
Faiz Hashmi 2 years ago
parent e73902b4dd
commit 7ba4a191bb

@ -7,6 +7,7 @@ import 'package:car_provider_app/view_models/schedule_view_model.dart';
import 'package:mc_common_app/repositories/setting_options_repo.dart';
import 'package:mc_common_app/repositories/shipping_repo.dart';
import 'package:mc_common_app/services/firebase_service.dart';
import 'package:mc_common_app/utils/location/Location.dart';
import 'package:mc_common_app/view_models/dashboard_view_model_provider.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
@ -60,7 +61,9 @@ Future<void> main() async {
await Firebase.initializeApp();
}
ProviderAppDependencies.addDependencies();
injector.get<FirebaseMessagingService>().initializeNotifications();
injector.get<FirebaseMessagingService>().initializeNotifications().whenComplete(() {
injector.get<Location>().handleLocationPermission();
});
ProviderAppRoutes.routes.addAll(AppRoutes.routes);
runApp(MultiProvider(
providers: [

@ -31,6 +31,8 @@ class ScheduleVM extends BaseVM {
setState(ViewState.idle);
}
String currentSelectedBranchName = "";
Future<GenericRespModel> setScheduleInactive(int scheduleId, int branchId) async {
GenericRespModel val = await scheduleRepo.setScheduleInActive(scheduleId, branchId);
if (val.messageStatus == 1) {

@ -73,7 +73,7 @@ class UpdateAppointmentPage extends StatelessWidget {
),
),
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.cancelled) ...[
Utils.buildStatusContainer("Appointment Cancelled").paddingAll(10),
Utils.buildStatusContainer(LocaleKeys.appointmentCancelled.tr()).paddingAll(10),
],
if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.booked)
Row(

@ -64,7 +64,7 @@ class SelectItemsSheet extends StatelessWidget {
child: itemsVM.serviceItems?.data == null
? const Center(child: CircularProgressIndicator())
: itemsVM.serviceItems?.data!.length == 0
? Center(child: EmptyWidget(text: LocaleKeys.noItemstoShow.tr()))
? Center(child: EmptyWidget(text: LocaleKeys.noItemsToShow.tr()))
: ListView.separated(
itemBuilder: (BuildContext context, int index) {
return CheckboxListTile(

@ -1,5 +1,6 @@
import 'dart:async';
import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/view_models/schedule_view_model.dart';
import 'package:car_provider_app/views/branch_management/branch/dealer/widget/assign_dealer_user_sheet.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
@ -305,6 +306,7 @@ class _BranchDetailPageState extends State<BranchDetailPage> {
Utils.showToast("Please wait for the branch verification.");
return;
}
context.read<ScheduleVM>().currentSelectedBranchName = widget.branchData.branchName.toString();
navigateWithName(context, AppRoutes.schedulesList, arguments: widget.branchData.id.toString());
}),
Row(

@ -41,7 +41,10 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
}
getBranchUsers() {
provider.getAllProviderDealers({"ServiceProviderBranchID": widget.branchId, "ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""});
provider.getAllProviderDealers({
"ServiceProviderBranchID": widget.branchId,
"ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? "",
});
}
@override
@ -86,7 +89,6 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
maxWidth: double.infinity,
maxHeight: 55,
fontSize: 15,
onPressed: () async {
if (validation()) {
Utils.showLoading(context);
@ -143,6 +145,9 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
Checkbox(
value: model.allProviderDealersList[index].isBranchUser,
onChanged: (v) {
for (var element in model.allProviderDealersList) {
element.isBranchUser = false;
}
model.allProviderDealersList[index].isBranchUser = v ?? false;
model.notifyListeners();
},

@ -1,5 +1,4 @@
import 'dart:async';
import 'package:car_provider_app/view_models/schedule_view_model.dart';
import 'package:car_provider_app/views/branch_management/schedule/widgets/chips_picker_item.dart';
import 'package:car_provider_app/views/branch_management/schedule/widgets/select_days_sheet.dart';
@ -8,7 +7,6 @@ import 'package:flutter/material.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/main.dart';
import 'package:mc_common_app/models/appointments_models/schedule_model.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/theme/colors.dart';
@ -17,6 +15,7 @@ import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
import 'package:mc_common_app/widgets/txt_field.dart';
import 'package:provider/provider.dart';
import 'package:mc_common_app/widgets/bottom_sheet.dart';
@ -30,7 +29,7 @@ class AddSchedulesPage extends StatefulWidget {
}
class _AddSchedulesPageState extends State<AddSchedulesPage> {
late ScheduleVM mModel;
late ScheduleVM schedulevm;
String name = "", startDate = "", endDate = "", startTime = "", endTime = "", slotsTime = "", appointmentPerSlot = "", servicesGroupID = "";
@ -42,36 +41,71 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
endDate = DateHelper.formatAsYearMonthDay(scheduleData.toDate ?? DateTime.now());
startTime = scheduleData.startTime ?? "";
endTime = scheduleData.endTime ?? "";
slotsTime = scheduleData.slotDurationMinute.toString();
if (scheduleData.slotDurationMinute != null) {
int temp = scheduleData.slotDurationMinute!;
int index = minutesDrop.indexWhere((element) => element.id == temp);
if (index != -1) {
slotTimeId = temp;
slotsTime = "$temp Minutes";
} else {
temp = 20;
slotTimeId = temp;
slotsTime = "$temp Minutes";
}
}
appointmentPerSlot = scheduleData.perSlotAppointment.toString();
// mModel.selectedServicesItems.clear();
scheduleData.scheduleServices?.forEach((element) {
print("Services Elements");
print(element);
mModel.selectedServicesItems.add(PickerItem(id: element.serviceProviderServiceId ?? 0, title: element.serviceDescription ?? ""));
schedulevm.selectedServicesItems.add(PickerItem(id: element.serviceProviderServiceId ?? 0, title: element.serviceDescription ?? ""));
});
logger.d(mModel.selectedServicesItems.first.id);
mModel.selectedDaysItems.clear();
schedulevm.selectedDaysItems.clear();
scheduleData.weeklyOffDays?.forEach((element) {
for (var daysElement in initDaysList) {
if (element.dayNumber == daysElement.id) {
daysElement.isSelected = true;
mModel.selectedDaysItems.add(daysElement);
schedulevm.selectedDaysItems.add(daysElement);
}
}
});
if (scheduleData.appointmentType != null) {
if (scheduleData.appointmentType == 1) {
selectedScheduleLocationDrop = DropValue(1, 'Company Location', '');
} else {
selectedScheduleLocationDrop = DropValue(1, 'Company Location', '');
}
}
}
int slotTimeId = 10;
List<DropValue> minutesDrop = [
DropValue(10, '10 Minutes', ''),
DropValue(15, '15 Minutes', ''),
DropValue(20, '20 Minutes', ''),
DropValue(25, '25 Minutes', ''),
DropValue(30, '30 Minutes', ''),
DropValue(50, '50 Minutes', ''),
DropValue(60, '60 Minutes', ''),
];
DropValue selectedScheduleLocationDrop = DropValue(-1, '', '');
List<DropValue> scheduleLocationIdDrop = [
DropValue(1, 'Company Location', ''),
DropValue(2, 'Customer Location', ''),
];
@override
void initState() {
super.initState();
scheduleMicrotask(() {
mModel = context.read<ScheduleVM>();
schedulevm = context.read<ScheduleVM>();
scheduleData = ModalRoute.of(context)!.settings.arguments as ScheduleData;
mModel.getAllServices(scheduleData.branchId, scheduleData);
mModel.selectedServicesItems = [];
mModel.selectedDaysItems = [];
schedulevm.getAllServices(scheduleData.branchId, scheduleData);
schedulevm.selectedServicesItems = [];
schedulevm.selectedDaysItems = [];
if (scheduleData.id != null) {
setEditData();
}
@ -81,13 +115,11 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: const CustomAppBar(
title: "Create Schedules",
),
appBar: CustomAppBar(title: LocaleKeys.createGroupServices.tr()),
body: SizedBox(
width: double.infinity,
child: Consumer<ScheduleVM>(
builder: (_, ScheduleVM model, child) {
builder: (_, ScheduleVM scheduleVM, child) {
return Column(
children: [
Expanded(
@ -95,6 +127,16 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
padding: const EdgeInsets.all(20),
child: Column(
children: [
if (scheduleVM.currentSelectedBranchName.isNotEmpty) ...[
TxtField(
isBackgroundEnabled: true,
isNeedClickAll: true,
hint: '',
value: scheduleVM.currentSelectedBranchName,
onTap: () {},
),
8.height,
],
TxtField(
hint: LocaleKeys.nameofSchedule.tr(),
value: name,
@ -105,13 +147,13 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
8.height,
ChipsPickerItem(
hint: LocaleKeys.select_Services.tr(),
itemsList: [...model.selectedServicesItems],
itemsList: [...scheduleVM.selectedServicesItems],
onClick: () {
showMyBottomSheet(
context,
child: SelectServicesSheet(
onSelectServices: () {
model.filterSelectedServices();
scheduleVM.filterSelectedServices();
FocusManager.instance.primaryFocus?.unfocus();
},
),
@ -133,7 +175,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
firstDate: DateTime.now(),
);
FocusManager.instance.primaryFocus?.unfocus();
model.refresh();
scheduleVM.refresh();
},
),
8.height,
@ -151,19 +193,19 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
firstDate: DateTime.now(),
);
FocusManager.instance.primaryFocus?.unfocus();
model.refresh();
scheduleVM.refresh();
},
),
8.height,
ChipsPickerItem(
hint: LocaleKeys.offDays.tr(),
itemsList: [...model.selectedDaysItems],
itemsList: [...scheduleVM.selectedDaysItems],
onClick: () {
showMyBottomSheet(
context,
child: SelectDaysSheet(
onSelected: (List<PickerItem> picked) {
model.filterDays(picked);
scheduleVM.filterDays(picked);
FocusManager.instance.primaryFocus?.unfocus();
},
),
@ -185,7 +227,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
onTap: () async {
startTime = await Utils.pickTime(context);
FocusManager.instance.primaryFocus?.unfocus();
model.refresh();
scheduleVM.refresh();
},
),
),
@ -207,27 +249,25 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
initialTime: _startTime,
);
FocusManager.instance.primaryFocus?.unfocus();
model.refresh();
scheduleVM.refresh();
},
),
),
],
),
8.height,
TxtField(
hint: LocaleKeys.slotsTime.tr(),
postfixWidget: Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
"Min".toText(color: MyColors.lightTextColor),
],
),
keyboardType: TextInputType.number,
value: slotsTime,
onChanged: (v) {
slotsTime = v;
Builder(
builder: (context) {
return DropdownField(
(DropValue value) {
slotsTime = value.value;
slotTimeId = value.id;
},
list: minutesDrop,
dropdownValue: slotsTime.isNotEmpty ? DropValue(slotTimeId, slotsTime, "") : null,
hint: LocaleKeys.slotsTime.tr(),
errorValue: '',
);
},
),
8.height,
@ -239,6 +279,20 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
appointmentPerSlot = v;
},
),
8.height,
Builder(
builder: (context) {
return DropdownField(
(DropValue value) {
selectedScheduleLocationDrop = value;
},
list: scheduleLocationIdDrop,
dropdownValue: selectedScheduleLocationDrop.id != -1 ? selectedScheduleLocationDrop : null,
hint: LocaleKeys.selectServiceLocation.tr(),
errorValue: '',
);
},
),
],
),
),
@ -248,11 +302,11 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
maxWidth: double.infinity,
margin: const EdgeInsets.all(20),
onPressed: () {
if (validation(model)) {
if (validation(scheduleVM)) {
if (scheduleData.id != null) {
updateSchedule(context, model);
updateSchedule(context, scheduleVM);
} else {
createSchedule(context, model);
createSchedule(context, scheduleVM);
}
}
},
@ -298,9 +352,9 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
return valid;
}
createSchedule(BuildContext context, ScheduleVM model) async {
createSchedule(BuildContext context, ScheduleVM scheduleVM) async {
List<int> days = [];
for (var element in model.selectedDaysItems) {
for (var element in scheduleVM.selectedDaysItems) {
days.add(element.id);
}
@ -312,19 +366,19 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
"toDate": endDate,
"startTime": startTime,
"endTime": endTime,
"slotDurationMinute": slotsTime,
"slotDurationMinute": slotsTime.replaceFirst(' Minutes', ''),
"perSlotAppointment": appointmentPerSlot,
"deliveryServiceType": 1,
"appointmentType": 1,
"appointmentType": selectedScheduleLocationDrop.id,
"weeklyOffDays": days
};
Utils.showLoading(context);
GenericRespModel scheduleResponse = await model.createSchedule(map);
GenericRespModel scheduleResponse = await scheduleVM.createSchedule(map);
if (scheduleResponse.messageStatus == 1) {
List<int> services = [];
for (var element in model.selectedServicesItems) {
for (var element in scheduleVM.selectedServicesItems) {
services.add(element.id);
}
var map1 = {
@ -333,7 +387,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
"serviceGroupDescription": "string",
};
GenericRespModel servicesResponse = await model.addServicesInSchedule(map1);
GenericRespModel servicesResponse = await scheduleVM.addServicesInSchedule(map1);
Utils.hideLoading(context);
if (servicesResponse.messageStatus == 1) {
Utils.showToast("Successfully schedule created");
@ -363,11 +417,11 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
"toDate": endDate,
"startTime": startTime,
"endTime": endTime,
"slotDurationMinute": slotsTime,
"slotDurationMinute": slotsTime.replaceFirst(' Minutes', ''),
"perSlotAppointment": appointmentPerSlot,
"deliveryServiceType": 1,
"weeklyOffDays": days,
"appointmentType": scheduleData.appointmentType
"appointmentType": selectedScheduleLocationDrop.id,
};
Utils.showLoading(context);

@ -130,6 +130,7 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
showItem("${LocaleKeys.shiftEndTime.tr()}:", scheduleVM.schedule!.data![index].endTime ?? ""),
showItem("${LocaleKeys.slotsTime.tr()}:", "${scheduleVM.schedule!.data![index].slotDurationMinute} Mins"),
showItem("${LocaleKeys.appointmentPerSlot.tr()}:", scheduleVM.schedule!.data![index].perSlotAppointment.toString()),
showItem(LocaleKeys.serviceLocation.tr(), scheduleVM.schedule!.data![index].appointmentType ==1 ? "Company Location" : "Home Location"),
showItem("${LocaleKeys.offDays.tr()}:", offDays(scheduleVM.schedule!.data![index])),
12.height,
"${LocaleKeys.services.tr()}:".toText(fontSize: 12, color: MyColors.lightTextColor),

@ -25,7 +25,12 @@ class ChipsPickerItem extends StatelessWidget {
Widget build(BuildContext context) {
return Row(
children: [
if (itemsList.isEmpty) Expanded(child: hint.toText(fontSize: 15, fontWeight: MyFonts.Medium, color: borderColor)),
if (itemsList.isEmpty)
Expanded(
child: Text(
hint,
style: const TextStyle(color: borderColor, fontSize: 15, fontWeight: MyFonts.Medium),
)),
if (itemsList.isNotEmpty)
Expanded(
child: ListView(

@ -104,7 +104,7 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
)
: const CircularProgressIndicator(),
12.height,
model.servicesDropList.isNotEmpty
categoryId != -1 && model.servicesDropList.isNotEmpty
? DropdownField(
(DropValue value) {
service = value;

@ -106,7 +106,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
value: model.matchedServices![index].isExpandedOrSelected,
onChanged: (v) {
if (model.matchedServices![index].serviceItems!.isEmpty) {
Utils.showToast(LocaleKeys.noItemstoShow.tr());
Utils.showToast(LocaleKeys.noItemsToShow.tr());
} else {
model.matchedServices![index].isExpandedOrSelected = v ?? false;
model.updateServiceItem(index, model.matchedServices![index].isExpandedOrSelected);

@ -42,7 +42,7 @@ class ItemsListPage extends StatelessWidget {
return model.state == ViewState.busy
? const Center(child: CircularProgressIndicator())
: model.serviceItems!.data!.isEmpty
? EmptyWidget(text: LocaleKeys.noItemstoShow.tr(), isWrappedColumn: false)
? EmptyWidget(text: LocaleKeys.noItemsToShow.tr(), isWrappedColumn: false)
: ListView.separated(
itemBuilder: (BuildContext context, int index) {
return SizedBox(

@ -108,7 +108,7 @@ class _ServicesListPageState extends State<ServicesListPage> {
Expanded(
child: services.isEmpty
? Center(
child: LocaleKeys.noItemstoShow.tr().toText(fontSize: 16, color: MyColors.lightTextColor),
child: LocaleKeys.noItemsToShow.tr().toText(fontSize: 16, color: MyColors.lightTextColor),
)
: ListView.separated(
itemBuilder: (context, index) {

@ -33,7 +33,7 @@ class HomeFragment extends StatelessWidget {
leadingWidth: 100,
toolbarHeight: 59,
onTap: () => navigateWithName(context, AppRoutes.settingOptionsMore),
actions: [
actions: const [
// IconButton(
// onPressed: () => context.read<AppointmentsVM>().onGeneralChatMessagesButtonPressed(context: context),
// icon: b.Badge(

Loading…
Cancel
Save