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/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/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/schedules_list_page.dart';
import 'package:car_provider_app/views/settings/services/create_item_page.dart';
@ -80,7 +80,7 @@ class ProviderAppRoutes {
// defineLicense: (context) => DefineLicensePage(),
dealershipSetting: (context) => DealershipView(),
// 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),
//Appointments

@ -1,9 +1,9 @@
import 'dart:io';
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: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/services/common_services.dart';
import 'package:mc_common_app/utils/enums.dart';
@ -40,8 +40,8 @@ class ItemsVM extends BaseVM {
return null;
}
Future<MResponse> createServiceItem(Map map) async {
MResponse response = await itemsRepo.createServiceItems(map);
Future<GenericRespModel> createServiceItem(Map map) async {
GenericRespModel response = await itemsRepo.createServiceItems(map);
return response;
}
@ -68,8 +68,8 @@ class ItemsVM extends BaseVM {
return serviceItems;
}
Future<MResponse> updateServiceItem(Map map) async {
MResponse response = await itemsRepo.updateServiceItem(map);
Future<GenericRespModel> updateServiceItem(Map map) async {
GenericRespModel response = await itemsRepo.updateServiceItem(map);
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/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/repositories/schedule_repo.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/utils.dart';
import 'package:mc_common_app/view_models/base_view_model.dart';
@ -33,8 +31,8 @@ class ScheduleVM extends BaseVM {
setState(ViewState.idle);
}
Future<MResponse> setScheduleInactive(int scheduleId, int branchId) async {
MResponse val = await scheduleRepo.setScheduleInActive(scheduleId, branchId);
Future<GenericRespModel> setScheduleInactive(int scheduleId, int branchId) async {
GenericRespModel val = await scheduleRepo.setScheduleInActive(scheduleId, branchId);
if (val.messageStatus == 1) {
if (schedule!.data != null) {
schedule!.data!.removeWhere((element) => element.serviceProviderBranchId == branchId && element.id == scheduleId);
@ -100,13 +98,13 @@ class ScheduleVM extends BaseVM {
setState(ViewState.idle);
}
Future<MResponse> createSchedule(Map map) async {
MResponse response = await scheduleRepo.createSchedule(map);
Future<GenericRespModel> createSchedule(Map map) async {
GenericRespModel response = await scheduleRepo.createSchedule(map);
return response;
}
Future<MResponse> addServicesInSchedule(Map map) async {
MResponse response = await scheduleRepo.addServicesInSchedule(map);
Future<GenericRespModel> addServicesInSchedule(Map map) async {
GenericRespModel response = await scheduleRepo.addServicesInSchedule(map);
return response;
}
@ -116,13 +114,13 @@ class ScheduleVM extends BaseVM {
setState(ViewState.idle);
}
Future<MResponse> updateSchedule(Map map) async {
MResponse response = await scheduleRepo.updateSchedule(map);
Future<GenericRespModel> updateSchedule(Map map) async {
GenericRespModel response = await scheduleRepo.updateSchedule(map);
return response;
}
Future<MResponse> updateServicesInSchedule(Map map) async {
MResponse response = await scheduleRepo.updateServicesInSchedule(map);
Future<GenericRespModel> updateServicesInSchedule(Map map) async {
GenericRespModel response = await scheduleRepo.updateServicesInSchedule(map);
return response;
}
}

@ -1,6 +1,9 @@
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/models/general_models/generic_resp_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: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/string_extensions.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/theme/colors.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:provider/provider.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 {
AppointmentListModel appointmentListModel;
final AppointmentListModel appointmentListModel;
AddNewServiceAppointmentPage(this.appointmentListModel, {Key? key}) : super(key: key);
const AddNewServiceAppointmentPage(this.appointmentListModel, {Key? key}) : super(key: key);
@override
State<AddNewServiceAppointmentPage> createState() => _AddNewServiceAppointmentPageState();
@ -85,9 +83,9 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.selectServicestoAdd.tr().toText(
fontSize: 18,
isBold: true,
),
fontSize: 18,
isBold: true,
),
12.height,
Column(
crossAxisAlignment: CrossAxisAlignment.center,
@ -165,7 +163,7 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
},
)
: service != null
? Text(LocaleKeys.noItemSelectedYet.tr())
? Text(LocaleKeys.noItemSelectedYet.tr())
: const SizedBox(),
if ((service != null && pickedItems != null && pickedItems!.length > 0))
Column(
@ -173,10 +171,10 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
children: [
16.height,
LocaleKeys.totalAdditionalAmount.tr().toText(
fontSize: 14,
isBold: true,
color: MyColors.lightTextColor,
),
fontSize: 14,
isBold: true,
color: MyColors.lightTextColor,
),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
@ -186,10 +184,10 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
),
2.width,
LocaleKeys.sar.tr().toText(
fontSize: 16,
isBold: true,
color: MyColors.lightTextColor,
),
fontSize: 16,
isBold: true,
color: MyColors.lightTextColor,
),
],
),
],
@ -223,7 +221,7 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
});
Utils.showLoading(context);
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);
Utils.hideLoading(context);
if (res.messageStatus == 1) {
@ -252,10 +250,12 @@ class _AddNewServiceAppointmentPageState extends State<AddNewServiceAppointmentP
}
Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
},);
await context.read<AppointmentsVM>().getMyAppointmentsForProvider(
{
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
},
);
}
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:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/config/dependency_injection.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/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/utils/enums.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/common_widgets/app_bar.dart';
import '../../config/provider_routes.dart';
import '../dashboard/widget/appointment_slider_widget.dart';
import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart';
class MergeAppointmentListPage extends StatelessWidget {
MergeAppointmentListPage({Key? key}) : super(key: key);
const MergeAppointmentListPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
appBar: CustomAppBar(
title: LocaleKeys.selectAppointments.tr(),
),
body: SizedBox(
width: double.infinity,
height: double.infinity,
child: Consumer(
builder: (BuildContext context, AppointmentsVM appointmentsVM,
Widget? child) {
builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
return Column(
children: [
Expanded(
@ -45,28 +42,20 @@ class MergeAppointmentListPage extends StatelessWidget {
: ListView.separated(
itemBuilder: (context, index) {
return AppointmentSliderWidget(
appointmentListModel: appointmentsVM
.myFilteredAppointments2[appointmentsVM
.selectedAppointmentIndex]
.customerAppointmentList![index],
appointmentListModel: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![index],
isNeedTotalPayment: true,
isSelectable: true,
isNeedToShowAppointmentStatus: true,
isNeedToShowMergeStatus: true,
onTap: () {
appointmentsVM
.updateCheckBoxInMergeRequest(index);
appointmentsVM.updateCheckBoxInMergeRequest(index);
},
);
},
separatorBuilder: (context, snapchat) {
return 21.height;
},
itemCount: appointmentsVM
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.customerAppointmentList!
.length,
itemCount: appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList!.length,
padding: const EdgeInsets.all(21),
),
),
@ -77,54 +66,30 @@ class MergeAppointmentListPage extends StatelessWidget {
title: LocaleKeys.mergeAppointments.tr(),
maxWidth: double.infinity,
margin: const EdgeInsets.all(21),
txtColor: appointmentsVM.inNeedToEnableMergeButton
? MyColors.white
: MyColors.black,
backgroundColor: appointmentsVM.inNeedToEnableMergeButton
? MyColors.primaryColor
: MyColors.greyButtonColor,
txtColor: appointmentsVM.inNeedToEnableMergeButton ? MyColors.white : MyColors.black,
backgroundColor: appointmentsVM.inNeedToEnableMergeButton ? MyColors.primaryColor : MyColors.greyButtonColor,
onPressed: () async {
Utils.showLoading(context);
List<int> appointmentIDs = [];
for (var element in appointmentsVM
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.customerAppointmentList!) {
for (var element in appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList!) {
if (element.isSelected ?? false) {
appointmentIDs.add(element.id ?? 0);
}
}
Map<String, dynamic> map = {
"serviceProviderID": injector
.get<AppState>()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"0",
"serviceProviderBranchID": appointmentsVM
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.branchId,
"serviceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"serviceProviderBranchID": appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].branchId,
"serviceAppointmentIDs": appointmentIDs
};
try {
MResponse response =
await appointmentsVM.createMergeAppointment(map);
GenericRespModel response = await appointmentsVM.createMergeAppointment(map);
Utils.hideLoading(context);
if (response.messageStatus == 1) {
Utils.showToast(LocaleKeys.appointmentMergeSuccessfully.tr());
_updateAppointment(
context,
appointmentsVM
.myFilteredAppointments2[
appointmentsVM.selectedAppointmentIndex]
.branchId ??
0);
_updateAppointment(context, appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].branchId ?? 0);
pop(context);
pop(context);
@ -147,14 +112,7 @@ class MergeAppointmentListPage extends StatelessWidget {
Future<void> _updateAppointment(BuildContext context, int branchId) async {
await context.read<AppointmentsVM>().getMyAppointmentsForProvider({
"ServiceProviderID": injector
.get<AppState>()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"0",
"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0",
"ProviderBranchID": branchId.toString(),
});
}

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

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

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
@ -48,8 +50,40 @@ class RequestDetailPage extends StatelessWidget {
errorValue: requestsVM.offerPriceError,
keyboardType: TextInputType.number,
hint: LocaleKeys.enterAmount.tr(),
numbersOnly: true,
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,
TxtField(
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) {
case RequestStatus.submitted:
case RequestStatus.inProgress:
@ -237,7 +276,7 @@ class RequestDetailPage extends StatelessWidget {
],
),
showItem("Customer Name", requestDetail.customerName),
showItem("Description", requestDetail.description),
showItem("Description ", requestDetail.description),
showItem("Price Range:", ""),
Row(
children: [

@ -1,9 +1,8 @@
import 'dart:async';
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:flutter/cupertino.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:car_provider_app/views/settings/services/services_list_page.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:mc_common_app/classes/app_state.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/string_extensions.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';
class BranchDetailPage extends StatelessWidget {
BranchDetailModel branchData;
final BranchDetailModel branchData;
BranchDetailPage(this.branchData, {super.key});
@ -41,7 +39,7 @@ class BranchDetailPage extends StatelessWidget {
}
filterBranch() {
branchData.branchServices!.forEach((element) {
for (var element in branchData.branchServices!) {
categories.add(
CategoryData(
id: element.categoryId,
@ -49,27 +47,82 @@ class BranchDetailPage extends StatelessWidget {
categoryNameN: element.categoryName,
),
);
});
}
categories = categories.toSet().toList();
for (var payment in categories) {
branchData.branchServices!.forEach((element) {
for (var element in branchData.branchServices!) {
if (payment.id == element.categoryId) {
payment.services ??= [];
payment.services!.add(element);
}
});
}
}
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
Widget build(BuildContext context) {
filterBranch();
getBranchUsers(context);
return Scaffold(
appBar: CustomAppBar(
title: branchData.branchName.toString(),
),
appBar: CustomAppBar(title: LocaleKeys.branchDetail.tr()),
body: Consumer<ServiceVM>(builder: (context, model, _) {
return SizedBox(
width: double.infinity,
@ -80,15 +133,20 @@ class BranchDetailPage extends StatelessWidget {
child: SingleChildScrollView(
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
children: [
Row(
children: [
Expanded(
child: titleWidget(MyAssets.icBranches, LocaleKeys.branchInfo.tr()),
Column(
children: [
Row(
children: [
Expanded(
child: Row(
children: [
branchData.branchProfileImage.buildNetworkImage(),
12.width,
LocaleKeys.branchInfo.tr().toText(fontSize: 16, color: Colors.black, isBold: true),
],
),
),
if (branchData.branchStatus != BranchStatusEnum.pending) ...[
IconButton(
onPressed: () {
navigateWithName(context, ProviderAppRoutes.defineBranch, arguments: branchData);
@ -96,23 +154,24 @@ class BranchDetailPage extends StatelessWidget {
icon: SvgPicture.asset(MyAssets.icEdit),
)
],
),
Column(
children: [
showData("${LocaleKeys.country.tr()}:", branchData.countryName.toString()),
showData("${LocaleKeys.city.tr()}:", branchData.cityName.toString()),
showData("${LocaleKeys.branchName.tr()}:", branchData.branchName.toString()),
showData("${LocaleKeys.branchDescription.tr()}:", branchData.branchDescription.toString()),
showData("${LocaleKeys.address.tr()}:", branchData.address.toString()),
],
),
],
),
),
],
),
Column(
children: [
showData("${LocaleKeys.country.tr()}:", branchData.countryName.toString()),
showData("${LocaleKeys.city.tr()}:", branchData.cityName.toString()),
showData("${LocaleKeys.branchName.tr()}:", branchData.branchName.toString()),
showData("${LocaleKeys.branchDescription.tr()}:", branchData.branchDescription.toString()),
showData("${LocaleKeys.address.tr()}:", branchData.address.toString()),
],
),
],
).horPaddingMain(),
10.height,
Container(
width: double.infinity,
color: MyColors.darkIconColor,
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 8),
padding: const EdgeInsets.symmetric(horizontal: 21, vertical: 10),
child: Row(
children: [
const Icon(
@ -122,11 +181,10 @@ class BranchDetailPage extends StatelessWidget {
8.width,
Expanded(
child: LocaleKeys.setorEditBranchSchedule.tr().toText(
isUnderLine: true,
fontSize: 14,
isBold: true,
color: Colors.white,
),
isUnderLine: true,
fontSize: 12,
color: Colors.white,
),
),
const Icon(
Icons.arrow_forward,
@ -147,15 +205,15 @@ class BranchDetailPage extends StatelessWidget {
color: Colors.white,
).toContainer(
borderRadius: 100,
paddingAll: 3,
paddingAll: 2,
backgroundColor: MyColors.darkIconColor,
),
8.width,
LocaleKeys.addServices.tr().toText(
fontSize: 14,
color: MyColors.lightTextColor,
isBold: true,
),
LocaleKeys.addNewService.tr().toText(
fontSize: 15,
color: MyColors.lightTextColor,
isBold: true,
),
],
)
.toContainer(
@ -175,99 +233,101 @@ class BranchDetailPage extends StatelessWidget {
),
);
}),
categories.isEmpty
? LocaleKeys.noServiceAddedYet.tr().toText(fontSize: 12)
: ListView.separated(
itemBuilder: (context, pIndex) {
return InkWell(
onTap: () {
categories[pIndex].branchId = branchData.id.toString();
categories[pIndex].branchName = branchData.branchName.toString();
navigateWithName(context, ProviderAppRoutes.servicesList, arguments: categories[pIndex]);
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.only(top: 5),
child: SvgPicture.asset(
MyAssets.maintenanceIcon,
width: 16,
height: 16,
ListView.separated(
itemBuilder: (context, pIndex) {
return InkWell(
onTap: () {
categories[pIndex].branchId = branchData.id.toString();
categories[pIndex].branchName = branchData.branchName.toString();
navigateWithName(context, ProviderAppRoutes.servicesList, arguments: categories[pIndex]);
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.only(top: 5),
child: SvgPicture.asset(
MyAssets.maintenanceIcon,
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,
// ),
// ),
],
),
),
8.width,
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
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,
// ),
// ),
],
mainAxisAlignment: MainAxisAlignment.spaceBetween,
),
Row(
children: [
Expanded(
child: ListView.builder(
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,
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Expanded(
child: ListView.builder(
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),
child: Icon(
Icons.arrow_forward,
size: 20,
),
),
const Padding(
padding: EdgeInsets.all(4.0),
child: Icon(
Icons.arrow_forward,
size: 20,
),
],
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
)
],
)),
],
).toContainer(
width: double.infinity,
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
isShadowEnabled: true,
),
);
},
itemCount: categories.length,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
padding: const EdgeInsets.all(20),
separatorBuilder: (BuildContext context, int index) {
return 12.height;
},
),
],
)
],
)),
],
).toContainer(
borderRadius: 0,
width: double.infinity,
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
isShadowEnabled: true,
),
);
},
itemCount: categories.length,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
padding: const EdgeInsets.all(20),
separatorBuilder: (BuildContext context, int index) {
return 12.height;
},
),
12.height,
],
),
@ -278,29 +338,7 @@ class BranchDetailPage extends StatelessWidget {
height: 1,
color: Colors.grey[100],
),
if (AppState().userType == UserType.providerDealer)
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);
},
),
);
},
),
),
buildFooterActionWidget(context),
],
),
);
@ -310,7 +348,9 @@ class BranchDetailPage extends StatelessWidget {
bool validation(BuildContext context) {
bool isValid = false;
for (var element in context.read<ServiceVM>().allProviderDealersList) {
for (var element in context
.read<ServiceVM>()
.allProviderDealersList) {
if (element.isBranchUser ?? false) {
isValid = true;
}
@ -318,21 +358,6 @@ class BranchDetailPage extends StatelessWidget {
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) {
return Row(
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:easy_localization/easy_localization.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/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';
@ -55,105 +48,90 @@ class BranchListPage extends StatelessWidget {
),
Expanded(
child: Consumer<ServiceVM>(
builder: (context, model, _) {
if (model.state == ViewState.busy) {
builder: (context, serviceVM, _) {
if (serviceVM.state == ViewState.busy) {
return const Center(child: CircularProgressIndicator());
} else {
List<BranchDetailModel> branches = [];
if (model.branches!.data != null) {
branches = model.branches!.data!.serviceProviderBranch!.where((element) => model.selectedBranchStatus == element.statusId).toList();
if (serviceVM.branches!.data != null) {
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(
onRefresh: () async {
await context.read<ServiceVM>().getBranchAndServices();
},
onRefresh: () async => await context.read<ServiceVM>().getBranchAndServices(),
child: branches.isEmpty
? Center(child: Text(LocaleKeys.no_branch.tr()))
? Center(child: LocaleKeys.no_branch.tr().toText(fontSize: 16, color: MyColors.lightTextColor))
: ListView.separated(
itemBuilder: (context, index) {
BranchDetailModel branchModel = branches[index];
return Row(
children: [
Container(
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,
),
),
branchModel.branchProfileImage.buildNetworkImage(width: 74, height: 50),
12.width,
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
children: [
const Icon(
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,
)
],
Utils.statusContainerChip(
text: branchModel.branchStatusLabel ?? "",
chipColor: Utils.getChipColorByBranchStatus(branchModel.branchStatus!),
),
5.height,
Text(
branches[index].branchName ?? "",
branchModel.branchName ?? "",
style: const TextStyle(
fontSize: 14,
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,
IconButton(
onPressed: () async {
Utils.showLoading(context);
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(),
isNeedToDelete: false);
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast(LocaleKeys.branch_deleted.tr());
model.setState(ViewState.idle);
} else {
Utils.showToast(res.message ?? "");
}
},
icon: const Icon(Icons.delete),
color: Colors.red,
),
const Icon(
Icons.arrow_forward_rounded,
size: 16,
),
// 12.width,
// Column(
// crossAxisAlignment: CrossAxisAlignment.end,
// mainAxisAlignment: MainAxisAlignment.end,
//
// children: [
// IconButton(
// onPressed: () async {},
// icon: const Icon(Icons.delete),
// color: Colors.red,
// ),
// const Icon(Icons.arrow_forward_rounded, size: 16),
// ],
// ),
],
).toContainer().onPress(() async {
branches[index].countryID = model.branches!.data!.countryID;
branches[index].countryName = model.branches!.data!.countryName;
navigateWithName(context, ProviderAppRoutes.branchDetail, arguments: branches[index]);
).toWhiteContainer(width: double.infinity, pading: const EdgeInsets.all(12)).onPress(() async {
branchModel.countryID = serviceVM.branches!.data!.countryID;
branchModel.countryName = serviceVM.branches!.data!.countryName;
navigateWithName(context, ProviderAppRoutes.branchDetail, arguments: branchModel);
});
},
separatorBuilder: (context, index) {
return 12.height;
},
separatorBuilder: (context, index) => 12.height,
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/models/general_models/generic_resp_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:flutter/material.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/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/utils/enums.dart';
import 'package:mc_common_app/utils/utils.dart';
@ -129,7 +129,7 @@ class _DealerUserPageState extends State<DealerUserPage> {
"isActive": false,
};
Utils.showLoading(context);
MResponse response = await provider.removeDealerFromBranch(map);
GenericRespModel response = await provider.removeDealerFromBranch(map);
Utils.hideLoading(context);
if (response.messageStatus == 1) {
getBranchUsers();

@ -1,17 +1,16 @@
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/models/general_models/generic_resp_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:mc_common_app/classes/app_state.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/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/bottom_sheet.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
@ -50,6 +49,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
return Container(
width: double.infinity,
height: MediaQuery.of(context).size.height / 1.2,
padding: const EdgeInsets.all(21),
color: Colors.white,
child: Column(
children: [
@ -65,10 +65,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
itemBuilder: (context, index) {
return dealerUsersWidget(model, index);
},
separatorBuilder: (context, index) {
return 12.height;
},
padding: const EdgeInsets.all(12),
separatorBuilder: (context, index) => 12.height,
itemCount: model.allProviderDealersList.length,
);
}
@ -85,6 +82,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
ShowFillButton(
title: LocaleKeys.assignDealerUser.tr(),
maxWidth: double.infinity,
maxHeight: 55,
onPressed: () async {
if (validation()) {
Utils.showLoading(context);
@ -98,7 +96,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
"dealershipUserIDs": userIds,
"serviceProviderBranchID": widget.branchId,
};
MResponse response = await provider.assignDealerToBranch(map);
GenericRespModel response = await provider.assignDealerToBranch(map);
Utils.hideLoading(context);
if (response.messageStatus == 1) {
Utils.showToast(response.message.toString());
@ -112,8 +110,9 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
),
12.height,
ShowFillButton(
title: ("+ " + LocaleKeys.createNewUser.tr()),
title: ("+ ${LocaleKeys.createNewUser.tr()}"),
maxWidth: double.infinity,
maxHeight: 55,
backgroundColor: Colors.transparent,
borderColor: 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(
width: double.infinity,
borderRadius: 12,
borderRadius: 0,
pading: const EdgeInsets.symmetric(horizontal: 6, vertical: 12),
);
}
@ -167,8 +166,10 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
Widget itemWidget(String title, String value) {
return Row(
children: [
(title + ": ").toText(isBold: true, color: MyColors.lightTextColor),
value.toText(isBold: true),
("$title: ").toText(isBold: true, color: MyColors.lightTextColor),
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/main.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/utils/date_helper.dart';
import 'package:mc_common_app/utils/navigator.dart';
@ -24,7 +24,7 @@ import 'package:easy_localization/easy_localization.dart';
class AddSchedulesPage extends StatefulWidget {
AddSchedulesPage({Key? key}) : super(key: key);
const AddSchedulesPage({Key? key}) : super(key: key);
@override
State<AddSchedulesPage> createState() => _AddSchedulesPageState();
@ -318,7 +318,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
};
Utils.showLoading(context);
MResponse scheduleResponse = await model.createSchedule(map);
GenericRespModel scheduleResponse = await model.createSchedule(map);
if (scheduleResponse.messageStatus == 1) {
List<int> services = [];
for (var element in model.selectedServicesItems) {
@ -331,7 +331,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
"serviceGroupDescription": "string"
};
MResponse servicesResponse = await model.addServicesInSchedule(map1);
GenericRespModel servicesResponse = await model.addServicesInSchedule(map1);
Utils.hideLoading(context);
if (servicesResponse.messageStatus == 1) {
Utils.showToast("Successfully schedule created");
@ -372,7 +372,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
};
Utils.showLoading(context);
MResponse scheduleResponse = await model.updateSchedule(map);
GenericRespModel scheduleResponse = await model.updateSchedule(map);
if (scheduleResponse.messageStatus == 1) {
List<int> services = [];
for (var element in model.selectedServicesItems) {
@ -385,7 +385,7 @@ class _AddSchedulesPageState extends State<AddSchedulesPage> {
"serviceGroupDescription": "string",
};
MResponse servicesResponse = await model.updateServicesInSchedule(map1);
GenericRespModel servicesResponse = await model.updateServicesInSchedule(map1);
Utils.hideLoading(context);
if (servicesResponse.messageStatus == 1) {
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/main.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/utils/date_helper.dart';
import 'package:mc_common_app/utils/navigator.dart';
@ -71,7 +71,7 @@ class _SchedulesListPageState extends State<SchedulesListPage> {
IconButton(
onPressed: () async {
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);
if (res.messageStatus == 1) {
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:flutter/material.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/general_models/m_response.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/services_models/item_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/app_permission_handler.dart';
@ -228,7 +227,7 @@ class _CreateItemPageState extends State<CreateItemPage> {
"isAppointmentCustomerLoc": isHomeAppointmentAvailable
};
Utils.showLoading(context);
MResponse mResponse = await model!.createServiceItem(map);
GenericRespModel mResponse = await model!.createServiceItem(map);
Utils.hideLoading(context);
if (mResponse.messageStatus == 1) {
model!.getServiceItems(itemData!.serviceProviderServiceId ?? 0);
@ -251,7 +250,7 @@ class _CreateItemPageState extends State<CreateItemPage> {
"isAppointmentCustomerLoc": isHomeAppointmentAvailable
};
Utils.showLoading(context);
MResponse mResponse = await model!.updateServiceItem(map);
GenericRespModel mResponse = await model!.updateServiceItem(map);
Utils.hideLoading(context);
if (mResponse.messageStatus == 1) {
model!.getServiceItems(itemData!.serviceProviderServiceId ?? 0);

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

@ -1,5 +1,6 @@
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: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';
@ -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/string_extensions.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/theme/colors.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';
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
State<MatchedServicesPage> createState() => _MatchedServicesPageState();
@ -123,8 +123,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
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}"
.toText(color: MyColors.lightTextColor)
"${model.matchedServices![index].serviceItems!.where((c) => c.isUpdateOrSelected == true).length} items selected out of ${model.matchedServices![index].serviceItems!.length}".toText(color: MyColors.lightTextColor)
],
),
),
@ -172,7 +171,7 @@ class _MatchedServicesPageState extends State<MatchedServicesPage> {
"serviceItems": items,
};
print(jsonEncode(map));
MResponse mResponse = await serviceVM.duplicateItems(map);
GenericRespModel mResponse = await serviceVM.duplicateItems(map);
Utils.hideLoading(context);
Utils.showToast(mResponse.message ?? "");
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/extensions/int_extensions.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/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart';
@ -61,7 +61,7 @@ class _SubscriptionsPageState extends State<SubscriptionsPage> {
subcriptionsVM.monthlyTabs,
selectedColor: MyColors.primaryColor,
onSelected: (DropValue selectedValue, int index) {
subcriptionsVM.selectedMothlyTab = selectedValue;
subcriptionsVM.selectedMonthlyTab = selectedValue;
subcriptionsVM.monthlyTabs.forEach((element) => element.isEnabled = false);
subcriptionsVM.monthlyTabs[index].isEnabled = true;
subcriptionsVM.filterSubscriptions();
@ -75,7 +75,7 @@ class _SubscriptionsPageState extends State<SubscriptionsPage> {
subcriptionsVM.tempSubscriptions[index],
isSubscribed: subcriptionsVM.tempSubscriptions[index].isSubscribed ?? false,
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) {
context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data ?? 0);
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/extensions/int_extensions.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/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart';

@ -1,10 +1,9 @@
import 'dart:convert';
import 'package:flutter/material.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/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/subscription_model.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';
class DowngradeDataSheet extends StatefulWidget {
Subscription subscription;
final Subscription subscription;
DowngradeDataSheet(this.subscription, {super.key});
const DowngradeDataSheet(this.subscription, {super.key});
@override
State<DowngradeDataSheet> createState() => _DowngradeDataSheetState();
@ -31,7 +30,7 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
@override
void initState() {
super.initState();
context.read<SubscriptionsVM>().getSPBranchUser_Get();
context.read<SubscriptionsVM>().getSPBranchUserGet();
}
@override
@ -51,8 +50,7 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
isBold: true,
),
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"
.toText(
"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(
fontSize: 14,
color: MyColors.textColor,
),
@ -69,8 +67,7 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
? const Center(child: CircularProgressIndicator())
: ListView.separated(
itemBuilder: (context, index) {
return showBranchItem(
model, model.branchSelectionList![index]);
return showBranchItem(model, model.branchSelectionList![index]);
},
separatorBuilder: (context, index) {
return 12.height;
@ -97,18 +94,14 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
}
}
}
print("opoewww");
print(jsonEncode(listOfBranches));
if (listOfBranches.isNotEmpty ||
listOfUsers.isNotEmpty) {
if (listOfBranches.isNotEmpty || listOfUsers.isNotEmpty) {
navigateTo(
context,
PaymentMethodsView(
paymentType: PaymentTypes.subscription,
onTempContinue: () async {
Utils.showLoading(context);
MResponse response =
await model.payForSubscription(
GenericRespModel response = await model.payForSubscription(
widget.subscription.id!,
true,
false,
@ -120,39 +113,21 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
Utils.hideLoading(context);
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());
context.read<SubscriptionsVM>().getMySubscriptions(
AppState()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"");
context.read<SubscriptionsVM>().getMySubscriptions(AppState().getUser.data?.userInfo?.providerId.toString() ?? "");
pop(context);
return false;
}else{
context
.read<PaymentVM>()
.updateOrderProviderSubscriptionId(
id: response.data);
} else {
context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data);
// Utils.showToast(
// "Subscriptions is successfully updated");
return true;
}
} else {
Utils.showToast(response.message.toString());
context.read<SubscriptionsVM>().getMySubscriptions(
AppState()
.getUser
.data
?.userInfo
?.providerId
.toString() ??
"");
context.read<SubscriptionsVM>().getMySubscriptions(AppState().getUser.data?.userInfo?.providerId.toString() ?? "");
return false;
}
},
@ -219,9 +194,7 @@ class _DowngradeDataSheetState extends State<DowngradeDataSheet> {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Icon(
model.isOpend
? Icons.keyboard_arrow_up_rounded
: Icons.keyboard_arrow_down_rounded,
model.isOpend ? 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 =
!model.usersList[index].isSelected;
model.usersList[index].isSelected = !model.usersList[index].isSelected;
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/string_extensions.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/theme/colors.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';
class UpgradePackageSheet extends StatefulWidget {
Subscription subscription;
bool isRenew;
final Subscription subscription;
final bool isRenew;
UpgradePackageSheet(this.subscription, this.isRenew, {super.key});
const UpgradePackageSheet(this.subscription, this.isRenew, {super.key});
@override
State<UpgradePackageSheet> createState() => _UpgradePackageSheetState();
@ -105,13 +105,13 @@ class _UpgradePackageSheetState extends State<UpgradePackageSheet> {
maxWidth: double.infinity,
onPressed: () async {
if (widget.isRenew) {
Utils.showLoading(context);
MResponse response = await model.createSubscriptionOrder(widget.subscription.id ?? 0, true, true);
Utils.hideLoading(context);
if (response.data != null) {
context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data ?? 0);
navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription);
}
Utils.showLoading(context);
GenericRespModel response = await model.createSubscriptionOrder(widget.subscription.id ?? 0, true, true);
Utils.hideLoading(context);
if (response.data != null) {
context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data ?? 0);
navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription);
}
} else {
navigateTo(
context,
@ -119,7 +119,7 @@ class _UpgradePackageSheetState extends State<UpgradePackageSheet> {
paymentType: PaymentTypes.subscription,
onTempContinue: () async {
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);
if (mResponse.messageStatus == 1) {
context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: mResponse.data);

Loading…
Cancel
Save