Files
kulakpos_app/lib/Screens/Customers/edit_customer.dart

776 lines
44 KiB
Dart
Raw Normal View History

2026-02-07 15:57:09 +07:00
// // ignore: import_of_legacy_library_into_null_safe
// // ignore_for_file: unused_result
// import 'dart:io';
//
// import 'package:flutter/material.dart';
// import 'package:flutter_easyloading/flutter_easyloading.dart';
// import 'package:flutter_feather_icons/flutter_feather_icons.dart';
// import 'package:flutter_riverpod/flutter_riverpod.dart';
// import 'package:image_picker/image_picker.dart';
// import 'package:mobile_pos/Const/api_config.dart';
// import 'package:mobile_pos/Screens/Customers/Model/parties_model.dart';
// import 'package:mobile_pos/constant.dart';
// import 'package:mobile_pos/generated/l10n.dart' as lang;
// import 'package:nb_utils/nb_utils.dart';
//
// import '../../GlobalComponents/glonal_popup.dart';
// import '../../http_client/custome_http_client.dart';
// import '../User Roles/Provider/check_user_role_permission_provider.dart';
// import 'Provider/customer_provider.dart';
// import 'Repo/parties_repo.dart';
//
// // ignore: must_be_immutable
// class EditCustomer extends StatefulWidget {
// EditCustomer({super.key, required this.customerModel});
//
// Party customerModel;
//
// @override
// // ignore: library_private_types_in_public_api
// _EditCustomerState createState() => _EditCustomerState();
// }
//
// class _EditCustomerState extends State<EditCustomer> {
// String groupValue = '';
// bool expanded = false;
// final ImagePicker _picker = ImagePicker();
// bool showProgress = false;
// XFile? pickedImage;
//
// @override
// void initState() {
// phoneController.text = widget.customerModel.phone ?? '';
// nameController.text = widget.customerModel.name ?? '';
// emailController.text = widget.customerModel.email ?? '';
// dueController.text = (widget.customerModel.due ?? 0).toString();
// addressController.text = widget.customerModel.address ?? '';
// groupValue = widget.customerModel.type ?? '';
// super.initState();
// }
//
// final GlobalKey<FormState> _formKay = GlobalKey();
//
// TextEditingController phoneController = TextEditingController();
// TextEditingController nameController = TextEditingController();
// TextEditingController emailController = TextEditingController();
// TextEditingController dueController = TextEditingController();
// TextEditingController addressController = TextEditingController();
//
// final partyCreditLimitController = TextEditingController();
// final partyGstController = TextEditingController();
// final billingAddressController = TextEditingController();
// final billingCityController = TextEditingController();
// final billingStateController = TextEditingController();
// final billingCountryController = TextEditingController();
// final shippingAddressController = TextEditingController();
// final shippingCityController = TextEditingController();
// final shippingStateController = TextEditingController();
// final shippingCountryController = TextEditingController();
// final billingZipCodeCountryController = TextEditingController();
// final shippingZipCodeCountryController = TextEditingController();
// final openingBalanceController = TextEditingController();
//
// FocusNode focusNode = FocusNode();
// String? selectedBillingCountry;
// String? selectedDShippingCountry;
// String? selectedBalanceType;
//
// @override
// Widget build(BuildContext context) {
// final theme = Theme.of(context);
//
// return Consumer(builder: (context, cRef, __) {
// final permissionService = PermissionService(cRef);
// return GlobalPopup(
// child: Scaffold(
// backgroundColor: Colors.white,
// appBar: AppBar(
// backgroundColor: Colors.white,
// title: Text(
// lang.S.of(context).updateContact,
// ),
// centerTitle: true,
// iconTheme: const IconThemeData(color: Colors.black),
// elevation: 0.0,
// ),
// body: Consumer(builder: (context, ref, __) {
// // ignore: unused_local_variable
// final customerData = ref.watch(partiesProvider);
//
// return SingleChildScrollView(
// child: Padding(
// padding: const EdgeInsets.all(16.0),
// child: Column(
// children: [
// Form(
// key: _formKay,
// child: Column(
// children: [
// ///_________Phone_______________________
// TextFormField(
// controller: phoneController,
// validator: (value) {
// if (value == null || value.isEmpty) {
// // return 'Please enter a valid phone number';
// return lang.S.of(context).pleaseEnterAValidPhoneNumber;
// }
// return null;
// },
// decoration: InputDecoration(
// floatingLabelBehavior: FloatingLabelBehavior.always,
// labelText: lang.S.of(context).phone,
// hintText: lang.S.of(context).enterYourPhoneNumber,
// border: const OutlineInputBorder(),
// ),
// ),
// SizedBox(height: 20),
//
// ///_________Name_______________________
// TextFormField(
// controller: nameController,
// validator: (value) {
// if (value == null || value.isEmpty) {
// // return 'Please enter a valid Name';
// return lang.S.of(context).pleaseEnterAValidName;
// }
// // You can add more validation logic as needed
// return null;
// },
// decoration: InputDecoration(
// floatingLabelBehavior: FloatingLabelBehavior.always,
// labelText: lang.S.of(context).name,
// hintText: lang.S.of(context).enterYourName,
// border: const OutlineInputBorder(),
// ),
// ),
// ],
// ),
// ),
// SizedBox(height: 20),
//
// ///_________opening balance_______________________
// // TextFormField(
// // controller: openingBalanceController,
// // keyboardType: TextInputType.name,
// // decoration: InputDecoration(
// // labelText: lang.S.of(context).openingBalance,
// // hintText: lang.S.of(context).enterOpeningBalance,
// // suffixIcon: Padding(
// // padding: const EdgeInsets.all(1.0),
// // child: Container(
// // padding: EdgeInsets.symmetric(horizontal: 10),
// // decoration: BoxDecoration(
// // color: kBackgroundColor,
// // borderRadius: BorderRadius.only(
// // topRight: Radius.circular(4),
// // bottomRight: Radius.circular(4),
// // )),
// // child: DropdownButtonHideUnderline(
// // child: DropdownButton(
// // icon: Icon(
// // Icons.keyboard_arrow_down,
// // color: kPeraColor,
// // ),
// // items: ['Advanced', 'Due'].map((entry) {
// // return DropdownMenuItem(value: entry, child: Text(entry, style: theme.textTheme.bodyLarge?.copyWith(color: kTitleColor)));
// // }).toList(),
// // value: selectedBalanceType ?? 'Advanced',
// // onChanged: (String? value) {
// // setState(() {
// // selectedBalanceType = value;
// // });
// // }),
// // ),
// // ),
// // )),
// // ),
// // SizedBox(height: 20),
// Row(
// children: [
// Expanded(
// child: RadioListTile(
// visualDensity: VisualDensity(horizontal: -4, vertical: -4),
// fillColor: WidgetStateProperty.resolveWith(
// (states) {
// if (states.contains(WidgetState.selected)) {
// return kMainColor;
// }
// return kPeraColor;
// },
// ),
// contentPadding: EdgeInsets.zero,
// groupValue: groupValue,
// title: Text(
// lang.S.of(context).retailer,
// maxLines: 1,
// style: theme.textTheme.bodySmall,
// ),
// value: 'Retailer',
// onChanged: (value) {
// if (widget.customerModel.type != 'Supplier') {
// setState(() {
// groupValue = value.toString();
// });
// }
// },
// // Change the color to indicate it's not selectable
// activeColor: widget.customerModel.type == 'Supplier' ? Colors.grey : kMainColor,
// ),
// ),
// Expanded(
// child: RadioListTile(
// visualDensity: VisualDensity(horizontal: -4, vertical: -4),
// fillColor: WidgetStateProperty.resolveWith(
// (states) {
// if (states.contains(WidgetState.selected)) {
// return kMainColor;
// }
// return kPeraColor;
// },
// ),
// contentPadding: EdgeInsets.zero,
// groupValue: groupValue,
// title: Text(
// lang.S.of(context).dealer,
// maxLines: 1,
// style: theme.textTheme.bodySmall,
// ),
// value: 'Dealer',
// onChanged: (value) {
// if (widget.customerModel.type != 'Supplier') {
// setState(() {
// groupValue = value.toString();
// });
// }
// },
// activeColor: widget.customerModel.type == 'Supplier' ? Colors.grey : kMainColor,
// ),
// ),
// ],
// ),
// Row(
// children: [
// Expanded(
// child: RadioListTile(
// visualDensity: VisualDensity(horizontal: -4, vertical: -4),
// fillColor: WidgetStateProperty.resolveWith(
// (states) {
// if (states.contains(WidgetState.selected)) {
// return kMainColor;
// }
// return kPeraColor;
// },
// ),
// contentPadding: EdgeInsets.zero,
// activeColor: kMainColor,
// groupValue: groupValue,
// title: Text(
// lang.S.of(context).wholesaler,
// maxLines: 1,
// style: theme.textTheme.bodySmall,
// ),
// value: 'Wholesaler',
// onChanged: (value) {
// if (widget.customerModel.type != 'Supplier') {
// setState(() {
// groupValue = value.toString();
// });
// }
// },
// ),
// ),
// Expanded(
// child: RadioListTile(
// visualDensity: VisualDensity(horizontal: -4, vertical: -4),
// fillColor: WidgetStateProperty.resolveWith(
// (states) {
// if (states.contains(WidgetState.selected)) {
// return kMainColor;
// }
// return kPeraColor;
// },
// ),
// contentPadding: EdgeInsets.zero,
// activeColor: kMainColor,
// groupValue: groupValue,
// title: Text(
// lang.S.of(context).supplier,
// maxLines: 1,
// style: theme.textTheme.bodySmall,
// ),
// value: 'Supplier',
// onChanged: (value) {
// if (widget.customerModel.type != 'Retailer' && widget.customerModel.type != 'Dealer' && widget.customerModel.type != 'Wholesaler') {
// setState(() {
// groupValue = value.toString();
// });
// }
// },
// ),
// ),
// ],
// ),
// Visibility(
// visible: showProgress,
// child: const CircularProgressIndicator(
// color: kMainColor,
// strokeWidth: 5.0,
// ),
// ),
// ExpansionPanelList(
// expandIconColor: Colors.red,
// expansionCallback: (int index, bool isExpanded) {},
// animationDuration: const Duration(seconds: 1),
// elevation: 0,
// dividerColor: Colors.white,
// children: [
// ExpansionPanel(
// backgroundColor: kWhite,
// headerBuilder: (BuildContext context, bool isExpanded) {
// return Column(
// mainAxisSize: MainAxisSize.min,
// children: [
// TextButton(
// child: Text(
// lang.S.of(context).moreInfo,
// style: theme.textTheme.titleLarge?.copyWith(
// color: kMainColor,
// ),
// ),
// onPressed: () {
// setState(() {
// expanded == false ? expanded = true : expanded = false;
// });
// },
// ),
// ],
// );
// },
// body: Column(
// children: [
// GestureDetector(
// onTap: () {
// showDialog(
// context: context,
// builder: (BuildContext context) {
// return Dialog(
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(12.0),
// ),
// // ignore: sized_box_for_whitespace
// child: Container(
// height: 200.0,
// width: MediaQuery.of(context).size.width - 80,
// child: Center(
// child: Row(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// GestureDetector(
// onTap: () async {
// pickedImage = await _picker.pickImage(source: ImageSource.gallery);
// setState(() {});
// Navigator.pop(context);
// },
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// const Icon(
// Icons.photo_library_rounded,
// size: 60.0,
// color: kMainColor,
// ),
// Text(lang.S.of(context).gallery, style: theme.textTheme.titleLarge?.copyWith(color: kMainColor)),
// ],
// ),
// ),
// const SizedBox(
// width: 40.0,
// ),
// GestureDetector(
// onTap: () async {
// pickedImage = await _picker.pickImage(source: ImageSource.camera);
// setState(() {});
// Navigator.pop(context);
// },
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// const Icon(
// Icons.camera,
// size: 60.0,
// color: kGreyTextColor,
// ),
// Text(
// lang.S.of(context).camera,
// style: theme.textTheme.titleLarge?.copyWith(
// color: kGreyTextColor,
// ),
// ),
// ],
// ),
// ),
// ],
// ),
// ),
// ),
// );
// });
// },
// child: Stack(
// children: [
// Container(
// height: 120,
// width: 120,
// decoration: BoxDecoration(
// border: Border.all(color: Colors.black54, width: 1),
// borderRadius: const BorderRadius.all(Radius.circular(120)),
// image: pickedImage == null
// ? widget.customerModel.image.isEmptyOrNull
// ? const DecorationImage(
// image: AssetImage('images/no_shop_image.png'),
// fit: BoxFit.cover,
// )
// : DecorationImage(
// image: NetworkImage('${APIConfig.domain}${widget.customerModel.image!}'),
// fit: BoxFit.cover,
// )
// : DecorationImage(
// image: FileImage(File(pickedImage!.path)),
// fit: BoxFit.cover,
// ),
// ),
// ),
// Positioned(
// bottom: 0,
// right: 0,
// child: Container(
// height: 35,
// width: 35,
// decoration: BoxDecoration(
// border: Border.all(color: Colors.white, width: 2),
// borderRadius: const BorderRadius.all(Radius.circular(120)),
// color: kMainColor,
// ),
// child: const Icon(
// Icons.camera_alt_outlined,
// size: 20,
// color: Colors.white,
// ),
// ),
// )
// ],
// ),
// ),
// const SizedBox(height: 20),
// TextFormField(
// controller: emailController,
// decoration: InputDecoration(
// labelText: lang.S.of(context).email,
// hintText: lang.S.of(context).hintEmail,
// ),
// ),
// SizedBox(height: 20),
// TextFormField(
// controller: addressController,
// decoration: InputDecoration(
// labelText: lang.S.of(context).address,
// hintText: lang.S.of(context).enterFullAddress,
// ),
// ),
// SizedBox(height: 20),
// TextFormField(
// readOnly: true,
// controller: dueController,
// decoration: InputDecoration(
// border: const OutlineInputBorder(),
// floatingLabelBehavior: FloatingLabelBehavior.always,
// labelText: lang.S.of(context).previousDue,
// ),
// ),
// // TextFormField(
// // readOnly: true,
// // controller: dueController,
// // decoration: InputDecoration(
// // border: const OutlineInputBorder(),
// // floatingLabelBehavior:
// // FloatingLabelBehavior.always,
// // labelText: lang.S.of(context).previousDue,
// // ),
// // ),
// // Row(
// // children: [
// // Expanded(
// // child: TextFormField(
// // controller: partyCreditLimitController,
// // decoration: InputDecoration(
// // border: const OutlineInputBorder(),
// // floatingLabelBehavior: FloatingLabelBehavior.always,
// // labelText: 'Party Credit Limit',
// // //hintText: 'Enter your address'
// // hintText: 'Ex: 800'),
// // ),
// // ),
// // SizedBox(width: 20),
// // Expanded(
// // child: TextFormField(
// // controller: partyGstController,
// // decoration: InputDecoration(
// // border: const OutlineInputBorder(),
// // floatingLabelBehavior: FloatingLabelBehavior.always,
// // labelText: 'Party Gst',
// // //hintText: 'Enter your address'
// // hintText: 'Ex: 800'),
// // ),
// // ),
// // ],
// // ),
// // SizedBox(height: 4),
// // Theme(
// // data: Theme.of(context).copyWith(
// // dividerColor: Colors.transparent,
// // ),
// // child: ExpansionTile(
// // visualDensity: VisualDensity(vertical: -2, horizontal: -4),
// // tilePadding: EdgeInsets.zero,
// // trailing: SizedBox.shrink(),
// // title: Row(
// // crossAxisAlignment: CrossAxisAlignment.center,
// // children: [
// // Icon(FeatherIcons.minus, size: 20, color: Colors.red),
// // SizedBox(width: 8),
// // Text(
// // 'Billing Address',
// // style: theme.textTheme.titleMedium?.copyWith(
// // color: kMainColor,
// // ),
// // )
// // ],
// // ),
// // children: [
// // SizedBox(height: 10),
// // //___________Billing Address________________
// // TextFormField(
// // controller: billingAddressController,
// // decoration: InputDecoration(
// // labelText: 'Address',
// // hintText: 'Enter Address',
// // ),
// // ),
// // SizedBox(height: 20),
// // //--------------billing city------------------------
// // TextFormField(
// // controller: billingCityController,
// // decoration: InputDecoration(
// // labelText: 'City',
// // hintText: 'Enter city',
// // ),
// // ),
// // SizedBox(height: 20),
// // //--------------billing state------------------------
// // TextFormField(
// // controller: billingStateController,
// // decoration: InputDecoration(
// // labelText: 'State',
// // hintText: 'Enter state',
// // ),
// // ),
// // SizedBox(height: 20),
// // Row(
// // children: [
// // //--------------billing zip code------------------------
// // Expanded(
// // child: TextFormField(
// // controller: billingZipCodeCountryController,
// // decoration: InputDecoration(
// // labelText: 'Zip Code',
// // hintText: 'Enter zip code',
// // ),
// // ),
// // ),
// // SizedBox(width: 20),
// // //--------------billing country------------------------
// // Expanded(
// // child: DropdownButtonFormField(
// // isExpanded: true,
// // hint: Text(
// // 'Select Country',
// // maxLines: 1,
// // style: theme.textTheme.bodyMedium?.copyWith(
// // color: kPeraColor,
// // ),
// // overflow: TextOverflow.ellipsis,
// // ),
// // icon: Icon(Icons.keyboard_arrow_down, color: kPeraColor),
// // items: ['Bangladesh', 'Pakisthan', 'Iran'].map((entry) {
// // return DropdownMenuItem(
// // value: entry,
// // child: Text(
// // entry,
// // style: theme.textTheme.bodyMedium?.copyWith(color: kPeraColor),
// // ),
// // );
// // }).toList(),
// // value: selectedDShippingCountry,
// // onChanged: (String? value) {
// // setState(() {
// // selectedBillingCountry = value;
// // });
// // }),
// // ),
// // ],
// // ),
// // ],
// // ),
// // ),
// // Theme(
// // data: Theme.of(context).copyWith(
// // dividerColor: Colors.transparent,
// // ),
// // child: ExpansionTile(
// // tilePadding: EdgeInsets.zero,
// // visualDensity: VisualDensity(horizontal: -4, vertical: -2),
// // trailing: SizedBox.shrink(),
// // title: Row(
// // crossAxisAlignment: CrossAxisAlignment.center,
// // children: [
// // Icon(FeatherIcons.plus, size: 20),
// // SizedBox(width: 8),
// // Text(
// // 'Shipping Address',
// // style: theme.textTheme.titleMedium,
// // )
// // ],
// // ),
// // children: [
// // SizedBox(height: 10),
// // //___________Billing Address________________
// // TextFormField(
// // controller: billingAddressController,
// // decoration: InputDecoration(
// // labelText: 'Address',
// // hintText: 'Enter Address',
// // ),
// // ),
// // SizedBox(height: 20),
// // //--------------billing city------------------------
// // TextFormField(
// // controller: billingCityController,
// // decoration: InputDecoration(
// // labelText: 'City',
// // hintText: 'Enter city',
// // ),
// // ),
// // SizedBox(height: 20),
// // //--------------billing state------------------------
// // TextFormField(
// // controller: billingStateController,
// // decoration: InputDecoration(
// // labelText: 'State',
// // hintText: 'Enter state',
// // ),
// // ),
// // SizedBox(height: 20),
// // Row(
// // children: [
// // //--------------billing zip code------------------------
// // Expanded(
// // child: TextFormField(
// // controller: billingZipCodeCountryController,
// // decoration: InputDecoration(
// // labelText: 'Zip Code',
// // hintText: 'Enter zip code',
// // ),
// // ),
// // ),
// // SizedBox(width: 20),
// // //--------------billing country------------------------
// // Expanded(
// // child: DropdownButtonFormField(
// // isExpanded: true,
// // hint: Text(
// // 'Select Country',
// // maxLines: 1,
// // style: theme.textTheme.bodyMedium?.copyWith(
// // color: kPeraColor,
// // ),
// // overflow: TextOverflow.ellipsis,
// // ),
// // icon: Icon(Icons.keyboard_arrow_down, color: kPeraColor),
// // items: ['Bangladesh', 'Pakisthan', 'Iran'].map((entry) {
// // return DropdownMenuItem(
// // value: entry,
// // child: Text(
// // entry,
// // style: theme.textTheme.bodyMedium?.copyWith(color: kPeraColor),
// // ),
// // );
// // }).toList(),
// // value: selectedDShippingCountry,
// // onChanged: (String? value) {
// // setState(() {
// // selectedBillingCountry = value;
// // });
// // }),
// // ),
// // ],
// // ),
// // ],
// // ),
// // )
// ],
// ),
// isExpanded: expanded,
// ),
// ],
// ),
// SizedBox(height: 20),
// ElevatedButton(
// onPressed: () async {
// if (!permissionService.hasPermission(Permit.partiesCreate.value)) {
// ScaffoldMessenger.of(context).showSnackBar(
// SnackBar(
// backgroundColor: Colors.red,
// content: Text('You do not have permission to update Party.'),
// ),
// );
// return;
// }
// if (_formKay.currentState!.validate()) {
// try {
// EasyLoading.show(
// status: lang.S.of(context).updating,
// // 'Updating...'
// );
// final party = PartyRepository();
// await party.updateParty(
// id: widget.customerModel.id.toString(),
// // Assuming id is a property in customerModel
// ref: ref,
// context: context,
// name: nameController.text,
// phone: phoneController.text,
// type: groupValue,
// image: pickedImage != null ? File(pickedImage!.path) : null,
// email: emailController.text,
// address: addressController.text,
// due: dueController.text,
// );
// EasyLoading.dismiss();
// } catch (e) {
// EasyLoading.dismiss();
// ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(e.toString())));
// }
// }
// },
// child: Text(lang.S.of(context).update)),
// ],
// ),
// ),
// );
// }),
// ),
// );
// });
// }
// }