Branches Fix

aamir_dev
Faiz Hashmi 2 years ago
parent 46839624c7
commit 96a96900ef

@ -7,7 +7,7 @@ import 'package:car_provider_app/views/requests/request_detail_page.dart';
import 'package:car_provider_app/views/requests/send_offer_page.dart'; import 'package:car_provider_app/views/requests/send_offer_page.dart';
import 'package:car_provider_app/views/settings/branch/branch_detail_page.dart'; import 'package:car_provider_app/views/settings/branch/branch_detail_page.dart';
import 'package:car_provider_app/views/settings/branch/dealer/dealer_user_page.dart'; import 'package:car_provider_app/views/settings/branch/dealer/dealer_user_page.dart';
import 'package:car_provider_app/views/settings/branch/define_branch_page.dart'; import 'package:car_provider_app/views/settings/branch/create_branch_view.dart';
import 'package:car_provider_app/views/settings/schedule/add_schedules_page.dart'; import 'package:car_provider_app/views/settings/schedule/add_schedules_page.dart';
import 'package:car_provider_app/views/settings/schedule/schedules_list_page.dart'; import 'package:car_provider_app/views/settings/schedule/schedules_list_page.dart';
import 'package:car_provider_app/views/settings/services/create_item_page.dart'; import 'package:car_provider_app/views/settings/services/create_item_page.dart';
@ -80,7 +80,7 @@ class ProviderAppRoutes {
// defineLicense: (context) => DefineLicensePage(), // defineLicense: (context) => DefineLicensePage(),
dealershipSetting: (context) => DealershipView(), dealershipSetting: (context) => DealershipView(),
// branchList: (context) => BranchListPage(), // branchList: (context) => BranchListPage(),
defineBranch: (context) => DefineBranchPage((ModalRoute.of(context)!.settings.arguments) == null ? null : (ModalRoute.of(context)!.settings.arguments as BranchDetailModel)), defineBranch: (context) => CreateBranchView((ModalRoute.of(context)!.settings.arguments) == null ? null : (ModalRoute.of(context)!.settings.arguments as BranchDetailModel)),
branchDetail: (context) => BranchDetailPage(ModalRoute.of(context)!.settings.arguments as BranchDetailModel), branchDetail: (context) => BranchDetailPage(ModalRoute.of(context)!.settings.arguments as BranchDetailModel),
//Appointments //Appointments

@ -1,9 +1,9 @@
import 'dart:io'; import 'dart:io';
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/general_models/generic_resp_model.dart';
import 'package:mc_common_app/repositories/items_repo.dart'; import 'package:mc_common_app/repositories/items_repo.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/models/general_models/m_response.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/services/common_services.dart'; import 'package:mc_common_app/services/common_services.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
@ -40,8 +40,8 @@ class ItemsVM extends BaseVM {
return null; return null;
} }
Future<MResponse> createServiceItem(Map map) async { Future<GenericRespModel> createServiceItem(Map map) async {
MResponse response = await itemsRepo.createServiceItems(map); GenericRespModel response = await itemsRepo.createServiceItems(map);
return response; return response;
} }
@ -68,8 +68,8 @@ class ItemsVM extends BaseVM {
return serviceItems; return serviceItems;
} }
Future<MResponse> updateServiceItem(Map map) async { Future<GenericRespModel> updateServiceItem(Map map) async {
MResponse response = await itemsRepo.updateServiceItem(map); GenericRespModel response = await itemsRepo.updateServiceItem(map);
return response; return response;
} }
} }

