|
|
|
@ -1,4 +1,5 @@
|
|
|
|
import 'dart:async';
|
|
|
|
import 'dart:async';
|
|
|
|
|
|
|
|
import 'dart:developer';
|
|
|
|
import 'package:car_provider_app/views/dashboard/widget/general_appointment_widget.dart';
|
|
|
|
import 'package:car_provider_app/views/dashboard/widget/general_appointment_widget.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/chips_picker_item.dart';
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
@ -23,6 +24,7 @@ import 'package:mc_common_app/widgets/bottom_sheet.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/common_widgets/app_bar.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/dropdown/dropdow_field.dart';
|
|
|
|
|
|
|
|
import 'package:mc_common_app/widgets/empty_widget.dart';
|
|
|
|
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
|
|
|
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
|
|
@ -43,6 +45,8 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
|
|
|
|
|
|
|
|
|
|
|
|
List<ItemData> selectedList = [];
|
|
|
|
List<ItemData> selectedList = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double totalPrice = 0.0;
|
|
|
|
|
|
|
|
|
|
|
|
List<PickerItem>? pickedItems;
|
|
|
|
List<PickerItem>? pickedItems;
|
|
|
|
ServiceVM? serviceVM;
|
|
|
|
ServiceVM? serviceVM;
|
|
|
|
|
|
|
|
|
|
|
|
@ -56,6 +60,29 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
openItemsSelectionBottomSheet() async {
|
|
|
|
|
|
|
|
return showMyBottomSheet(
|
|
|
|
|
|
|
|
context,
|
|
|
|
|
|
|
|
child: SelectItemsSheet(
|
|
|
|
|
|
|
|
serviceId: service?.id ?? 0,
|
|
|
|
|
|
|
|
list: pickedItems,
|
|
|
|
|
|
|
|
onSelectItems: (List<ItemData> list) {
|
|
|
|
|
|
|
|
selectedList.clear();
|
|
|
|
|
|
|
|
selectedList.addAll(list);
|
|
|
|
|
|
|
|
pickedItems = [];
|
|
|
|
|
|
|
|
totalPrice = 0.0;
|
|
|
|
|
|
|
|
for (var element in list) {
|
|
|
|
|
|
|
|
totalPrice = totalPrice + double.parse(element.price ?? "0");
|
|
|
|
|
|
|
|
pickedItems!.add(
|
|
|
|
|
|
|
|
PickerItem(id: element.id ?? 0, title: element.name ?? ""),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
setState(() {});
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return Scaffold(
|
|
|
|
return Scaffold(
|
|
|
|
@ -116,23 +143,7 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
|
|
|
|
service = value;
|
|
|
|
service = value;
|
|
|
|
pickedItems = null;
|
|
|
|
pickedItems = null;
|
|
|
|
serviceVm.setState(ViewState.idle);
|
|
|
|
serviceVm.setState(ViewState.idle);
|
|
|
|
showMyBottomSheet(
|
|
|
|
openItemsSelectionBottomSheet();
|
|
|
|
context,
|
|
|
|
|
|
|
|
child: SelectItemsSheet(
|
|
|
|
|
|
|
|
serviceId: service?.id ?? 0,
|
|
|
|
|
|
|
|
onSelectItems: (List<ItemData> selectedList) {
|
|
|
|
|
|
|
|
this.selectedList.clear();
|
|
|
|
|
|
|
|
this.selectedList = selectedList;
|
|
|
|
|
|
|
|
pickedItems = [];
|
|
|
|
|
|
|
|
for (var element in selectedList) {
|
|
|
|
|
|
|
|
pickedItems!.add(
|
|
|
|
|
|
|
|
PickerItem(id: element.id ?? 0, title: element.name ?? ""),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
serviceVm.notifyListeners();
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
dropdownValue: service,
|
|
|
|
dropdownValue: service,
|
|
|
|
list: serviceVm.servicesDropList,
|
|
|
|
list: serviceVm.servicesDropList,
|
|
|
|
@ -141,7 +152,7 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
|
|
|
|
: category == null
|
|
|
|
: category == null
|
|
|
|
? Container()
|
|
|
|
? Container()
|
|
|
|
: serviceVm.services != null && serviceVm.servicesDropList.isEmpty
|
|
|
|
: serviceVm.services != null && serviceVm.servicesDropList.isEmpty
|
|
|
|
? Text(LocaleKeys.noServiceFound.tr())
|
|
|
|
? EmptyWidget(text: LocaleKeys.noServicesAvailable.tr())
|
|
|
|
: const CircularProgressIndicator(),
|
|
|
|
: const CircularProgressIndicator(),
|
|
|
|
12.height,
|
|
|
|
12.height,
|
|
|
|
(service != null && pickedItems != null && pickedItems!.isNotEmpty)
|
|
|
|
(service != null && pickedItems != null && pickedItems!.isNotEmpty)
|
|
|
|
@ -149,26 +160,11 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
|
|
|
|
hint: LocaleKeys.selectItems.tr(),
|
|
|
|
hint: LocaleKeys.selectItems.tr(),
|
|
|
|
itemsList: [...pickedItems ?? []],
|
|
|
|
itemsList: [...pickedItems ?? []],
|
|
|
|
onClick: () {
|
|
|
|
onClick: () {
|
|
|
|
showMyBottomSheet(
|
|
|
|
openItemsSelectionBottomSheet();
|
|
|
|
context,
|
|
|
|
|
|
|
|
child: SelectItemsSheet(
|
|
|
|
|
|
|
|
serviceId: service?.id ?? 0,
|
|
|
|
|
|
|
|
list: pickedItems,
|
|
|
|
|
|
|
|
onSelectItems: (List<ItemData> selectedList) {
|
|
|
|
|
|
|
|
pickedItems = [];
|
|
|
|
|
|
|
|
for (var element in selectedList) {
|
|
|
|
|
|
|
|
pickedItems!.add(
|
|
|
|
|
|
|
|
PickerItem(id: element.id ?? 0, title: element.name ?? ""),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
serviceVm.notifyListeners();
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
)
|
|
|
|
)
|
|
|
|
: service != null
|
|
|
|
: service != null
|
|
|
|
? Text(LocaleKeys.noItemSelectedYet.tr())
|
|
|
|
? EmptyWidget(text: LocaleKeys.noItemSelectedYet.tr())
|
|
|
|
: const SizedBox(),
|
|
|
|
: const SizedBox(),
|
|
|
|
if ((service != null && pickedItems != null && pickedItems!.isNotEmpty))
|
|
|
|
if ((service != null && pickedItems != null && pickedItems!.isNotEmpty))
|
|
|
|
Column(
|
|
|
|
Column(
|
|
|
|
@ -183,7 +179,7 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
|
|
|
|
Row(
|
|
|
|
Row(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.end,
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.end,
|
|
|
|
children: [
|
|
|
|
children: [
|
|
|
|
calculatePrice().toString().toText(
|
|
|
|
totalPrice.toString().toText(
|
|
|
|
fontSize: 29,
|
|
|
|
fontSize: 29,
|
|
|
|
isBold: true,
|
|
|
|
isBold: true,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
@ -198,6 +194,7 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
|
|
|
|
.paddingOnly(bottom: 5),
|
|
|
|
.paddingOnly(bottom: 5),
|
|
|
|
],
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
|
|
|
|
10.height,
|
|
|
|
],
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
],
|
|
|
|
@ -208,6 +205,7 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
|
|
|
|
);
|
|
|
|
);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
|
|
|
|
55.height,
|
|
|
|
],
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
@ -278,12 +276,4 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
|
|
|
|
},
|
|
|
|
},
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
double calculatePrice() {
|
|
|
|
|
|
|
|
double total = 0;
|
|
|
|
|
|
|
|
for (var element in selectedList) {
|
|
|
|
|
|
|
|
total = total + double.parse(element.price ?? "0");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return total;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|