You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
368 lines
15 KiB
Dart
368 lines
15 KiB
Dart
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:mc_common_app/generated/locale_keys.g.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';
|
|
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/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';
|
|
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/widgets/bottom_sheet.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/extensions/extensions_widget.dart';
|
|
import 'package:mc_common_app/widgets/row_with_arrow.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
class BranchDetailPage extends StatelessWidget {
|
|
final BranchDetailModel branchData;
|
|
|
|
const BranchDetailPage(this.branchData, {super.key});
|
|
|
|
getBranchUsers(BuildContext context) {
|
|
scheduleMicrotask(() {
|
|
if (context.read<ServiceVM>().allProviderDealersList.isNotEmpty) {
|
|
context.read<ServiceVM>().getAllProviderDealers(
|
|
{"ServiceProviderBranchID": branchData.id.toString(), "ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""},
|
|
);
|
|
}
|
|
|
|
context.read<ServiceVM>().filterUserBranchCategories();
|
|
});
|
|
}
|
|
|
|
bool validation(BuildContext context) {
|
|
bool isValid = false;
|
|
for (var element in context.read<ServiceVM>().allProviderDealersList) {
|
|
if (element.isBranchUser ?? false) {
|
|
isValid = true;
|
|
}
|
|
}
|
|
return isValid;
|
|
}
|
|
|
|
Widget showData(String title, String value) {
|
|
return Row(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
title.toText(
|
|
fontSize: 12,
|
|
color: MyColors.darkTextColor,
|
|
),
|
|
if (title.isNotEmpty) 8.width,
|
|
Flexible(
|
|
child: value.toText(
|
|
fontSize: 12,
|
|
color: MyColors.textColor,
|
|
),
|
|
)
|
|
],
|
|
);
|
|
}
|
|
|
|
Widget pendingApprovalAction({required String pendingText}) {
|
|
return Center(
|
|
child: pendingText.toText(color: MyColors.lightTextColor, fontSize: 15),
|
|
).toContainer(
|
|
paddingAll: 15,
|
|
borderRadius: 8,
|
|
width: double.infinity,
|
|
backgroundColor: MyColors.grey98Color.withOpacity(0.1),
|
|
);
|
|
}
|
|
|
|
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,
|
|
fontSize: 15,
|
|
isFilled: false,
|
|
onPressed: () async {
|
|
showMyBottomSheet(
|
|
context,
|
|
child: AssignDealerUserSheet(
|
|
branchId: branchData.id.toString(),
|
|
callBackFunc: () {
|
|
getBranchUsers(context);
|
|
},
|
|
),
|
|
);
|
|
},
|
|
);
|
|
} else if (branchData.branchStatus == BranchStatusEnum.pending) {
|
|
actionWidget = pendingApprovalAction(pendingText: "Approval Pending");
|
|
} else if (branchData.branchStatus == BranchStatusEnum.deactivated) {
|
|
actionWidget = pendingApprovalAction(pendingText: "Activate Now");
|
|
} else if (branchData.branchStatus == BranchStatusEnum.rejected) {
|
|
actionWidget = Column(
|
|
children: [
|
|
Row(
|
|
children: [
|
|
('${LocaleKeys.rejectionComments.tr()}:').toText(fontSize: 16, color: MyColors.darkTextColor, textAlign: TextAlign.right),
|
|
],
|
|
),
|
|
Row(
|
|
children: [
|
|
if (branchData.branchAuditTrial != null && branchData.branchAuditTrial!.isNotEmpty) ...[
|
|
Flexible(
|
|
child: ("${branchData.branchAuditTrial!.first.comment}").toText(
|
|
fontSize: 14,
|
|
color: MyColors.primaryColor,
|
|
isItalic: true,
|
|
),
|
|
),
|
|
]
|
|
],
|
|
),
|
|
12.height,
|
|
ShowFillButton(
|
|
title: LocaleKeys.rejectedFormAdmin.tr(),
|
|
maxWidth: double.infinity,
|
|
backgroundColor: MyColors.darkWhiteColor,
|
|
borderColor: MyColors.darkPrimaryColor,
|
|
txtColor: MyColors.lightTextColor,
|
|
isFilled: true,
|
|
onPressed: () {},
|
|
),
|
|
],
|
|
);
|
|
}
|
|
return actionWidget.paddingAll(21);
|
|
}
|
|
|
|
Widget buildServiceTileWidget(int pIndex, ServiceVM vmodel) {
|
|
return Row(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.only(top: 5),
|
|
child: SvgPicture.asset(
|
|
MyAssets.maintenanceIcon,
|
|
width: 14,
|
|
height: 14,
|
|
),
|
|
),
|
|
8.width,
|
|
Expanded(
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
children: [
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
vmodel.categories[pIndex].categoryName.toString().toText(fontSize: 16),
|
|
],
|
|
),
|
|
8.height,
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.end,
|
|
crossAxisAlignment: CrossAxisAlignment.end,
|
|
children: [
|
|
Expanded(
|
|
child: ListView.builder(
|
|
itemBuilder: (context, index) {
|
|
return Container(
|
|
child: (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? vmodel.categories[pIndex].services![index].serviceDescriptionN.toString() : vmodel.categories[pIndex].services![index].serviceDescription.toString())
|
|
.toText(
|
|
fontSize: 12,
|
|
color: MyColors.lightTextColor,
|
|
),
|
|
);
|
|
},
|
|
itemCount: vmodel.categories[pIndex].services?.length,
|
|
physics: const NeverScrollableScrollPhysics(),
|
|
shrinkWrap: true,
|
|
padding: EdgeInsets.zero,
|
|
),
|
|
),
|
|
],
|
|
).withArrow(isArrowEnabled: true)
|
|
],
|
|
)),
|
|
],
|
|
).toWhiteContainer(width: double.infinity, allPading: 12);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
getBranchUsers(context);
|
|
return Scaffold(
|
|
appBar: CustomAppBar(title: LocaleKeys.branchDetail.tr()),
|
|
body: Consumer<ServiceVM>(builder: (context, model, _) {
|
|
return SizedBox(
|
|
width: double.infinity,
|
|
height: double.infinity,
|
|
child: Column(
|
|
children: [
|
|
Expanded(
|
|
child: SingleChildScrollView(
|
|
child: Column(
|
|
children: [
|
|
10.height,
|
|
Column(
|
|
children: [
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
child: Row(
|
|
children: [
|
|
branchData.branchProfileImage.buildNetworkImage(height: 66, width: 53, fit: BoxFit.cover),
|
|
11.width,
|
|
Expanded(
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
children: [
|
|
(branchData.branchName!).toText(fontSize: 16, color: MyColors.darkTextColor),
|
|
showData("", branchData.branchDescription.toString()),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
if (branchData.branchStatus != BranchStatusEnum.pending) ...[
|
|
SvgPicture.asset(MyAssets.icEdit).onPress(() {
|
|
navigateWithName(context, ProviderAppRoutes.defineBranch, arguments: branchData);
|
|
}),
|
|
],
|
|
],
|
|
),
|
|
Column(
|
|
children: [
|
|
showData("${LocaleKeys.location.tr()}:", "${branchData.cityName.toString()}, ${branchData.countryName.toString()}"),
|
|
showData("${LocaleKeys.provider.tr()}:", branchData.serviceProviderName.toString()),
|
|
showData("${LocaleKeys.time.tr()}:", "${branchData.openTime.toString()} - ${branchData.closeTime.toString()}"),
|
|
showData("${LocaleKeys.address.tr()}:", branchData.address.toString()),
|
|
],
|
|
).paddingOnly(left: 65),
|
|
],
|
|
).horPaddingMain(),
|
|
10.height,
|
|
Container(
|
|
width: double.infinity,
|
|
color: MyColors.darkIconColor,
|
|
padding: const EdgeInsets.symmetric(horizontal: 21, vertical: 10),
|
|
child: Row(
|
|
children: [
|
|
const Icon(
|
|
Icons.calendar_month,
|
|
color: Colors.white,
|
|
),
|
|
8.width,
|
|
Expanded(
|
|
child: LocaleKeys.setorEditBranchSchedule.tr().toText(
|
|
isUnderLine: true,
|
|
fontSize: 12,
|
|
color: Colors.white,
|
|
decorationColor: MyColors.white,
|
|
),
|
|
),
|
|
],
|
|
)
|
|
.withArrow(
|
|
isArrowEnabled: true,
|
|
color: Colors.white,
|
|
arrowWidth: 16.16,
|
|
arrowHeight: 11.75,
|
|
)
|
|
.margin(right: 5),
|
|
).onPress(() {
|
|
if (branchData.branchStatus == BranchStatusEnum.pending || branchData.branchStatus == BranchStatusEnum.rejected) {
|
|
Utils.showToast("Please wait for the branch verification.");
|
|
return;
|
|
}
|
|
navigateWithName(context, ProviderAppRoutes.schedulesList, arguments: branchData.id.toString());
|
|
}),
|
|
Row(
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
const Icon(
|
|
Icons.add,
|
|
color: Colors.white,
|
|
size: 18,
|
|
).toContainer(
|
|
borderRadius: 100,
|
|
paddingAll: 2,
|
|
backgroundColor: MyColors.darkIconColor,
|
|
),
|
|
8.width,
|
|
LocaleKeys.addNewService.tr().toText(fontSize: 15, color: MyColors.lightTextColor, letterSpacing: -0.52),
|
|
],
|
|
)
|
|
.toContainer(
|
|
borderRadius: 0,
|
|
backgroundColor: MyColors.darkWhiteColor,
|
|
width: double.infinity,
|
|
paddingAll: 25,
|
|
margin: const EdgeInsets.only(
|
|
left: 20,
|
|
right: 20,
|
|
top: 20,
|
|
))
|
|
.onPress(() {
|
|
if (branchData.branchStatus == BranchStatusEnum.pending || branchData.branchStatus == BranchStatusEnum.rejected) {
|
|
Utils.showToast("Please wait for the branch verification.");
|
|
return;
|
|
}
|
|
navigateWithName(
|
|
context,
|
|
ProviderAppRoutes.createServices3,
|
|
arguments: CreateBranchModel(
|
|
branchId: branchData.id.toString(),
|
|
branchName: branchData.branchName.toString(),
|
|
),
|
|
);
|
|
}),
|
|
ListView.separated(
|
|
itemBuilder: (context, pIndex) {
|
|
return buildServiceTileWidget(pIndex, model).onPress(() {
|
|
model.categories[pIndex].branchId = branchData.id.toString();
|
|
model.categories[pIndex].branchName = branchData.branchName.toString();
|
|
navigateWithName(context, ProviderAppRoutes.servicesList, arguments: model.categories[pIndex]);
|
|
});
|
|
},
|
|
itemCount: model.categories.length,
|
|
physics: const NeverScrollableScrollPhysics(),
|
|
shrinkWrap: true,
|
|
padding: const EdgeInsets.all(20),
|
|
separatorBuilder: (BuildContext context, int index) {
|
|
return 12.height;
|
|
},
|
|
),
|
|
12.height,
|
|
],
|
|
),
|
|
),
|
|
),
|
|
Container(
|
|
width: double.infinity,
|
|
height: 1,
|
|
color: Colors.grey[100],
|
|
),
|
|
buildFooterActionWidget(context),
|
|
],
|
|
),
|
|
);
|
|
}),
|
|
);
|
|
}
|
|
}
|