@ -1,10 +1,8 @@
import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/models/appointments_models/schedule_model.dart'; import 'package:mc_common_app/models/appointments_models/schedule_model.dart';
import 'package:mc_common_app/models/general_models/m_response.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/services.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/services.dart';
import 'package:mc_common_app/repositories/schedule_repo.dart'; import 'package:mc_common_app/repositories/schedule_repo.dart';
import 'package:car_provider_app/views/settings/schedule/widgets/chips_picker_item.dart'; import 'package:car_provider_app/views/settings/schedule/widgets/chips_picker_item.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/base_view_model.dart'; import 'package:mc_common_app/view_models/base_view_model.dart';
@ -33,8 +31,8 @@ class ScheduleVM extends BaseVM {
setState(ViewState.idle); setState(ViewState.idle);
} }
Future<MResponse> setScheduleInactive(int scheduleId, int branchId) async { Future<GenericRespModel> setScheduleInactive(int scheduleId, int branchId) async {
MResponse val = await scheduleRepo.setScheduleInActive(scheduleId, branchId); GenericRespModel val = await scheduleRepo.setScheduleInActive(scheduleId, branchId);
if (val.messageStatus == 1) { if (val.messageStatus == 1) {
if (schedule!.data != null) { if (schedule!.data != null) {
schedule!.data!.removeWhere((element) => element.serviceProviderBranchId == branchId && element.id == scheduleId); schedule!.data!.removeWhere((element) => element.serviceProviderBranchId == branchId && element.id == scheduleId);
@ -100,13 +98,13 @@ class ScheduleVM extends BaseVM {
setState(ViewState.idle); setState(ViewState.idle);
} }
Future<MResponse> createSchedule(Map map) async { Future<GenericRespModel> createSchedule(Map map) async {
MResponse response = await scheduleRepo.createSchedule(map); GenericRespModel response = await scheduleRepo.createSchedule(map);
return response; return response;
} }
Future<MResponse> addServicesInSchedule(Map map) async { Future<GenericRespModel> addServicesInSchedule(Map map) async {
MResponse response = await scheduleRepo.addServicesInSchedule(map); GenericRespModel response = await scheduleRepo.addServicesInSchedule(map);
return response; return response;
} }
@ -116,13 +114,13 @@ class ScheduleVM extends BaseVM {
setState(ViewState.idle); setState(ViewState.idle);
} }
Future<MResponse> updateSchedule(Map map) async { Future<GenericRespModel> updateSchedule(Map map) async {
MResponse response = await scheduleRepo.updateSchedule(map); GenericRespModel response = await scheduleRepo.updateSchedule(map);
return response; return response;
} }
Future<MResponse> updateServicesInSchedule(Map map) async { Future<GenericRespModel> updateServicesInSchedule(Map map) async {
MResponse response = await scheduleRepo.updateServicesInSchedule(map); GenericRespModel response = await scheduleRepo.updateServicesInSchedule(map);
return response; return response;
} }
} }

@ -1,6 +1,9 @@
import 'dart:async'; import 'dart:async';
import 'package:car_provider_app/views/dashboard/widget/appointment_slider_widget.dart';
import 'package:car_provider_app/views/settings/schedule/widgets/chips_picker_item.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/general_models/generic_resp_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/appoinments/widget/select_items_sheet.dart'; import 'package:car_provider_app/views/appoinments/widget/select_items_sheet.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -9,7 +12,6 @@ import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; 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/models/appointments_models/appointment_list_model.dart'; import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart';
import 'package:mc_common_app/models/general_models/m_response.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/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
@ -23,15 +25,11 @@ import 'package:mc_common_app/widgets/dropdown/dropdow_field.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';
import '../dashboard/widget/appointment_slider_widget.dart';
import '../settings/schedule/widgets/chips_picker_item.dart';
import 'package:easy_localization/easy_localization.dart';
class AddNewServiceAppointmentPage extends StatefulWidget { class AddNewServiceAppointmentPage extends StatefulWidget {
AppointmentListModel appointmentListModel; final AppointmentListModel appointmentListModel;
AddNewServiceAppointmentPage(this.appointmentListModel, {Key? key}) : super(key: key); const AddNewServiceAppointmentPage(this.appointmentListModel, {Key? key}) : super(key: key);
@override @override
State<AddNewServiceAppointmentPage> createState() => _AddNewServiceAppointmentPageState(); State<AddNewServiceAppointmentPage> createState() => _AddNewServiceAppointmentPageState();
@ -85,9 +83,9 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
LocaleKeys.selectServicestoAdd.tr().toText( LocaleKeys.selectServicestoAdd.tr().toText(
fontSize: 18, fontSize: 18,
isBold: true, isBold: true,
), ),
12.height, 12.height,
Column( Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
@ -165,7 +163,7 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
}, },
) )
: service != null : service != null
? Text(LocaleKeys.noItemSelectedYet.tr()) ? Text(LocaleKeys.noItemSelectedYet.tr())
: const SizedBox(), : const SizedBox(),
if ((service != null && pickedItems != null && pickedItems!.length > 0)) if ((service != null && pickedItems != null && pickedItems!.length > 0))
Column( Column(
@ -173,10 +171,10 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
children: [ children: [
16.height, 16.height,
LocaleKeys.totalAdditionalAmount.tr().toText( LocaleKeys.totalAdditionalAmount.tr().toText(
fontSize: 14, fontSize: 14,
isBold: true, isBold: true,
color: MyColors.lightTextColor, color: MyColors.lightTextColor,
), ),
Row( Row(
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
@ -186,10 +184,10 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
), ),
2.width, 2.width,
LocaleKeys.sar.tr().toText( LocaleKeys.sar.tr().toText(
fontSize: 16, fontSize: 16,
isBold: true, isBold: true,
color: MyColors.lightTextColor, color: MyColors.lightTextColor,
), ),
], ],
), ),
], ],
@ -223,7 +221,7 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
}); });
Utils.showLoading(context); Utils.showLoading(context);
var postParams = {"providerBranchID": widget.appointmentListModel.branchId, "appointmentID": widget.appointmentListModel.id, "serviceItemID": items}; var postParams = {"providerBranchID": widget.appointmentListModel.branchId, "appointmentID": widget.appointmentListModel.id, "serviceItemID": items};
MResponse res = await serviceVM!.addNewServiceInAppointment(postParams); GenericRespModel res = await serviceVM!.addNewServiceInAppointment(postParams);
_updateAppointment(context, widget.appointmentListModel.branchId ?? 0); _updateAppointment(context, widget.appointmentListModel.branchId ?? 0);
Utils.hideLoading(context); Utils.hideLoading(context);
if (res.messageStatus == 1) { if (res.messageStatus == 1) {
@ -252,10 +250,12 @@ 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(
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0", {
"ProviderBranchID": branchId.toString(), "ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
},); "ProviderBranchID": branchId.toString(),
},
);
} }
double calculatePrice() { double calculatePrice() {

@ -1,10 +1,11 @@
import 'package:car_provider_app/views/dashboard/widget/appointment_slider_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.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/dependency_injection.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_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/general_models/m_response.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
@ -13,27 +14,23 @@ import 'package:mc_common_app/view_models/appointments_view_model.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 '../../config/provider_routes.dart';
import '../dashboard/widget/appointment_slider_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';
class MergeAppointmentListPage extends StatelessWidget { class MergeAppointmentListPage extends StatelessWidget {
MergeAppointmentListPage({Key? key}) : super(key: key); const MergeAppointmentListPage({Key? key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: CustomAppBar( appBar: CustomAppBar(
title: LocaleKeys.selectAppointments.tr(), title: LocaleKeys.selectAppointments.tr(),
), ),
body: SizedBox( body: SizedBox(
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,
child: Consumer( child: Consumer(
builder: (BuildContext context, AppointmentsVM appointmentsVM, builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
Widget? child) {
return Column( return Column(
children: [ children: [
Expanded( Expanded(
@ -45,28 +42,20 @@ class MergeAppointmentListPage extends StatelessWidget {
: ListView.separated( : ListView.separated(
itemBuilder: (context, index) { itemBuilder: (context, index) {
return AppointmentSliderWidget( return AppointmentSliderWidget(
appointmentListModel: appointmentsVM appointmentListModel: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index],
.myFilteredAppointments2[appointmentsVM
.selectedAppointmentIndex]
.customerAppointmentList![index],
isNeedTotalPayment: true, isNeedTotalPayment: true,
isSelectable: true, isSelectable: true,
isNeedToShowAppointmentStatus: true, isNeedToShowAppointmentStatus: true,
isNeedToShowMergeStatus: true, isNeedToShowMergeStatus: true,
onTap: () { onTap: () {
appointmentsVM appointmentsVM.updateCheckBoxInMergeRequest(index);
.updateCheckBoxInMergeRequest(index);
}, },
); );
}, },
separatorBuilder: (context, snapchat) { separatorBuilder: (context, snapchat) {
return 21.height; return 21.height;
}, },
itemCount: appointmentsVM itemCount: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList!.length,
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.customerAppointmentList!
.length,
padding: const EdgeInsets.all(21), padding: const EdgeInsets.all(21),
), ),
), ),
@ -77,54 +66,30 @@ class MergeAppointmentListPage extends StatelessWidget {
title: LocaleKeys.mergeAppointments.tr(), title: LocaleKeys.mergeAppointments.tr(),
maxWidth: double.infinity, maxWidth: double.infinity,
margin: const EdgeInsets.all(21), margin: const EdgeInsets.all(21),
txtColor: appointmentsVM.inNeedToEnableMergeButton txtColor: appointmentsVM.inNeedToEnableMergeButton ? MyColors.white : MyColors.black,
? MyColors.white backgroundColor: appointmentsVM.inNeedToEnableMergeButton ? MyColors.primaryColor : MyColors.greyButtonColor,
: MyColors.black,
backgroundColor: appointmentsVM.inNeedToEnableMergeButton
? MyColors.primaryColor
: MyColors.greyButtonColor,
onPressed: () async { onPressed: () async {
Utils.showLoading(context); Utils.showLoading(context);
List<int> appointmentIDs = []; List<int> appointmentIDs = [];
for (var element in appointmentsVM for (var element in appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList!) {
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.customerAppointmentList!) {
if (element.isSelected ?? false) { if (element.isSelected ?? false) {
appointmentIDs.add(element.id ?? 0); appointmentIDs.add(element.id ?? 0);
} }
} }
Map<String, dynamic> map = { Map<String, dynamic> map = {
"serviceProviderID": injector "serviceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
.get<AppState>() "serviceProviderBranchID": appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].branchId,
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"0",
"serviceProviderBranchID": appointmentsVM
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.branchId,
"serviceAppointmentIDs": appointmentIDs "serviceAppointmentIDs": appointmentIDs
}; };
try { try {
MResponse response = GenericRespModel response = await appointmentsVM.createMergeAppointment(map);
await appointmentsVM.createMergeAppointment(map);
Utils.hideLoading(context); Utils.hideLoading(context);
if (response.messageStatus == 1) { if (response.messageStatus == 1) {
Utils.showToast(LocaleKeys.appointmentMergeSuccessfully.tr()); Utils.showToast(LocaleKeys.appointmentMergeSuccessfully.tr());
_updateAppointment( _updateAppointment(context, appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].branchId ?? 0);
context,
appointmentsVM
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.branchId ??
0);
pop(context); pop(context);
pop(context); pop(context);
@ -147,14 +112,7 @@ 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({
"ServiceProviderID": injector "ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
.get<AppState>()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"0",
"ProviderBranchID": branchId.toString(), "ProviderBranchID": branchId.toString(),
}); });
} }

@ -23,7 +23,7 @@ class HomeFragment extends StatelessWidget {
const HomeFragment({Key? key}) : super(key: key); const HomeFragment({Key? key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: CustomAppBar( appBar: CustomAppBar(
isDrawerEnabled: true, isDrawerEnabled: true,

@ -1,6 +1,8 @@
import 'package:car_provider_app/config/provider_routes.dart'; import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart'; import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:flutter/cupertino.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/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
@ -34,21 +36,24 @@ class ServiceProviderWidget extends StatelessWidget {
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
shrinkWrap: true, shrinkWrap: true,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
BranchDetailModel branchDetailModel = model.branches!.data!.serviceProviderBranch![index];
return SizedBox( return SizedBox(
width: 90, width: 90,
child: Column( child: Column(
children: [ children: [
Image.asset( branchDetailModel.branchProfileImage
MyAssets.bnCar, .buildNetworkImage(
width: 80, height: 80,
height: 80, width: 80,
fit: BoxFit.cover, )
).toCircle(borderRadius: 100), .toCircle(borderRadius: 100),
8.height, 8.height,
model.branches!.data!.serviceProviderBranch![index].branchName!.toText( Flexible(
fontSize: 14, child: branchDetailModel.branchName!.toText(
isBold: true, fontSize: 14,
textAlign: TextAlign.center, isBold: true,
textAlign: TextAlign.center,
),
), ),
], ],
), ),

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
@ -48,8 +50,40 @@ class RequestDetailPage extends StatelessWidget {
errorValue: requestsVM.offerPriceError, errorValue: requestsVM.offerPriceError,
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
hint: LocaleKeys.enterAmount.tr(), hint: LocaleKeys.enterAmount.tr(),
numbersOnly: true,
onChanged: (v) => requestsVM.updateOfferPrice(v), onChanged: (v) => requestsVM.updateOfferPrice(v),
), ),
if (requestDetail.requestType == RequestsTypeEnum.serviceRequest.getIdFromRequestTypeStatusEnum()) ...[
12.height,
TxtField(
value: requestsVM.serviceItem,
errorValue: requestsVM.offerPriceError,
keyboardType: TextInputType.number,
hint: "Service Item",
onChanged: (v) => requestsVM.updateServiceItem(v),
),
12.height,
TxtField(
value: requestsVM.itemManufacturer,
errorValue: requestsVM.offerPriceError,
keyboardType: TextInputType.number,
hint: "Manufacturer",
onChanged: (v) => requestsVM.updateItemManufacturer(v),
),
12.height,
TxtField(
errorValue: "",
hint: "Manufactured On",
value: requestsVM.serviceItemCreatedOn,
isNeedClickAll: true,
postfixData: Icons.calendar_month_rounded,
postFixDataColor: MyColors.darkTextColor,
onTap: () async {
final formattedDate = await Utils.pickDateFromDatePicker(context);
requestsVM.updateServiceItemCreatedOn(formattedDate);
},
),
],
12.height, 12.height,
TxtField( TxtField(
maxLines: 5, maxLines: 5,
@ -87,7 +121,12 @@ class RequestDetailPage extends StatelessWidget {
); );
} }
Widget buildBottomButton({required RequestStatus requestStatus, required String statusText, required BuildContext context, required Function() onViewChatTapped}) { Widget buildBottomButton({
required RequestStatus requestStatus,
required String statusText,
required BuildContext context,
required Function() onViewChatTapped,
}) {
switch (requestStatus) { switch (requestStatus) {
case RequestStatus.submitted: case RequestStatus.submitted:
case RequestStatus.inProgress: case RequestStatus.inProgress:
@ -237,7 +276,7 @@ class RequestDetailPage extends StatelessWidget {
], ],
), ),
showItem("Customer Name", requestDetail.customerName), showItem("Customer Name", requestDetail.customerName),
showItem("Description", requestDetail.description), showItem("Description ", requestDetail.description),
showItem("Price Range:", ""), showItem("Price Range:", ""),
Row( Row(
children: [ children: [

@ -1,9 +1,8 @@
import 'dart:async'; import 'dart:async';
import 'package:car_provider_app/config/provider_routes.dart'; import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart'; import 'package:car_provider_app/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart';
import 'package:flutter/cupertino.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/general_models/m_response.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/services/services_list_page.dart'; import 'package:car_provider_app/views/settings/services/services_list_page.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
@ -11,7 +10,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; 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/models/provider_branches_models/branch_detail_model.dart'; import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
@ -26,7 +24,7 @@ import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class BranchDetailPage extends StatelessWidget { class BranchDetailPage extends StatelessWidget {
BranchDetailModel branchData; final BranchDetailModel branchData;
BranchDetailPage(this.branchData, {super.key}); BranchDetailPage(this.branchData, {super.key});
@ -41,7 +39,7 @@ class BranchDetailPage extends StatelessWidget {
} }
filterBranch() { filterBranch() {
branchData.branchServices!.forEach((element) { for (var element in branchData.branchServices!) {
categories.add( categories.add(
CategoryData( CategoryData(
id: element.categoryId, id: element.categoryId,
@ -49,27 +47,82 @@ class BranchDetailPage extends StatelessWidget {
categoryNameN: element.categoryName, categoryNameN: element.categoryName,
), ),
); );
}); }
categories = categories.toSet().toList(); categories = categories.toSet().toList();
for (var payment in categories) { for (var payment in categories) {
branchData.branchServices!.forEach((element) { for (var element in branchData.branchServices!) {
if (payment.id == element.categoryId) { if (payment.id == element.categoryId) {
payment.services ??= []; payment.services ??= [];
payment.services!.add(element); payment.services!.add(element);
} }
}); }
} }
branchData.categories = categories; branchData.categories = categories;
} }
Widget buildFooterActionWidget(BuildContext context) {
Widget actionWidget = const SizedBox();
if (AppState().userType == UserType.providerDealer && branchData.branchStatus == BranchStatusEnum.approvedOrActive) {
actionWidget = ShowFillButton(
title: LocaleKeys.assignDealerUser.tr(),
maxWidth: double.infinity,
backgroundColor: Colors.transparent,
borderColor: MyColors.darkPrimaryColor,
txtColor: MyColors.darkPrimaryColor,
isFilled: false,
onPressed: () async {
showMyBottomSheet(
context,
child: AssignDealerUserSheet(
branchId: branchData.id.toString(),
callBackFunc: () {
getBranchUsers(context);
},
),
);
},
);
} else if (branchData.branchStatus == BranchStatusEnum.pending) {
actionWidget = ShowFillButton(
title: "Pending Approval",
maxWidth: double.infinity,
backgroundColor: MyColors.darkWhiteColor,
borderColor: MyColors.darkPrimaryColor,
txtColor: MyColors.lightTextColor,
isFilled: true,
onPressed: () {},
);
} else if (branchData.branchStatus == BranchStatusEnum.rejected) {
actionWidget = Column(
children: [
Row(
children: [
('${LocaleKeys.rejectionComments.tr()}:').toText(fontSize: 16, color: MyColors.darkTextColor),
],
),
Row(
children: [
Flexible(
child: ('These are some dummy static comments from the Admin. Which will guide you regarding the next steps to resubmit.').toText(
fontSize: 14,
color: MyColors.primaryColor,
isItalic: true,
),
),
],
),
],
);
}
return actionWidget.paddingAll(21);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
filterBranch(); filterBranch();
getBranchUsers(context); getBranchUsers(context);
return Scaffold( return Scaffold(
appBar: CustomAppBar( appBar: CustomAppBar(title: LocaleKeys.branchDetail.tr()),
title: branchData.branchName.toString(),
),
body: Consumer<ServiceVM>(builder: (context, model, _) { body: Consumer<ServiceVM>(builder: (context, model, _) {
return SizedBox( return SizedBox(
width: double.infinity, width: double.infinity,
@ -80,15 +133,20 @@ class BranchDetailPage extends StatelessWidget {
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
children: [ children: [
Padding( Column(
padding: const EdgeInsets.all(20.0), children: [
child: Column( Row(
children: [ children: [
Row( Expanded(
children: [ child: Row(
Expanded( children: [
child: titleWidget(MyAssets.icBranches, LocaleKeys.branchInfo.tr()), branchData.branchProfileImage.buildNetworkImage(),
12.width,
LocaleKeys.branchInfo.tr().toText(fontSize: 16, color: Colors.black, isBold: true),
],
), ),
),
if (branchData.branchStatus != BranchStatusEnum.pending) ...[
IconButton( IconButton(
onPressed: () { onPressed: () {
navigateWithName(context, ProviderAppRoutes.defineBranch, arguments: branchData); navigateWithName(context, ProviderAppRoutes.defineBranch, arguments: branchData);
@ -96,23 +154,24 @@ class BranchDetailPage extends StatelessWidget {
icon: SvgPicture.asset(MyAssets.icEdit), icon: SvgPicture.asset(MyAssets.icEdit),
) )
], ],
), ],
Column( ),
children: [ Column(
showData("${LocaleKeys.country.tr()}:", branchData.countryName.toString()), children: [
showData("${LocaleKeys.city.tr()}:", branchData.cityName.toString()), showData("${LocaleKeys.country.tr()}:", branchData.countryName.toString()),
showData("${LocaleKeys.branchName.tr()}:", branchData.branchName.toString()), showData("${LocaleKeys.city.tr()}:", branchData.cityName.toString()),
showData("${LocaleKeys.branchDescription.tr()}:", branchData.branchDescription.toString()), showData("${LocaleKeys.branchName.tr()}:", branchData.branchName.toString()),
showData("${LocaleKeys.address.tr()}:", branchData.address.toString()), showData("${LocaleKeys.branchDescription.tr()}:", branchData.branchDescription.toString()),
], showData("${LocaleKeys.address.tr()}:", branchData.address.toString()),
), ],
], ),
), ],
), ).horPaddingMain(),
10.height,
Container( Container(
width: double.infinity, width: double.infinity,
color: MyColors.darkIconColor, color: MyColors.darkIconColor,
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 8), padding: const EdgeInsets.symmetric(horizontal: 21, vertical: 10),
child: Row( child: Row(
children: [ children: [
const Icon( const Icon(
@ -122,11 +181,10 @@ class BranchDetailPage extends StatelessWidget {
8.width, 8.width,
Expanded( Expanded(
child: LocaleKeys.setorEditBranchSchedule.tr().toText( child: LocaleKeys.setorEditBranchSchedule.tr().toText(
isUnderLine: true, isUnderLine: true,
fontSize: 14, fontSize: 12,
isBold: true, color: Colors.white,
color: Colors.white, ),
),
), ),
const Icon( const Icon(
Icons.arrow_forward, Icons.arrow_forward,
@ -147,15 +205,15 @@ class BranchDetailPage extends StatelessWidget {
color: Colors.white, color: Colors.white,
).toContainer( ).toContainer(
borderRadius: 100, borderRadius: 100,
paddingAll: 3, paddingAll: 2,
backgroundColor: MyColors.darkIconColor, backgroundColor: MyColors.darkIconColor,
), ),
8.width, 8.width,
LocaleKeys.addServices.tr().toText( LocaleKeys.addNewService.tr().toText(
fontSize: 14, fontSize: 15,
color: MyColors.lightTextColor, color: MyColors.lightTextColor,
isBold: true, isBold: true,
), ),
], ],
) )
.toContainer( .toContainer(
@ -175,99 +233,101 @@ class BranchDetailPage extends StatelessWidget {
), ),
); );
}), }),
categories.isEmpty ListView.separated(
? LocaleKeys.noServiceAddedYet.tr().toText(fontSize: 12) itemBuilder: (context, pIndex) {
: ListView.separated( return InkWell(
itemBuilder: (context, pIndex) { onTap: () {
return InkWell( categories[pIndex].branchId = branchData.id.toString();
onTap: () { categories[pIndex].branchName = branchData.branchName.toString();
categories[pIndex].branchId = branchData.id.toString(); navigateWithName(context, ProviderAppRoutes.servicesList, arguments: categories[pIndex]);
categories[pIndex].branchName = branchData.branchName.toString(); },
navigateWithName(context, ProviderAppRoutes.servicesList, arguments: categories[pIndex]); child: Row(
}, crossAxisAlignment: CrossAxisAlignment.start,
child: Row( mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, children: [
mainAxisSize: MainAxisSize.min, Padding(
children: [ padding: const EdgeInsets.only(top: 5),
Padding( child: SvgPicture.asset(
padding: const EdgeInsets.only(top: 5), MyAssets.maintenanceIcon,
child: SvgPicture.asset( width: 16,
MyAssets.maintenanceIcon, height: 16,
width: 16, ),
height: 16, ),
8.width,
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
categories[pIndex].categoryName.toString().toText(fontSize: 16, isBold: true),
// Padding(
// padding: const EdgeInsets.all(4.0),
// child: SvgPicture.asset(
// MyAssets.icEdit,
// width: 16,
// height: 16,
// ),
// ),
],
), ),
), Row(
8.width, mainAxisAlignment: MainAxisAlignment.end,
Expanded( crossAxisAlignment: CrossAxisAlignment.end,
child: Column( children: [
crossAxisAlignment: CrossAxisAlignment.start, Expanded(
mainAxisAlignment: MainAxisAlignment.start, child: ListView.builder(
children: [ itemBuilder: (context, index) {
Row( return Container(
children: [ child: (EasyLocalization
categories[pIndex].categoryName.toString().toText(fontSize: 16, isBold: true), .of(context)
// Padding( ?.currentLocale
// padding: const EdgeInsets.all(4.0), ?.countryCode == "SA"
// child: SvgPicture.asset( ? categories[pIndex].services![index].serviceDescriptionN.toString()
// MyAssets.icEdit, : categories[pIndex].services![index].serviceDescription.toString())
// width: 16, .toText(
// height: 16, fontSize: 12,
// ), color: MyColors.lightTextColor,
// ), isBold: true,
], ),
mainAxisAlignment: MainAxisAlignment.spaceBetween, );
), },
Row( itemCount: categories[pIndex].services?.length,
children: [ physics: const NeverScrollableScrollPhysics(),
Expanded( shrinkWrap: true,
child: ListView.builder( padding: EdgeInsets.zero,
itemBuilder: (context, index) {
return Container(
child: (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA"
? categories[pIndex].services![index].serviceDescriptionN.toString()
: categories[pIndex].services![index].serviceDescription.toString())
.toText(
fontSize: 12,
color: MyColors.lightTextColor,
isBold: true,
),
);
},
itemCount: categories[pIndex].services?.length,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
padding: EdgeInsets.zero,
),
), ),
const Padding( ),
padding: EdgeInsets.all(4.0), const Padding(
child: Icon( padding: EdgeInsets.all(4.0),
Icons.arrow_forward, child: Icon(
size: 20, Icons.arrow_forward,
), size: 20,
), ),
], ),
mainAxisAlignment: MainAxisAlignment.end, ],
crossAxisAlignment: CrossAxisAlignment.end, )
) ],
], )),
)), ],
], ).toContainer(
).toContainer( borderRadius: 0,
width: double.infinity, width: double.infinity,
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
isShadowEnabled: true, isShadowEnabled: true,
),
);
},
itemCount: categories.length,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
padding: const EdgeInsets.all(20),
separatorBuilder: (BuildContext context, int index) {
return 12.height;
},
), ),
);
},
itemCount: categories.length,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
padding: const EdgeInsets.all(20),
separatorBuilder: (BuildContext context, int index) {
return 12.height;
},
),
12.height, 12.height,
], ],
), ),
@ -278,29 +338,7 @@ class BranchDetailPage extends StatelessWidget {
height: 1, height: 1,
color: Colors.grey[100], color: Colors.grey[100],
), ),
if (AppState().userType == UserType.providerDealer) buildFooterActionWidget(context),
Padding(
padding: const EdgeInsets.all(12.0),
child: ShowFillButton(
title: LocaleKeys.assignDealerUser.tr(),
maxWidth: double.infinity,
backgroundColor: Colors.transparent,
borderColor: MyColors.darkPrimaryColor,
txtColor: MyColors.darkPrimaryColor,
isFilled: false,
onPressed: () async {
showMyBottomSheet(
context,
child: AssignDealerUserSheet(
branchId: branchData.id.toString(),
callBackFunc: () {
getBranchUsers(context);
},
),
);
},
),
),
], ],
), ),
); );
@ -310,7 +348,9 @@ class BranchDetailPage extends StatelessWidget {
bool validation(BuildContext context) { bool validation(BuildContext context) {
bool isValid = false; bool isValid = false;
for (var element in context.read<ServiceVM>().allProviderDealersList) { for (var element in context
.read<ServiceVM>()
.allProviderDealersList) {
if (element.isBranchUser ?? false) { if (element.isBranchUser ?? false) {
isValid = true; isValid = true;
} }
@ -318,21 +358,6 @@ class BranchDetailPage extends StatelessWidget {
return isValid; return isValid;
} }
Widget titleWidget(String icon, String title) {
return Row(
children: [
SvgPicture.asset(
icon,
width: 18,
height: 18,
color: MyColors.darkPrimaryColor,
),
12.width,
title.toText(fontSize: 16, color: Colors.black, isBold: true),
],
);
}
Widget showData(String title, String value) { Widget showData(String title, String value) {
return Row( return Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,

@ -3,16 +3,9 @@ import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:geolocator/geolocator.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; 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/models/general_models/m_response.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart'; import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
@ -55,105 +48,90 @@ class BranchListPage extends StatelessWidget {
), ),
Expanded( Expanded(
child: Consumer<ServiceVM>( child: Consumer<ServiceVM>(
builder: (context, model, _) { builder: (context, serviceVM, _) {
if (model.state == ViewState.busy) { if (serviceVM.state == ViewState.busy) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else { } else {
List<BranchDetailModel> branches = []; List<BranchDetailModel> branches = [];
if (model.branches!.data != null) { if (serviceVM.branches!.data != null) {
branches = model.branches!.data!.serviceProviderBranch!.where((element) => model.selectedBranchStatus == element.statusId).toList(); if (serviceVM.selectedBranchStatus == 3) {
// 3 means active branch
branches = serviceVM.branches!.data!.serviceProviderBranch!.where((element) => element.statusId == 3).toList();
} else {
branches = serviceVM.branches!.data!.serviceProviderBranch!.where((element) {
return element.statusId != 3; // means rest of the branches
}).toList();
}
} }
return RefreshIndicator( return RefreshIndicator(
onRefresh: () async { onRefresh: () async => await context.read<ServiceVM>().getBranchAndServices(),
await context.read<ServiceVM>().getBranchAndServices();
},
child: branches.isEmpty child: branches.isEmpty
? Center(child: Text(LocaleKeys.no_branch.tr())) ? Center(child: LocaleKeys.no_branch.tr().toText(fontSize: 16, color: MyColors.lightTextColor))
: ListView.separated( : ListView.separated(
itemBuilder: (context, index) { itemBuilder: (context, index) {
BranchDetailModel branchModel = branches[index];
return Row( return Row(
children: [ children: [
Container( branchModel.branchProfileImage.buildNetworkImage(width: 74, height: 50),
width: 74,
height: 50,
decoration: const BoxDecoration(
color: MyColors.darkPrimaryColor,
borderRadius: BorderRadius.all(Radius.circular(8)),
),
padding: const EdgeInsets.all(6),
child: SvgPicture.asset(
MyAssets.icBranches,
color: Colors.white,
),
),
12.width, 12.width,
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Row( Utils.statusContainerChip(
children: [ text: branchModel.branchStatusLabel ?? "",
const Icon( chipColor: Utils.getChipColorByBranchStatus(branchModel.branchStatus!),
Icons.place,
size: 12,
color: MyColors.darkPrimaryColor,
),
Geolocator.distanceBetween(AppState().currentLocation.latitude, AppState().currentLocation.latitude, double.parse(branches[index].latitude ?? "0"),
double.parse(branches[index].longitude ?? "0"))
.toStringAsFixed(2)
.toText(
fontSize: 12,
color: MyColors.darkPrimaryColor,
)
],
), ),
5.height,
Text( Text(
branches[index].branchName ?? "", branchModel.branchName ?? "",
style: const TextStyle( style: const TextStyle(
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
LocaleKeys.tapToEdit.tr().toText(fontSize: 10, color: MyColors.grey70Color), Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
child: (branchModel.branchDescription ?? "").toText(
fontSize: 10,
overflow: TextOverflow.ellipsis,
color: MyColors.grey70Color,
maxLines: 2,
)),
const Icon(Icons.arrow_forward_rounded, size: 18),
],
)
], ],
), ),
), ),
12.width, // 12.width,
IconButton( // Column(
onPressed: () async { // crossAxisAlignment: CrossAxisAlignment.end,
Utils.showLoading(context); // mainAxisAlignment: MainAxisAlignment.end,
MResponse res = await model.updateBranch(branches[index].id ?? 0, branches[index].branchName ?? "", branches[index].branchDescription ?? "", //
branches[index].cityId.toString(), branches[index].address ?? "", branches[index].latitude.toString(), branches[index].longitude.toString(), // children: [
isNeedToDelete: false); // IconButton(
Utils.hideLoading(context); // onPressed: () async {},
if (res.messageStatus == 1) { // icon: const Icon(Icons.delete),
Utils.showToast(LocaleKeys.branch_deleted.tr()); // color: Colors.red,
model.setState(ViewState.idle); // ),
} else { // const Icon(Icons.arrow_forward_rounded, size: 16),
Utils.showToast(res.message ?? ""); // ],
} // ),
},
icon: const Icon(Icons.delete),
color: Colors.red,
),
const Icon(
Icons.arrow_forward_rounded,
size: 16,
),
], ],
).toContainer().onPress(() async { ).toWhiteContainer(width: double.infinity, pading: const EdgeInsets.all(12)).onPress(() async {
branches[index].countryID = model.branches!.data!.countryID; branchModel.countryID = serviceVM.branches!.data!.countryID;
branches[index].countryName = model.branches!.data!.countryName; branchModel.countryName = serviceVM.branches!.data!.countryName;
navigateWithName(context, ProviderAppRoutes.branchDetail, arguments: branches[index]); navigateWithName(context, ProviderAppRoutes.branchDetail, arguments: branchModel);
}); });
}, },
separatorBuilder: (context, index) { separatorBuilder: (context, index) => 12.height,
return 12.height;
},
itemCount: branches.length, itemCount: branches.length,
padding: const EdgeInsets.all(12), ).paddingAll(21),
),
); );
} }
}, },

@ -0,0 +1,250 @@
import 'dart:async';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:car_provider_app/views/location/pick_location_page.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:provider/provider.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/views/advertisement/ad_creation_steps/ad_creation_steps_containers.dart';
import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.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/extensions/extensions_widget.dart';
import 'package:mc_common_app/widgets/txt_field.dart';
class CreateBranchView extends StatefulWidget {
final BranchDetailModel? branchData;
const CreateBranchView(this.branchData, {super.key});
@override
State<CreateBranchView> createState() => _CreateBranchViewState();
}
class _CreateBranchViewState extends State<CreateBranchView> {
late ServiceVM branchVM;
@override
void initState() {
super.initState();
scheduleMicrotask(() {
branchVM = context.read<ServiceVM>();
branchVM.getAllCountriesList(widget.branchData, EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
title: LocaleKeys.createBranch.tr(),
),
body: Consumer<ServiceVM>(builder: (context, serviceVM, _) {
return SizedBox(
width: double.infinity,
height: double.infinity,
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
children: [
// LocaleKeys.chooseCountry.tr().toText(fontSize: 14, color: MyColors.lightTextColor),
// 8.height,
serviceVM.country != null
? DropdownField(
(DropValue value) {
serviceVM.countryValue = DropValue(value.id, value.value, "");
serviceVM.countryCode = value.subValue;
serviceVM.countryId = value.id;
serviceVM.getAllCities(widget.branchData, EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
},
isSelectAble: widget.branchData == null ? true : false,
list: serviceVM.countryDropList,
dropdownValue: serviceVM.countryValue,
hint: "${LocaleKeys.chooseCountry.tr()}*",
)
: const CircularProgressIndicator(),
12.height,
if (serviceVM.countryId != -1)
serviceVM.cities != null
? serviceVM.citiesDropList.isEmpty
? Text(LocaleKeys.no_city_available.tr())
: DropdownField(
(DropValue value) {
serviceVM.cityValue = DropValue(value.id, value.value, "");
serviceVM.setOnlyState(ViewState.busy);
serviceVM.cityId = value.id;
serviceVM.setState(ViewState.idle);
},
list: serviceVM.citiesDropList,
dropdownValue: serviceVM.cityValue,
hint: "${LocaleKeys.chooseCity.tr()}*",
)
: const CircularProgressIndicator(),
12.height,
if (serviceVM.cityId != -1)
Column(
children: [
TxtField(
hint: "${LocaleKeys.branchName.tr()}*",
value: serviceVM.branchName,
onChanged: (v) {
serviceVM.branchName = v;
},
),
12.height,
TxtField(
hint: "${LocaleKeys.branchDescription.tr()}*",
value: serviceVM.branchDescription,
onChanged: (v) {
serviceVM.branchDescription = v;
},
),
12.height,
TxtField(
hint: LocaleKeys.address.tr(),
isNeedClickAll: false,
maxLines: 3,
value: serviceVM.address,
onChanged: (v) {
serviceVM.address = v;
},
),
12.height,
InkWell(
onTap: () {
navigateTo(
context,
PickLocationPage(
onPickAddress: (double latitude, double longitude, String address) {
serviceVM.latitude = latitude;
serviceVM.longitude = longitude;
serviceVM.address = address;
serviceVM.setState(ViewState.idle);
},
),
);
},
child: Container(
width: double.infinity,
height: 45,
decoration: BoxDecoration(
color: Colors.transparent,
border: Border.all(color: MyColors.darkPrimaryColor, width: 2),
borderRadius: const BorderRadius.all(Radius.circular(8)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Icon(
Icons.place_outlined,
size: 18,
color: MyColors.darkPrimaryColor,
),
8.width,
Text(
LocaleKeys.pickAddress.tr(),
style: const TextStyle(
color: MyColors.darkPrimaryColor,
),
),
],
),
),
),
12.height,
DottedRectContainer(
onTap: () => serviceVM.pickMultipleImages(),
text: LocaleKeys.attachImage.tr(),
icon: MyAssets.attachmentIcon.buildSvg(),
),
if (serviceVM.branchImageError != "") ...[
10.height,
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
serviceVM.branchImageError.toText(fontSize: 14, color: Colors.red),
],
).paddingOnly(right: 10)
],
if (serviceVM.pickedBranchImages.isNotEmpty) ...[
16.height,
PickedFilesContainer(
pickedFiles: serviceVM.pickedBranchImages,
onCrossPressedPrimary: serviceVM.removeImageFromList,
onAddFilePressed: () {
serviceVM.pickMultipleImages();
},
),
],
],
),
],
),
),
),
),
if (widget.branchData == null || widget.branchData!.id == null) ...[
SizedBox(
width: double.infinity,
child: Padding(
padding: const EdgeInsets.only(left: 20, right: 20, bottom: 20),
child: ShowFillButton(
maxHeight: 55,
title: LocaleKeys.createBranch.tr(),
onPressed: () async {
await serviceVM.onCreateBranchPressed(
context: context,
branchName: serviceVM.branchName,
branchDesc: serviceVM.branchDescription,
cityID: serviceVM.cityId,
address: serviceVM.address,
latitude: serviceVM.latitude,
longitude: serviceVM.longitude,
);
},
),
),
),
] else ...[
SizedBox(
width: double.infinity,
child: Padding(
padding: const EdgeInsets.only(left: 20, right: 20, bottom: 20),
child: ShowFillButton(
maxHeight: 55,
title: widget.branchData != null ? (widget.branchData!.id == null ? LocaleKeys.createBranch.tr() : LocaleKeys.updateBranch.tr()) : LocaleKeys.createBranch.tr(),
onPressed: () async {
await serviceVM.updateBranch(
widget.branchData!.id ?? 0,
serviceVM.branchName,
serviceVM.branchDescription,
serviceVM.cityId.toString(),
serviceVM.address,
serviceVM.latitude.toString(),
serviceVM.longitude.toString(),
);
},
),
),
),
],
],
),
);
}),
);
}
}

@ -1,11 +1,11 @@
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/general_models/generic_resp_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart'; import 'package:car_provider_app/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; 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/models/general_models/m_response.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/utils/utils.dart';
@ -129,7 +129,7 @@ class _DealerUserPageState extends State<DealerUserPage> {
"isActive": false, "isActive": false,
}; };
Utils.showLoading(context); Utils.showLoading(context);
MResponse response = await provider.removeDealerFromBranch(map); GenericRespModel response = await provider.removeDealerFromBranch(map);
Utils.hideLoading(context); Utils.hideLoading(context);
if (response.messageStatus == 1) { if (response.messageStatus == 1) {
getBranchUsers(); getBranchUsers();

@ -1,17 +1,16 @@
import 'package:car_provider_app/view_models/dashboard_view_model.dart'; import 'package:car_provider_app/view_models/dashboard_view_model.dart';
import 'package:flutter/cupertino.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/general_models/generic_resp_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/branch/dealer/widget/add_phone_num_wiget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; 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/models/general_models/m_response.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/utils/utils.dart';
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/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -50,6 +49,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
return Container( return Container(
width: double.infinity, width: double.infinity,
height: MediaQuery.of(context).size.height / 1.2, height: MediaQuery.of(context).size.height / 1.2,
padding: const EdgeInsets.all(21),
color: Colors.white, color: Colors.white,
child: Column( child: Column(
children: [ children: [
@ -65,10 +65,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
itemBuilder: (context, index) { itemBuilder: (context, index) {
return dealerUsersWidget(model, index); return dealerUsersWidget(model, index);
}, },
separatorBuilder: (context, index) { separatorBuilder: (context, index) => 12.height,
return 12.height;
},
padding: const EdgeInsets.all(12),
itemCount: model.allProviderDealersList.length, itemCount: model.allProviderDealersList.length,
); );
} }
@ -85,6 +82,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
ShowFillButton( ShowFillButton(
title: LocaleKeys.assignDealerUser.tr(), title: LocaleKeys.assignDealerUser.tr(),
maxWidth: double.infinity, maxWidth: double.infinity,
maxHeight: 55,
onPressed: () async { onPressed: () async {
if (validation()) { if (validation()) {
Utils.showLoading(context); Utils.showLoading(context);
@ -98,7 +96,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
"dealershipUserIDs": userIds, "dealershipUserIDs": userIds,
"serviceProviderBranchID": widget.branchId, "serviceProviderBranchID": widget.branchId,
}; };
MResponse response = await provider.assignDealerToBranch(map); GenericRespModel response = await provider.assignDealerToBranch(map);
Utils.hideLoading(context); Utils.hideLoading(context);
if (response.messageStatus == 1) { if (response.messageStatus == 1) {
Utils.showToast(response.message.toString()); Utils.showToast(response.message.toString());
@ -112,8 +110,9 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
), ),
12.height, 12.height,
ShowFillButton( ShowFillButton(
title: ("+ " + LocaleKeys.createNewUser.tr()), title: ("+ ${LocaleKeys.createNewUser.tr()}"),
maxWidth: double.infinity, maxWidth: double.infinity,
maxHeight: 55,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
borderColor: MyColors.darkPrimaryColor, borderColor: MyColors.darkPrimaryColor,
txtColor: MyColors.darkPrimaryColor, txtColor: MyColors.darkPrimaryColor,
@ -125,7 +124,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
}, },
) )
], ],
).paddingAll(12), )
], ],
), ),
); );
@ -159,7 +158,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
], ],
).toWhiteContainer( ).toWhiteContainer(
width: double.infinity, width: double.infinity,
borderRadius: 12, borderRadius: 0,
pading: const EdgeInsets.symmetric(horizontal: 6, vertical: 12), pading: const EdgeInsets.symmetric(horizontal: 6, vertical: 12),
); );
} }
@ -167,8 +166,10 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
Widget itemWidget(String title, String value) { Widget itemWidget(String title, String value) {
return Row( return Row(
children: [ children: [
(title + ": ").toText(isBold: true, color: MyColors.lightTextColor), ("$title: ").toText(isBold: true, color: MyColors.lightTextColor),
value.toText(isBold: true), Flexible(
child: value.toText(isBold: true, overflow: TextOverflow.ellipsis),
),
], ],
); );
} }

@ -1,230 +0,0 @@
import 'dart:async';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:car_provider_app/view_models/branch_view_model.dart';
import 'package:car_provider_app/views/location/pick_location_page.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/general_models/m_response.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart';
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';
class DefineBranchPage extends StatefulWidget {
BranchDetailModel? branchData;
DefineBranchPage(this.branchData);
@override
State<DefineBranchPage> createState() => _DefineBranchPageState();
}
class _DefineBranchPageState extends State<DefineBranchPage> {
late ServiceVM branchVM;
@override
void initState() {
// TODO: implement initState
super.initState();
scheduleMicrotask(() {
branchVM = context.read<ServiceVM>();
branchVM.getAllCountriesList(widget.branchData, EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
});
}
@override
Widget build(BuildContext context) {
// ServiceVM branchVM = context.read<ServiceVM>();
// branchVM.getAllCountriesList(widget.branchData,
// EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
return Scaffold(
appBar: CustomAppBar(
title: LocaleKeys.defineBranches.tr(),
),
body: Consumer<ServiceVM>(builder: (context, model, _) {
return SizedBox(
width: double.infinity,
height: double.infinity,
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
children: [
// LocaleKeys.chooseCountry.tr().toText(fontSize: 14, color: MyColors.lightTextColor),
// 8.height,
model.country != null
? DropdownField(
(DropValue value) {
model.countryValue = DropValue(value.id, value.value, "");
model.countryCode = value.subValue;
model.countryId = value.id;
model.getAllCities(widget.branchData, EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA");
},
isSelectAble: widget.branchData == null ? true : false,
list: model.countryDropList,
dropdownValue: model.countryValue,
hint: "${LocaleKeys.chooseCountry.tr()}*",
)
: const CircularProgressIndicator(),
12.height,
if (model.countryId != -1)
model.cities != null
? model.citiesDropList.isEmpty
? Text(LocaleKeys.no_city_available.tr())
: DropdownField(
(DropValue value) {
model.cityValue = DropValue(value.id, value.value, "");
model.setOnlyState(ViewState.busy);
model.cityId = value.id;
model.setState(ViewState.idle);
},
list: model.citiesDropList,
dropdownValue: model.cityValue,
hint: "${LocaleKeys.chooseCity.tr()}*",
)
: const CircularProgressIndicator(),
12.height,
if (model.cityId != -1)
Column(
children: [
TxtField(
hint: "${LocaleKeys.branchName.tr()}*",
value: model.branchName,
onChanged: (v) {
model.branchName = v;
},
),
12.height,
TxtField(
hint: "${LocaleKeys.branchDescription.tr()}*",
value: model.branchDescription,
onChanged: (v) {
model.branchDescription = v;
},
),
12.height,
TxtField(
hint: LocaleKeys.address.tr(),
isNeedClickAll: false,
maxLines: 5,
value: model.address,
onChanged: (v) {
model.address = v;
},
),
12.height,
InkWell(
onTap: () {
navigateTo(
context,
PickLocationPage(
onPickAddress: (double latitude, double longitude, String address) {
model.latitude = latitude;
model.longitude = longitude;
model.address = address;
model.setState(ViewState.idle);
},
),
);
},
child: Container(
width: double.infinity,
height: 45,
decoration: BoxDecoration(
color: Colors.transparent,
border: Border.all(color: MyColors.darkPrimaryColor, width: 2),
borderRadius: const BorderRadius.all(Radius.circular(8)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Icon(
Icons.place_outlined,
size: 18,
color: MyColors.darkPrimaryColor,
),
8.width,
Text(
LocaleKeys.pickAddress.tr(),
style: const TextStyle(
color: MyColors.darkPrimaryColor,
),
),
const Icon(
Icons.place_outlined,
size: 18,
color: Colors.transparent,
),
],
),
),
),
],
),
],
),
),
),
),
SizedBox(
width: double.infinity,
child: Padding(
padding: const EdgeInsets.only(left: 20, right: 20, bottom: 20),
child: ShowFillButton(
title: widget.branchData != null ? (widget.branchData!.id == null ? LocaleKeys.createBranch.tr() : LocaleKeys.updateBranch.tr()) : LocaleKeys.createBranch.tr(),
onPressed: () async {
if (widget.branchData == null) {
Utils.showLoading(context);
MResponse res =
await model.createBranch(model.branchName, model.branchDescription, model.cityId.toString(), model.address, model.latitude.toString(), model.longitude.toString());
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast(LocaleKeys.branch_created.tr());
pop(context);
model.getBranchAndServices();
} else {
Utils.showToast(res.message ?? "");
}
} else {
Utils.showLoading(context);
MResponse res = await model.updateBranch(
widget.branchData!.id ?? 0, model.branchName, model.branchDescription, model.cityId.toString(), model.address, model.latitude.toString(), model.longitude.toString());
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast(LocaleKeys.branch_updated.tr());
pop(context);
pop(context);
model.getBranchAndServices();
} else {
Utils.showToast(res.message ?? "");
}
}
},
),
),
),
],
),
);
}),
);
}
}

@ -10,7 +10,7 @@ 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/main.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/appointments_models/schedule_model.dart';
import 'package:mc_common_app/models/general_models/m_response.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/utils/date_helper.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
@ -24,7 +24,7 @@ import 'package:easy_localization/easy_localization.dart';
class AddSchedulesPage extends StatefulWidget { class AddSchedulesPage extends StatefulWidget {
AddSchedulesPage({Key? key}) : super(key: key); const AddSchedulesPage({Key? key}) : super(key: key);
@override @override
State<AddSchedulesPage> createState() => _AddSchedulesPageState(); State<AddSchedulesPage> createState() => _AddSchedulesPageState();
@ -318,7 +318,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
}; };
Utils.showLoading(context); Utils.showLoading(context);
MResponse scheduleResponse = await model.createSchedule(map); GenericRespModel scheduleResponse = await model.createSchedule(map);
if (scheduleResponse.messageStatus == 1) { if (scheduleResponse.messageStatus == 1) {
List<int> services = []; List<int> services = [];
for (var element in model.selectedServicesItems) { for (var element in model.selectedServicesItems) {
@ -331,7 +331,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
"serviceGroupDescription": "string" "serviceGroupDescription": "string"
}; };
MResponse servicesResponse = await model.addServicesInSchedule(map1); GenericRespModel servicesResponse = await model.addServicesInSchedule(map1);
Utils.hideLoading(context); Utils.hideLoading(context);
if (servicesResponse.messageStatus == 1) { if (servicesResponse.messageStatus == 1) {
Utils.showToast("Successfully schedule created"); Utils.showToast("Successfully schedule created");
@ -372,7 +372,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
}; };
Utils.showLoading(context); Utils.showLoading(context);
MResponse scheduleResponse = await model.updateSchedule(map); GenericRespModel scheduleResponse = await model.updateSchedule(map);
if (scheduleResponse.messageStatus == 1) { if (scheduleResponse.messageStatus == 1) {
List<int> services = []; List<int> services = [];
for (var element in model.selectedServicesItems) { for (var element in model.selectedServicesItems) {
@ -385,7 +385,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
"serviceGroupDescription": "string", "serviceGroupDescription": "string",
}; };
MResponse servicesResponse = await model.updateServicesInSchedule(map1); GenericRespModel servicesResponse = await model.updateServicesInSchedule(map1);
Utils.hideLoading(context); Utils.hideLoading(context);
if (servicesResponse.messageStatus == 1) { if (servicesResponse.messageStatus == 1) {
Utils.showToast("Successfully schedule updated"); Utils.showToast("Successfully schedule updated");

@ -7,7 +7,7 @@ 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/main.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/appointments_models/schedule_model.dart';
import 'package:mc_common_app/models/general_models/m_response.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/utils/date_helper.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
@ -71,7 +71,7 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
IconButton( IconButton(
onPressed: () async { onPressed: () async {
Utils.showLoading(context); Utils.showLoading(context);
MResponse res = await value.setScheduleInactive(value.schedule!.data![index].id!, value.schedule!.data![index].serviceProviderBranchId!); GenericRespModel res = await value.setScheduleInactive(value.schedule!.data![index].id!, value.schedule!.data![index].serviceProviderBranchId!);
Utils.hideLoading(context); Utils.hideLoading(context);
if (res.messageStatus == 1) { if (res.messageStatus == 1) {
Utils.showToast(LocaleKeys.branch_deleted.tr()); Utils.showToast(LocaleKeys.branch_deleted.tr());

@ -3,8 +3,7 @@ import 'dart:convert';
import 'package:car_provider_app/view_models/items_view_model.dart'; import 'package:car_provider_app/view_models/items_view_model.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/general_models/m_response.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/theme/colors.dart';
import 'package:mc_common_app/utils/app_permission_handler.dart'; import 'package:mc_common_app/utils/app_permission_handler.dart';
@ -228,7 +227,7 @@ class _CreateItemPageState extends State<CreateItemPage> {
"isAppointmentCustomerLoc": isHomeAppointmentAvailable "isAppointmentCustomerLoc": isHomeAppointmentAvailable
}; };
Utils.showLoading(context); Utils.showLoading(context);
MResponse mResponse = await model!.createServiceItem(map); GenericRespModel mResponse = await model!.createServiceItem(map);
Utils.hideLoading(context); Utils.hideLoading(context);
if (mResponse.messageStatus == 1) { if (mResponse.messageStatus == 1) {
model!.getServiceItems(itemData!.serviceProviderServiceId ?? 0); model!.getServiceItems(itemData!.serviceProviderServiceId ?? 0);
@ -251,7 +250,7 @@ class _CreateItemPageState extends State<CreateItemPage> {
"isAppointmentCustomerLoc": isHomeAppointmentAvailable "isAppointmentCustomerLoc": isHomeAppointmentAvailable
}; };
Utils.showLoading(context); Utils.showLoading(context);
MResponse mResponse = await model!.updateServiceItem(map); GenericRespModel mResponse = await model!.updateServiceItem(map);
Utils.hideLoading(context); Utils.hideLoading(context);
if (mResponse.messageStatus == 1) { if (mResponse.messageStatus == 1) {
model!.getServiceItems(itemData!.serviceProviderServiceId ?? 0); model!.getServiceItems(itemData!.serviceProviderServiceId ?? 0);

@ -1,13 +1,11 @@
import 'dart:async'; import 'dart:async';
import 'package:car_provider_app/generated/locale_keys.g.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/general_models/generic_resp_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/services/services_list_page.dart'; import 'package:car_provider_app/views/settings/services/services_list_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; 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/models/general_models/m_response.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/utils/utils.dart';
@ -21,9 +19,9 @@ import 'package:mc_common_app/widgets/txt_field.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class CreateServicesPage3 extends StatefulWidget { class CreateServicesPage3 extends StatefulWidget {
CreateBranchModel? branchModel; final CreateBranchModel? branchModel;
CreateServicesPage3(this.branchModel, {Key? key}) : super(key: key); const CreateServicesPage3(this.branchModel, {Key? key}) : super(key: key);
@override @override
State<CreateServicesPage3> createState() => _CreateServicesPage3State(); State<CreateServicesPage3> createState() => _CreateServicesPage3State();
@ -31,19 +29,12 @@ class CreateServicesPage3 extends StatefulWidget {
class _CreateServicesPage3State extends State<CreateServicesPage3> { class _CreateServicesPage3State extends State<CreateServicesPage3> {
bool isAppointmentAvailable = false; bool isAppointmentAvailable = false;
bool isHomeAppointmentAvailable = false; bool isHomeAppointmentAvailable = false;
int serviceRage = 0; int serviceRage = 0;
String chargersPerKm = "0"; String chargersPerKm = "0";
int? categoryId; int? categoryId;
int? serviceId = -1; int? serviceId = -1;
DropValue? category; DropValue? category;
DropValue? service; DropValue? service;
@override @override
@ -68,9 +59,8 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: CustomAppBar(title: LocaleKeys.defineServices.tr()), appBar: CustomAppBar(title: LocaleKeys.addServices.tr()),
body: SizedBox( body: SizedBox(
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,
@ -84,19 +74,19 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
padding: const EdgeInsets.all(20.0), padding: const EdgeInsets.all(20.0),
child: Column( child: Column(
children: [ children: [
Text( // Text(
widget.branchModel!.branchName ?? "N/A", // widget.branchModel!.branchName ?? "N/A",
style: const TextStyle( // style: const TextStyle(
fontSize: 12, // fontSize: 12,
fontWeight: FontWeight.bold, // fontWeight: FontWeight.bold,
), // ),
).toContainer( // ).toContainer(
padding: const EdgeInsets.only(left: 8, right: 8, bottom: 12, top: 12), // padding: const EdgeInsets.only(left: 8, right: 8, bottom: 12, top: 12),
backgroundColor: MyColors.textFieldColor, // backgroundColor: MyColors.textFieldColor,
borderRadius: 0, // borderRadius: 0,
width: double.infinity, // width: double.infinity,
), // ),
12.height, // 12.height,
(widget.branchModel!.categoryId != null) (widget.branchModel!.categoryId != null)
? Text( ? Text(
widget.branchModel!.categoryName ?? "N/A", widget.branchModel!.categoryName ?? "N/A",
@ -275,7 +265,7 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
} }
// print(map); // print(map);
Utils.showLoading(context); Utils.showLoading(context);
MResponse mResponse = await model.createService(map); GenericRespModel mResponse = await model.createService(map);
model.getBranchAndServices(); model.getBranchAndServices();
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.showToast(mResponse.message ?? ""); Utils.showToast(mResponse.message ?? "");
@ -294,7 +284,7 @@ class _CreateServicesPage3State extends State<CreateServicesPage3> {
// print(map); // print(map);
Utils.showLoading(context); Utils.showLoading(context);
MResponse mResponse = await model.updateServices(map); GenericRespModel mResponse = await model.updateServices(map);
model.getBranchAndServices(); model.getBranchAndServices();
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.showToast(mResponse.message ?? ""); Utils.showToast(mResponse.message ?? "");

@ -1,5 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/services/duplication/sheet/approved_branches_list_sheet.dart'; import 'package:car_provider_app/views/settings/services/duplication/sheet/approved_branches_list_sheet.dart';
import 'package:car_provider_app/views/settings/services/duplication/sheet/items_selection_sheet.dart'; import 'package:car_provider_app/views/settings/services/duplication/sheet/items_selection_sheet.dart';
@ -8,7 +9,6 @@ import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; 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:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:mc_common_app/models/general_models/m_response.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/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
@ -22,9 +22,9 @@ import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class MatchedServicesPage extends StatefulWidget { class MatchedServicesPage extends StatefulWidget {
MatchServicesArguments? matchServicesArguments; final MatchServicesArguments? matchServicesArguments;
MatchedServicesPage(this.matchServicesArguments, {Key? key}) : super(key: key); const MatchedServicesPage(this.matchServicesArguments, {Key? key}) : super(key: key);
@override @override
State<MatchedServicesPage> createState() => _MatchedServicesPageState(); State<MatchedServicesPage> createState() => _MatchedServicesPageState();
@ -123,8 +123,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
model.matchedServices![index].serviceDescription.toString().toText(fontSize: 16, isBold: true), model.matchedServices![index].serviceDescription.toString().toText(fontSize: 16, isBold: true),
"${model.matchedServices![index].serviceItems!.where((c) => c.isUpdateOrSelected == true).length} items selected out of ${model.matchedServices![index].serviceItems!.length}" "${model.matchedServices![index].serviceItems!.where((c) => c.isUpdateOrSelected == true).length} items selected out of ${model.matchedServices![index].serviceItems!.length}".toText(color: MyColors.lightTextColor)
.toText(color: MyColors.lightTextColor)
], ],
), ),
), ),
@ -172,7 +171,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
"serviceItems": items, "serviceItems": items,
}; };
print(jsonEncode(map)); print(jsonEncode(map));
MResponse mResponse = await serviceVM.duplicateItems(map); GenericRespModel mResponse = await serviceVM.duplicateItems(map);
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.showToast(mResponse.message ?? ""); Utils.showToast(mResponse.message ?? "");
pop(context); pop(context);
@ -182,8 +181,6 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
], ],
), ),
), ),
); );
} }
} }

@ -8,7 +8,7 @@ import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_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/general_models/m_response.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
@ -61,7 +61,7 @@ class _SubscriptionsPageState extends State<SubscriptionsPage> {
subcriptionsVM.monthlyTabs, subcriptionsVM.monthlyTabs,
selectedColor: MyColors.primaryColor, selectedColor: MyColors.primaryColor,
onSelected: (DropValue selectedValue, int index) { onSelected: (DropValue selectedValue, int index) {
subcriptionsVM.selectedMothlyTab = selectedValue; subcriptionsVM.selectedMonthlyTab = selectedValue;
subcriptionsVM.monthlyTabs.forEach((element) => element.isEnabled = false); subcriptionsVM.monthlyTabs.forEach((element) => element.isEnabled = false);
subcriptionsVM.monthlyTabs[index].isEnabled = true; subcriptionsVM.monthlyTabs[index].isEnabled = true;
subcriptionsVM.filterSubscriptions(); subcriptionsVM.filterSubscriptions();
@ -75,7 +75,7 @@ class _SubscriptionsPageState extends State<SubscriptionsPage> {
subcriptionsVM.tempSubscriptions[index], subcriptionsVM.tempSubscriptions[index],
isSubscribed: subcriptionsVM.tempSubscriptions[index].isSubscribed ?? false, isSubscribed: subcriptionsVM.tempSubscriptions[index].isSubscribed ?? false,
onRenewSubscriptionClick: () async { onRenewSubscriptionClick: () async {
MResponse response = await subcriptionsVM.createSubscriptionOrder(subcriptionsVM.tempSubscriptions[index].id ?? 0, true, true); GenericRespModel response = await subcriptionsVM.createSubscriptionOrder(subcriptionsVM.tempSubscriptions[index].id ?? 0, true, true);
if (response.data != null) { if (response.data != null) {
context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data ?? 0); context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data ?? 0);
navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription); navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription);

@ -11,7 +11,6 @@ import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_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/general_models/m_response.dart';
import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart'; import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';

@ -1,10 +1,9 @@
import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; 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/models/general_models/m_response.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/subscriptions_models/branch_user_selection_model.dart'; import 'package:mc_common_app/models/subscriptions_models/branch_user_selection_model.dart';
import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart'; import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
@ -19,9 +18,9 @@ import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class DowngradeDataSheet extends StatefulWidget { class DowngradeDataSheet extends StatefulWidget {
Subscription subscription; final Subscription subscription;
DowngradeDataSheet(this.subscription, {super.key}); const DowngradeDataSheet(this.subscription, {super.key});
@override @override
State<DowngradeDataSheet> createState() => _DowngradeDataSheetState(); State<DowngradeDataSheet> createState() => _DowngradeDataSheetState();
@ -31,7 +30,7 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
context.read<SubscriptionsVM>().getSPBranchUser_Get(); context.read<SubscriptionsVM>().getSPBranchUserGet();
} }
@override @override
@ -51,8 +50,7 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
isBold: true, isBold: true,
), ),
8.height, 8.height,
"To select this subscription you need to deactivate your branches and users as this package only supports 1 branch and 2 users per branch. You can reactivate these branches later after upgrading the package" "To select this subscription you need to deactivate your branches and users as this package only supports 1 branch and 2 users per branch. You can reactivate these branches later after upgrading the package".toText(
.toText(
fontSize: 14, fontSize: 14,
color: MyColors.textColor, color: MyColors.textColor,
), ),
@ -69,8 +67,7 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
? const Center(child: CircularProgressIndicator()) ? const Center(child: CircularProgressIndicator())
: ListView.separated( : ListView.separated(
itemBuilder: (context, index) { itemBuilder: (context, index) {
return showBranchItem( return showBranchItem(model, model.branchSelectionList![index]);
model, model.branchSelectionList![index]);
}, },
separatorBuilder: (context, index) { separatorBuilder: (context, index) {
return 12.height; return 12.height;
@ -97,18 +94,14 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
} }
} }
} }
print("opoewww"); if (listOfBranches.isNotEmpty || listOfUsers.isNotEmpty) {
print(jsonEncode(listOfBranches));
if (listOfBranches.isNotEmpty ||
listOfUsers.isNotEmpty) {
navigateTo( navigateTo(
context, context,
PaymentMethodsView( PaymentMethodsView(
paymentType: PaymentTypes.subscription, paymentType: PaymentTypes.subscription,
onTempContinue: () async { onTempContinue: () async {
Utils.showLoading(context); Utils.showLoading(context);
MResponse response = GenericRespModel response = await model.payForSubscription(
await model.payForSubscription(
widget.subscription.id!, widget.subscription.id!,
true, true,
false, false,
@ -120,39 +113,21 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
Utils.hideLoading(context); Utils.hideLoading(context);
if (response.messageStatus == 1) { if (response.messageStatus == 1) {
if(response.message!.contains("Your current sub-users are not")){ if (response.message!.contains("Your current sub-users are not")) {
Utils.showToast(response.message.toString()); Utils.showToast(response.message.toString());
context.read<SubscriptionsVM>().getMySubscriptions( context.read<SubscriptionsVM>().getMySubscriptions(AppState().getUser.data?.userInfo?.providerId.toString() ?? "");
AppState()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"");
pop(context); pop(context);
return false; return false;
}else{ } else {
context context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data);
.read<PaymentVM>()
.updateOrderProviderSubscriptionId(
id: response.data);
// Utils.showToast( // Utils.showToast(
// "Subscriptions is successfully updated"); // "Subscriptions is successfully updated");
return true; return true;
} }
} else { } else {
Utils.showToast(response.message.toString()); Utils.showToast(response.message.toString());
context.read<SubscriptionsVM>().getMySubscriptions( context.read<SubscriptionsVM>().getMySubscriptions(AppState().getUser.data?.userInfo?.providerId.toString() ?? "");
AppState()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"");
return false; return false;
} }
}, },
@ -219,9 +194,7 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Icon( Icon(
model.isOpend model.isOpend ? Icons.keyboard_arrow_up_rounded : Icons.keyboard_arrow_down_rounded,
? Icons.keyboard_arrow_up_rounded
: Icons.keyboard_arrow_down_rounded,
), ),
], ],
), ),
@ -246,8 +219,7 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
// model.usersList[index].isSelected = false; // model.usersList[index].isSelected = false;
// } // }
// } // }
model.usersList[index].isSelected = model.usersList[index].isSelected = !model.usersList[index].isSelected;
!model.usersList[index].isSelected;
viewModel.setState(ViewState.idle); viewModel.setState(ViewState.idle);
}); });
}, },

@ -6,7 +6,7 @@ import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; 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/general_models/m_response.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart'; import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/utils/date_helper.dart';
@ -22,10 +22,10 @@ import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
class UpgradePackageSheet extends StatefulWidget { class UpgradePackageSheet extends StatefulWidget {
Subscription subscription; final Subscription subscription;
bool isRenew; final bool isRenew;
UpgradePackageSheet(this.subscription, this.isRenew, {super.key}); const UpgradePackageSheet(this.subscription, this.isRenew, {super.key});
@override @override
State<UpgradePackageSheet> createState() => _UpgradePackageSheetState(); State<UpgradePackageSheet> createState() => _UpgradePackageSheetState();
@ -105,13 +105,13 @@ class _UpgradePackageSheetState extends State<UpgradePackageSheet> {
maxWidth: double.infinity, maxWidth: double.infinity,
onPressed: () async { onPressed: () async {
if (widget.isRenew) { if (widget.isRenew) {
Utils.showLoading(context); Utils.showLoading(context);
MResponse response = await model.createSubscriptionOrder(widget.subscription.id ?? 0, true, true); GenericRespModel response = await model.createSubscriptionOrder(widget.subscription.id ?? 0, true, true);
Utils.hideLoading(context); Utils.hideLoading(context);
if (response.data != null) { if (response.data != null) {
context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data ?? 0); context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data ?? 0);
navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription); navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription);
} }
} else { } else {
navigateTo( navigateTo(
context, context,
@ -119,7 +119,7 @@ class _UpgradePackageSheetState extends State<UpgradePackageSheet> {
paymentType: PaymentTypes.subscription, paymentType: PaymentTypes.subscription,
onTempContinue: () async { onTempContinue: () async {
Utils.showLoading(context); Utils.showLoading(context);
MResponse mResponse = await model.payForSubscription(widget.subscription.id!, isNowSelected, false, price); GenericRespModel mResponse = await model.payForSubscription(widget.subscription.id!, isNowSelected, false, price);
Utils.hideLoading(context); Utils.hideLoading(context);
if (mResponse.messageStatus == 1) { if (mResponse.messageStatus == 1) {
context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: mResponse.data); context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: mResponse.data);

Loading…
Cancel
Save