diff --git a/lib/config/routes.dart b/lib/config/routes.dart index ca476df..91e4b56 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -18,13 +18,15 @@ import 'package:mohem_flutter_app/ui/payslip/monthly_pay_slip_screen.dart'; import 'package:mohem_flutter_app/ui/profile/add_update_family_member.dart'; import 'package:mohem_flutter_app/ui/profile/basic_details.dart'; import 'package:mohem_flutter_app/ui/profile/contact_details.dart'; +import 'package:mohem_flutter_app/ui/profile/delete_family_member.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_address_screen.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_basic_details_screen.dart'; import 'package:mohem_flutter_app/ui/profile/family_members.dart'; import 'package:mohem_flutter_app/ui/profile/personal_info.dart'; +import 'package:mohem_flutter_app/ui/profile/profile_screen.dart'; import 'package:mohem_flutter_app/ui/screens/announcements/announcement_details.dart'; import 'package:mohem_flutter_app/ui/screens/announcements/announcements.dart'; -import 'package:mohem_flutter_app/ui/profile/delete_family_member.dart'; + // import 'package:mohem_flutter_app/ui/my_attendance/work_from_home_screen.dart'; import 'package:mohem_flutter_app/ui/screens/eit/add_eit.dart'; import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_home.dart'; @@ -32,7 +34,6 @@ import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_hr_request.da import 'package:mohem_flutter_app/ui/screens/mowadhafhi/request_details.dart'; import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions.dart'; import 'package:mohem_flutter_app/ui/screens/pending_transactions/pending_transactions_details.dart'; -import 'package:mohem_flutter_app/ui/profile/profile_screen.dart'; import 'package:mohem_flutter_app/ui/screens/submenu_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/itg_detail_screen.dart'; @@ -70,6 +71,7 @@ class AppRoutes { static const String addDynamicInputProfile = 'addDynamicInputProfile'; static const String addDynamicAddressScreen = 'addDynamicAddressProfile'; + //Attendance static const String attendance = "/attendance"; static const String monthlyAttendance = "/monthlyAttendance"; diff --git a/lib/ui/screens/mowadhafhi/mowadhafhi_home.dart b/lib/ui/screens/mowadhafhi/mowadhafhi_home.dart index edf6b03..45d881f 100644 --- a/lib/ui/screens/mowadhafhi/mowadhafhi_home.dart +++ b/lib/ui/screens/mowadhafhi/mowadhafhi_home.dart @@ -7,6 +7,7 @@ import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/mowadhafhi/get_tickets_list.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; @@ -20,7 +21,7 @@ class MowadhafhiHome extends StatefulWidget { } class _MowadhafhiHomeState extends State { - List getTicketsByEmployeeList = []; + List? getTicketsByEmployeeList; @override void initState() { @@ -28,111 +29,10 @@ class _MowadhafhiHomeState extends State { super.initState(); } - @override - Widget build(BuildContext context) { - return Scaffold( - backgroundColor: Colors.white, - appBar: AppBarWidget( - context, - title: LocaleKeys.mowadhafhiRequest.tr(), - ), - body: Container( - margin: const EdgeInsets.only(top: 10.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Expanded( - child: ListView.separated( - physics: const BouncingScrollPhysics(), - shrinkWrap: true, - itemBuilder: (BuildContext context, int index) { - return InkWell( - onTap: () { - openRequestDetails(getTicketsByEmployeeList[index].ticketId!); - }, - child: Container( - width: double.infinity, - // height: 100.0, - padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), - margin: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - boxShadow: [ - BoxShadow( - color: const Color(0xff000000).withOpacity(.05), - blurRadius: 26, - offset: const Offset(0, -3), - ), - ], - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - getTicketsByEmployeeList[index].ticketTypeName!.toText14(color: MyColors.grey57Color), - getTicketsByEmployeeList[index].created!.split(" ")[0].toText12(color: MyColors.grey70Color), - ], - ), - Container( - padding: const EdgeInsets.only(top: 10.0), - child: getTicketsByEmployeeList[index].description!.toText12(color: MyColors.grey57Color), - ), - Container( - padding: const EdgeInsets.only(top: 10.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - getTicketsByEmployeeList[index].ticketStatusInternalName!.toText14(color: MyColors.gradiantEndColor), - SvgPicture.asset( - "assets/images/arrow_next.svg", - color: MyColors.darkIconColor, - ) - ], - ), - ), - ], - ), - ), - ); - }, - separatorBuilder: (BuildContext context, int index) => 12.height, - itemCount: getTicketsByEmployeeList.length ?? 0)), - 80.height - ], - ), - ), - bottomSheet: Container( - decoration: const BoxDecoration( - color: MyColors.white, - boxShadow: [ - BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), - ], - ), - child: DefaultButton(LocaleKeys.createRequest.tr(), () async { - openHRRequest(); - }).insideContainer, - )); - } - - void openRequestDetails(String itgTicketID) async { - await Navigator.pushNamed(context, AppRoutes.mowadhafhiDetails, arguments: itgTicketID); - } - - void openHRRequest() async { - await Navigator.pushNamed(context, AppRoutes.mowadhafhiHRRequest).then((value) { - getOpenTickets(); - }); - } - void getOpenTickets() async { try { Utils.showLoading(context); - getTicketsByEmployeeList.clear(); + getTicketsByEmployeeList?.clear(); getTicketsByEmployeeList = await MowadhafhiApiClient().getTicketsByEmployee(); Utils.hideLoading(context); setState(() {}); @@ -141,4 +41,65 @@ class _MowadhafhiHomeState extends State { Utils.handleException(ex, context, null); } } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: LocaleKeys.mowadhafhiRequest.tr(), + ), + body: getTicketsByEmployeeList == null + ? const SizedBox() + : (getTicketsByEmployeeList!.isEmpty) + ? Utils.getNoDataWidget(context) + : Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + ListView.separated( + physics: const BouncingScrollPhysics(), + padding: const EdgeInsets.all(21), + itemBuilder: (BuildContext context, int index) { + return InkWell( + onTap: () { + Navigator.pushNamed(context, AppRoutes.mowadhafhiDetails, arguments: getTicketsByEmployeeList![index].ticketId); + }, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + getTicketsByEmployeeList![index].ticketTypeName!.toText14(color: MyColors.darkTextColor).expanded, + getTicketsByEmployeeList![index].created!.split(" ")[0].toText12(color: MyColors.grey70Color), + ], + ), + getTicketsByEmployeeList![index].description!.toText12(color: MyColors.grey57Color), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + getTicketsByEmployeeList![index].ticketStatusInternalName!.toText14(color: MyColors.textMixColor), + SvgPicture.asset( + "assets/images/arrow_next.svg", + color: MyColors.darkIconColor, + ) + ], + ), + ], + ).objectContainerView(), + ); + }, + separatorBuilder: (BuildContext context, int index) => 12.height, + itemCount: getTicketsByEmployeeList!.length) + .expanded, + DefaultButton(LocaleKeys.createRequest.tr(), () async { + await Navigator.pushNamed(context, AppRoutes.mowadhafhiHRRequest); + getOpenTickets(); + }).insideContainer + ], + ), + ); + } } diff --git a/lib/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart b/lib/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart index 7ac6c43..44b3833 100644 --- a/lib/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart +++ b/lib/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart @@ -21,7 +21,6 @@ import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/simple_button.dart'; import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; -import 'package:mohem_flutter_app/widgets/radio/show_radio.dart'; class MowadhafhiHRRequest extends StatefulWidget { const MowadhafhiHRRequest({Key? key}) : super(key: key); @@ -42,7 +41,9 @@ class _MowadhafhiHRRequestState extends State { GetSectionTopics? selectedTopic; List attachmentFiles = []; - String selectedServiceType = ""; + GetTicketTypes? selectedServiceType; + + // String selectedServiceType = ""; String description = ""; int? projectID; @@ -58,69 +59,40 @@ class _MowadhafhiHRRequestState extends State { backgroundColor: Colors.white, appBar: AppBarWidget( context, - title: LocaleKeys.mowadhafhiRequest.tr(), + title: LocaleKeys.createRequest.tr(), ), - body: SingleChildScrollView( - child: getTicketTypesList.isNotEmpty - ? Container( - width: double.infinity, - padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), - margin: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - boxShadow: [ - BoxShadow( - color: const Color(0xff000000).withOpacity(.05), - blurRadius: 26, - offset: const Offset(0, -3), - ), - ], - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, + body: getTicketTypesList.isNotEmpty + ? Column( + children: [ + ListView( + padding: const EdgeInsets.all(21), children: [ - LocaleKeys.serviceType.tr().toText16(), - 12.height, - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - SizedBox( - height: 40, - child: ListView.separated( - itemBuilder: (context, index) { - return Container( - padding: const EdgeInsets.only(right: 6, top: 8, bottom: 8), - child: ShowRadio( - title: getTicketTypesList[index].typeName!, - value: getTicketTypesList[index].ticketTypeId!.toString(), - groupValue: selectedServiceType, - selectedColor: MyColors.gradiantStartColor), - ).onPress(() { - selectedServiceType = getTicketTypesList[index].ticketTypeId!.toString(); - setState(() {}); - }); - }, - separatorBuilder: (context, index) => 1.width, - shrinkWrap: true, - itemCount: getTicketTypesList.length ?? 0, - scrollDirection: Axis.horizontal, - ), + PopupMenuButton( + child: DynamicTextFieldWidget( + LocaleKeys.serviceType.tr(), + selectedServiceType?.typeName ?? LocaleKeys.selectTypeT.tr(), + isEnable: false, + isPopup: true, + isInputTypeNum: true, + isReadOnly: false, ), - ], - ), - 12.height, - LocaleKeys.departmentName.tr().toText16(), + itemBuilder: (_) => >[ + for (int i = 0; i < getTicketTypesList.length; i++) PopupMenuItem(child: Text(getTicketTypesList[i].typeName!), value: i), + ], + onSelected: (int popupIndex) { + selectedServiceType = getTicketTypesList[popupIndex]; //.ticketTypeId!.toString(); + setState(() {}); + }), 12.height, PopupMenuButton( child: DynamicTextFieldWidget( - LocaleKeys.selectDepartment.tr(), - selectedDepartment?.departmentName ?? "", + LocaleKeys.departmentName.tr(), + selectedDepartment?.departmentName ?? LocaleKeys.selectDepartment.tr(), isEnable: false, isPopup: true, isInputTypeNum: true, isReadOnly: false, - ).paddingOnly(bottom: 12), + ), itemBuilder: (_) => >[ for (int i = 0; i < getProjectDepartmentsList!.length; i++) PopupMenuItem(child: Text(getProjectDepartmentsList![i].departmentName!), value: i), ], @@ -130,17 +102,15 @@ class _MowadhafhiHRRequestState extends State { setState(() {}); }), 12.height, - LocaleKeys.relatedSection.tr().toText16(), - 12.height, PopupMenuButton( child: DynamicTextFieldWidget( - LocaleKeys.selectSection.tr(), - selectedSection?.sectionName ?? "", + LocaleKeys.relatedSection.tr(), + selectedSection?.sectionName ?? LocaleKeys.selectSection.tr(), isEnable: false, isPopup: true, isInputTypeNum: true, isReadOnly: false, - ).paddingOnly(bottom: 12), + ), itemBuilder: (_) => >[ for (int i = 0; i < getDepartmentSectionsList!.length; i++) PopupMenuItem(child: Text(getDepartmentSectionsList![i].sectionName!), value: i), ], @@ -150,35 +120,29 @@ class _MowadhafhiHRRequestState extends State { setState(() {}); }), 12.height, - LocaleKeys.relatedTopic.tr().toText16(), - 12.height, PopupMenuButton( child: DynamicTextFieldWidget( - LocaleKeys.selectTopic.tr(), - selectedTopic?.topicName ?? "", + LocaleKeys.relatedTopic.tr(), + selectedTopic?.topicName ?? LocaleKeys.selectTopic.tr(), isEnable: false, isPopup: true, isInputTypeNum: true, isReadOnly: false, - ).paddingOnly(bottom: 12), + ), itemBuilder: (_) => >[ - for (int i = 0; i < getSectionTopicsList!.length; i++) PopupMenuItem(child: Text(getSectionTopicsList![i].topicName!), value: i), + for (int i = 0; i < getSectionTopicsList.length; i++) PopupMenuItem(child: Text(getSectionTopicsList[i].topicName!), value: i), ], onSelected: (int popupIndex) { - selectedTopic = getSectionTopicsList![popupIndex]; + selectedTopic = getSectionTopicsList[popupIndex]; // getDepartmentSections(selectedSection?.departmentSectionId); setState(() {}); }), 12.height, - LocaleKeys.supportingDocument.tr().toText16(), - 12.height, - attachmentView("Attachments"), - 12.height, - LocaleKeys.description.tr().toText16(), + attachmentView("Attachments").objectContainerView(title: LocaleKeys.supportingDocument.tr()), 12.height, DynamicTextFieldWidget( - "", - "", + LocaleKeys.description.tr(), + LocaleKeys.writeAMessage.tr(), isEnable: true, isPopup: false, lines: 4, @@ -189,40 +153,25 @@ class _MowadhafhiHRRequestState extends State { description = value; }, ), - 50.height ], - ), - ) - : Container(), - ), - bottomSheet: Container( - padding: const EdgeInsets.only(top: 8.0, bottom: 8.0), - decoration: const BoxDecoration( - color: MyColors.white, - ), - child: Row( - children: [ - 12.width, - Expanded( - child: DefaultButton( - LocaleKeys.submit.tr(), - !checkValidation() - ? null - : () { - submitHRRequest(); - }, - color: const Color(0xFFD02127), - ), - ), - 12.width, - ], - ), - ), + ).expanded, + DefaultButton( + LocaleKeys.submit.tr(), + !checkValidation() + ? null + : () { + submitHRRequest(); + }, + color: const Color(0xFFD02127), + ).insideContainer + ], + ) + : Container(), ); } bool checkValidation() { - if (selectedServiceType == "" || selectedDepartment == null || selectedSection == null || selectedTopic == null) { + if (selectedServiceType == null || selectedDepartment == null || selectedSection == null || selectedTopic == null) { return false; } else { return true; @@ -230,69 +179,55 @@ class _MowadhafhiHRRequestState extends State { } Widget attachmentView(String title) { - return Container( - padding: const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(15), - boxShadow: [ - BoxShadow( - color: const Color(0xff000000).withOpacity(.05), - blurRadius: 26, - offset: const Offset(0, -3), - ), - ], - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - title.toText16().expanded, - 6.width, - SimpleButton(LocaleKeys.add.tr(), () async { - FilePickerResult? result = await FilePicker.platform.pickFiles(allowMultiple: true); - if (result != null) { - attachmentFiles = attachmentFiles + result.paths.map((path) => File(path!)).toList(); - attachmentFiles = attachmentFiles.toSet().toList(); - setState(() {}); - } - }, fontSize: 14), - ], - ), - if (attachmentFiles.isNotEmpty) 12.height, - if (attachmentFiles.isNotEmpty) - ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (cxt, index) { - String fileName = attachmentFiles[index].path.split('/').last; + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + title.toText16().expanded, + 6.width, + SimpleButton(LocaleKeys.add.tr(), () async { + FilePickerResult? result = await FilePicker.platform.pickFiles(allowMultiple: true); + if (result != null) { + attachmentFiles = attachmentFiles + result.paths.map((path) => File(path!)).toList(); + attachmentFiles = attachmentFiles.toSet().toList(); + setState(() {}); + } + }, fontSize: 14), + ], + ), + if (attachmentFiles.isNotEmpty) 12.height, + if (attachmentFiles.isNotEmpty) + ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (cxt, index) { + String fileName = attachmentFiles[index].path.split('/').last; - return Row( - children: [ - fileName.toText13().expanded, - 6.width, - IconButton( - padding: EdgeInsets.zero, - iconSize: 20, - icon: const Icon(Icons.cancel_rounded), - color: MyColors.redColor, - constraints: const BoxConstraints(), - onPressed: () async { - attachmentFiles.removeAt(index); - setState(() {}); - }, - ) - ], - ); - }, - separatorBuilder: (cxt, index) => 6.height, - itemCount: attachmentFiles.length), - ], - ), + return Row( + children: [ + fileName.toText13().expanded, + 6.width, + IconButton( + padding: EdgeInsets.zero, + iconSize: 20, + icon: const Icon(Icons.cancel_rounded), + color: MyColors.redColor, + constraints: const BoxConstraints(), + onPressed: () async { + attachmentFiles.removeAt(index); + setState(() {}); + }, + ) + ], + ); + }, + separatorBuilder: (cxt, index) => 6.height, + itemCount: attachmentFiles.length), + ], ); } @@ -376,7 +311,7 @@ class _MowadhafhiHRRequestState extends State { } } int? messageStatus = await MowadhafhiApiClient().submitRequest(selectedDepartment?.projectDepartmentId, description, projectID, selectedSection?.departmentSectionId.toString(), - selectedTopic?.sectionTopicId.toString(), int.parse(selectedServiceType), list); + selectedTopic?.sectionTopicId.toString(), selectedServiceType!.ticketTypeId, list); Utils.showToast(LocaleKeys.requestCreatedSuccessfully.tr()); Utils.hideLoading(context); Navigator.pop(context);