Commit 1a2ae52a authored by Sai Srinivas's avatar Sai Srinivas
Browse files

27-06-2025 By Sai Srinivas

Add Order Module and Test cases.
parent 381932be
class ordersDetailsDispatchOrderViewResponse {
List<Products>? products;
String? error;
String? message;
ordersDetailsDispatchOrderViewResponse(
{this.products, this.error, this.message});
ordersDetailsDispatchOrderViewResponse.fromJson(Map<String, dynamic> json) {
if (json['products'] != null) {
products = <Products>[];
json['products'].forEach((v) {
products!.add(new Products.fromJson(v));
});
}
error = json['error'];
message = json['message'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.products != null) {
data['products'] = this.products!.map((v) => v.toJson()).toList();
}
data['error'] = this.error;
data['message'] = this.message;
return data;
}
}
class Products {
String? id;
String? orderId;
String? productId;
String? pdiId;
String? qty;
String? unitPrice;
String? cgstPercentage;
String? sgstPercentage;
String? igstPercentage;
String? totalPrice;
String? isExist;
String? createdDatetime;
String? updatedDatetime;
String? productName;
String? crmOrderPId;
Products(
{this.id,
this.orderId,
this.productId,
this.pdiId,
this.qty,
this.unitPrice,
this.cgstPercentage,
this.sgstPercentage,
this.igstPercentage,
this.totalPrice,
this.isExist,
this.createdDatetime,
this.updatedDatetime,
this.productName,
this.crmOrderPId});
Products.fromJson(Map<String, dynamic> json) {
id = json['id'];
orderId = json['order_id'];
productId = json['product_id'];
pdiId = json['pdi_id'];
qty = json['qty'];
unitPrice = json['unit_price'];
cgstPercentage = json['cgst_percentage'];
sgstPercentage = json['sgst_percentage'];
igstPercentage = json['igst_percentage'];
totalPrice = json['total_price'];
isExist = json['is_exist'];
createdDatetime = json['created_datetime'];
updatedDatetime = json['updated_datetime'];
productName = json['product_name'];
crmOrderPId = json['crm_order_p_id'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['order_id'] = this.orderId;
data['product_id'] = this.productId;
data['pdi_id'] = this.pdiId;
data['qty'] = this.qty;
data['unit_price'] = this.unitPrice;
data['cgst_percentage'] = this.cgstPercentage;
data['sgst_percentage'] = this.sgstPercentage;
data['igst_percentage'] = this.igstPercentage;
data['total_price'] = this.totalPrice;
data['is_exist'] = this.isExist;
data['created_datetime'] = this.createdDatetime;
data['updated_datetime'] = this.updatedDatetime;
data['product_name'] = this.productName;
data['crm_order_p_id'] = this.crmOrderPId;
return data;
}
}
...@@ -22,624 +22,642 @@ import '../../Models/ordersModels/addOrderTpcAgentListResponse.dart'; ...@@ -22,624 +22,642 @@ import '../../Models/ordersModels/addOrderTpcAgentListResponse.dart';
import '../../services/api_calling.dart'; import '../../services/api_calling.dart';
import '../HomeScreenNotifier.dart'; import '../HomeScreenNotifier.dart';
class Addorderprovider extends ChangeNotifier {TextEditingController dropDownSearchController = TextEditingController(); class Addorderprovider extends ChangeNotifier {
TextEditingController dropDownTpcSearchController = TextEditingController(); TextEditingController dropDownSearchController = TextEditingController();
TextEditingController billingStateSearchController = TextEditingController(); TextEditingController dropDownTpcSearchController = TextEditingController();
TextEditingController billingDistrictSearchController = TextEditingController(); TextEditingController billingStateSearchController = TextEditingController();
TextEditingController billingSubLocSearchController = TextEditingController(); TextEditingController billingDistrictSearchController =
TextEditingController dispatchStateSearchController = TextEditingController(); TextEditingController();
TextEditingController dispatchDistrictSearchController = TextEditingController(); TextEditingController billingSubLocSearchController = TextEditingController();
TextEditingController dispatchSubLocSearchController = TextEditingController(); TextEditingController dispatchStateSearchController = TextEditingController();
TextEditingController dispatchDistrictSearchController =
TextEditingController billingNameController = TextEditingController(); TextEditingController();
TextEditingController billingAddressController = TextEditingController(); TextEditingController dispatchSubLocSearchController =
TextEditingController billingPincodeController = TextEditingController(); TextEditingController();
TextEditingController dispatchAddressController = TextEditingController();
TextEditingController dispatchPincodeController = TextEditingController(); TextEditingController billingNameController = TextEditingController();
TextEditingController gstController = TextEditingController(); TextEditingController billingAddressController = TextEditingController();
TextEditingController orderReceivedDateController = TextEditingController(); TextEditingController billingPincodeController = TextEditingController();
TextEditingController tpcAmountController = TextEditingController(); TextEditingController dispatchAddressController = TextEditingController();
TextEditingController dispatchPincodeController = TextEditingController();
List<TextEditingController> ProductControllers = []; TextEditingController gstController = TextEditingController();
List<TextEditingController> PriceControllers = []; TextEditingController orderReceivedDateController = TextEditingController();
List<TextEditingController> QuantityControllers = []; TextEditingController tpcAmountController = TextEditingController();
List<TextEditingController> CGSTControllers = [];
List<TextEditingController> SGSTControllers = []; List<TextEditingController> ProductControllers = [];
List<TextEditingController> IGSTControllers = []; List<TextEditingController> PriceControllers = [];
List<TextEditingController> TotalPriceControllers = []; List<TextEditingController> QuantityControllers = [];
List<TextEditingController> TaxableValueControllers = []; List<TextEditingController> CGSTControllers = [];
List<TextEditingController> SGSTControllers = [];
TextEditingController basicAmountReadOnlyController = TextEditingController(); List<TextEditingController> IGSTControllers = [];
TextEditingController cgstReadOnlyController = TextEditingController(); List<TextEditingController> TotalPriceControllers = [];
TextEditingController sgstReadOnlyController = TextEditingController(); List<TextEditingController> TaxableValueControllers = [];
TextEditingController igstReadOnlyController = TextEditingController();
TextEditingController totalReadOnlyAmountController = TextEditingController(); TextEditingController basicAmountReadOnlyController = TextEditingController();
TextEditingController noteController = TextEditingController(); TextEditingController cgstReadOnlyController = TextEditingController();
List<AccountList> _accountList = []; TextEditingController sgstReadOnlyController = TextEditingController();
List<Employees> _employees = []; TextEditingController igstReadOnlyController = TextEditingController();
List<States> _billingStates = []; TextEditingController totalReadOnlyAmountController = TextEditingController();
List<States> _dispatchStates = []; TextEditingController noteController = TextEditingController();
List<SaleProducts> _saleProducts = []; List<AccountList> _accountList = [];
List<Employees> _employees = [];
List<Districts> _billingDistricts = []; List<States> _billingStates = [];
List<Districts> _dispatchDistricts = []; List<States> _dispatchStates = [];
List<SubLocations> _billingSubLocations = []; List<SaleProducts> _saleProducts = [];
List<SubLocations> _dispatchSubLocations = [];
List<Districts> _billingDistricts = [];
List<String> _unloadingScope = []; List<Districts> _dispatchDistricts = [];
List<String> _freightScope = []; List<SubLocations> _billingSubLocations = [];
List<String> _erectionScope = []; List<SubLocations> _dispatchSubLocations = [];
List<String> _tpcApplicable = [];
List<TpcList> _tpcAgent = []; List<String> _unloadingScope = [];
List<String> _freightScope = [];
AccountDetails _accountDetails = AccountDetails(); List<String> _erectionScope = [];
List<String> _tpcApplicable = [];
String selectAccountError = ""; List<TpcList> _tpcAgent = [];
String billingNameError = "";
String billingAddressError = ""; AccountDetails _accountDetails = AccountDetails();
String billingPincodeError = "";
String dispatchAddressError = ""; String selectAccountError = "";
String dispatchPincodeError = ""; String orderDateError = "";
String tpcAmountError = ""; String billingNameError = "";
String gstError = ""; String billingAddressError = "";
String billingPincodeError = "";
AccountList? _selectedAccountList; String dispatchAddressError = "";
String? _selectedAccountID; String dispatchPincodeError = "";
String? _selectedAccountName; String tpcAmountError = "";
String gstError = "";
Employees? _selectedEmployees; String selectedBillingStateError = "";
String? _selectedEmployeeID; String selectedBillingDistrictError = "";
String? _selectedEmployeeName; String selectedBillingSubLocError = "";
String selectedDispatchStateError = "";
States? _selectedBillingStates; String selectedDispatchDistrictError = "";
String? _selectedBillingStateID; String selectedDispatchSubLocError = "";
String? _selectedBillingStateName;
AccountList? _selectedAccountList;
Districts? _selectedBillingDistricts; String? _selectedAccountID;
String? _selectedBillingDistrictID; String? _selectedAccountName;
String? _selectedBillingDistrictValue;
Employees? _selectedEmployees;
SubLocations? _selectedBillingSubLocations; String? _selectedEmployeeID;
String? _selectedBillingSubLocID; String? _selectedEmployeeName;
String? _selectedBillingSubLocValue;
States? _selectedBillingStates;
States? _selectedDispatchStates; String? _selectedBillingStateID;
String? _selectedDispatchStateID; String? _selectedBillingStateName;
String? _selectedDispatchStateName;
Districts? _selectedBillingDistricts;
Districts? _selectedDispatchDistricts; String? _selectedBillingDistrictID;
String? _selectedDispatchDistrictID; String? _selectedBillingDistrictValue;
String? _selectedDispatchDistrictValue;
SubLocations? _selectedBillingSubLocations;
SubLocations? _selectedDispatchSubLocations; String? _selectedBillingSubLocID;
String? _selectedDispatchSubLocID; String? _selectedBillingSubLocValue;
String? _selectedDispatchSubLocValue;
States? _selectedDispatchStates;
SaleProducts? _selectedSaleProducts; String? _selectedDispatchStateID;
String? _selectedDispatchStateName;
List<String?> _selectedSaleProductID = [];
String? _selectedSaleProductName; Districts? _selectedDispatchDistricts;
String? _selectedDispatchDistrictID;
String? _selectedUnloadingScope; String? _selectedDispatchDistrictValue;
String? _selectedFreightScope;
String? _selectedErectionScope; SubLocations? _selectedDispatchSubLocations;
String? _selectedTpcStatus; String? _selectedDispatchSubLocID;
TpcList? _selectedTpcAgent; String? _selectedDispatchSubLocValue;
String? _selectedTpcAgentID;
String? _selectedTpcAgentValue; SaleProducts? _selectedSaleProducts;
List<String?> _selectedSaleProductID = [];
String? _selectedSaleProductName;
LatLng startLocation = const LatLng(17.439112226708446, 78.43292499146135); String? _selectedUnloadingScope;
LatLng? currentLocationLatLng; String? _selectedFreightScope;
String latlongs = ""; String? _selectedErectionScope;
Set<Marker> markers = {}; String? _selectedTpcStatus;
Location.LocationData? currentLocation; TpcList? _selectedTpcAgent;
bool isLocationEnabled = false; String? _selectedTpcAgentID;
bool hasLocationPermission = false; String? _selectedTpcAgentValue;
String? FileError; LatLng startLocation = const LatLng(17.439112226708446, 78.43292499146135);
String? dateError; LatLng? currentLocationLatLng;
bool _isLoading = false; String latlongs = "";
int _imagePicked = 0; Set<Marker> markers = {};
File? _image; Location.LocationData? currentLocation;
File? _imageName; bool isLocationEnabled = false;
final ImagePicker _picker = ImagePicker(); bool hasLocationPermission = false;
DateTime? _date;
String? _formattedDate; String? FileError;
Timer? _debounce; String? dateError;
List<Map<String, String>> _selectedOrders = []; bool _isLoading = false;
int _imagePicked = 0;
List<Map<String, String>> get selectedOrders => _selectedOrders; File? _image;
File? _imageName;
bool _submitClicked = false; final ImagePicker _picker = ImagePicker();
DateTime? _date;
bool get submitClicked => _submitClicked; String? _formattedDate;
Timer? _debounce;
set submitClicked(bool value){ List<Map<String, String>> _selectedOrders = [];
_submitClicked = value;
notifyListeners(); List<Map<String, String>> get selectedOrders => _selectedOrders;
}
bool _submitClicked = false;
set selectedOrders(value) {
_selectedOrders = selectedOrders; bool get submitClicked => _submitClicked;
notifyListeners();
} set submitClicked(bool value) {
_submitClicked = value;
bool get isLoading => _isLoading; notifyListeners();
}
String? get formattedDate => _formattedDate; set selectedOrders(value) {
_selectedOrders = selectedOrders;
notifyListeners();
}
DateTime? get dateNow => _date; bool get isLoading => _isLoading;
File? get imagePath => _imageName; String? get formattedDate => _formattedDate;
File? get imageFilePath => _image; DateTime? get dateNow => _date;
int get imagePicked => _imagePicked; File? get imagePath => _imageName;
List<AccountList> get accountList => _accountList; File? get imageFilePath => _image;
List<Employees> get employees => _employees; int get imagePicked => _imagePicked;
List<SaleProducts> get saleProducts => _saleProducts; List<AccountList> get accountList => _accountList;
List<String> get unloadingScope => _unloadingScope; List<Employees> get employees => _employees;
List<String> get freightScope => _freightScope; List<SaleProducts> get saleProducts => _saleProducts;
List<String> get erectionScope => _erectionScope; List<String> get unloadingScope => _unloadingScope;
List<String> get tpcApplicable => _tpcApplicable; List<String> get freightScope => _freightScope;
List<TpcList> get tpcAgent => _tpcAgent; List<String> get erectionScope => _erectionScope;
AccountList? get selectedAccountList => _selectedAccountList; List<String> get tpcApplicable => _tpcApplicable;
String? get selectedAccountID => _selectedAccountID; List<TpcList> get tpcAgent => _tpcAgent;
String? get selectedAccountName => _selectedAccountName; AccountList? get selectedAccountList => _selectedAccountList;
Employees? get selectedEmployees => _selectedEmployees; String? get selectedAccountID => _selectedAccountID;
String? get selectedEmployeeID => _selectedEmployeeID; String? get selectedAccountName => _selectedAccountName;
String? get selectedEmployeeName => _selectedEmployeeName; Employees? get selectedEmployees => _selectedEmployees;
List<States> get billingStates => _billingStates; String? get selectedEmployeeID => _selectedEmployeeID;
States? get selecetdBillingStates => _selectedBillingStates; String? get selectedEmployeeName => _selectedEmployeeName;
String? get selectedBillingStateID => _selectedBillingStateID; List<States> get billingStates => _billingStates;
String? get selectedBillingStateName => _selectedBillingStateName; States? get selecetdBillingStates => _selectedBillingStates;
List<Districts> get billingDistricts => _billingDistricts; String? get selectedBillingStateID => _selectedBillingStateID;
List<SubLocations> get billingSubLocations => _billingSubLocations; String? get selectedBillingStateName => _selectedBillingStateName;
Districts? get selectedBillingDistricts => _selectedBillingDistricts; List<Districts> get billingDistricts => _billingDistricts;
String? get selectedBillingDistrictId => _selectedBillingDistrictID; List<SubLocations> get billingSubLocations => _billingSubLocations;
String? get selectedBillingDistrictValue => _selectedBillingDistrictValue; Districts? get selectedBillingDistricts => _selectedBillingDistricts;
SubLocations? get selectedBillingSubLocations => _selectedBillingSubLocations; String? get selectedBillingDistrictId => _selectedBillingDistrictID;
String? get selectedBillingSubLocID => _selectedBillingSubLocID; String? get selectedBillingDistrictValue => _selectedBillingDistrictValue;
String? get selectedBillingSubLocValue => _selectedBillingSubLocValue; SubLocations? get selectedBillingSubLocations => _selectedBillingSubLocations;
List<States> get dispatchStates => _dispatchStates; String? get selectedBillingSubLocID => _selectedBillingSubLocID;
States? get selecetdDispatchStates => _selectedDispatchStates; String? get selectedBillingSubLocValue => _selectedBillingSubLocValue;
String? get selectedDispatchStateID => _selectedDispatchStateID; List<States> get dispatchStates => _dispatchStates;
String? get selectedDispatchStateName => _selectedDispatchStateName; States? get selecetdDispatchStates => _selectedDispatchStates;
List<Districts> get dispatchDistricts => _dispatchDistricts; String? get selectedDispatchStateID => _selectedDispatchStateID;
List<SubLocations> get dispatchSubLocations => _dispatchSubLocations; String? get selectedDispatchStateName => _selectedDispatchStateName;
Districts? get selectedDispatchDistricts => _selectedDispatchDistricts; List<Districts> get dispatchDistricts => _dispatchDistricts;
String? get selectedDispatchDistrictId => _selectedDispatchDistrictID; List<SubLocations> get dispatchSubLocations => _dispatchSubLocations;
String? get selectedDispatchDistrictValue => _selectedDispatchDistrictValue; Districts? get selectedDispatchDistricts => _selectedDispatchDistricts;
SubLocations? get selectedDispatchSubLocations => String? get selectedDispatchDistrictId => _selectedDispatchDistrictID;
_selectedDispatchSubLocations;
String? get selectedDispatchSubLocID => _selectedDispatchSubLocID; String? get selectedDispatchDistrictValue => _selectedDispatchDistrictValue;
String? get selectedDispatchSubLocValue => _selectedDispatchSubLocValue; SubLocations? get selectedDispatchSubLocations =>
_selectedDispatchSubLocations;
SaleProducts? get selectedSaleProducts => _selectedSaleProducts; String? get selectedDispatchSubLocID => _selectedDispatchSubLocID;
List<String?> get selectedSaleProductID => _selectedSaleProductID; String? get selectedDispatchSubLocValue => _selectedDispatchSubLocValue;
String? get selectedSaleProductName => _selectedSaleProductName; SaleProducts? get selectedSaleProducts => _selectedSaleProducts;
String? get selectedUnloadingScope => _selectedUnloadingScope; List<String?> get selectedSaleProductID => _selectedSaleProductID;
String? get selectedFreightScope => _selectedFreightScope; String? get selectedSaleProductName => _selectedSaleProductName;
String? get selectedErectionScope => _selectedErectionScope; String? get selectedUnloadingScope => _selectedUnloadingScope;
String? get selectedTpcStatus => _selectedTpcStatus; String? get selectedFreightScope => _selectedFreightScope;
TpcList? get selectedTpcAgent => _selectedTpcAgent; String? get selectedErectionScope => _selectedErectionScope;
String? get selectedTpcAgentID => _selectedTpcAgentID; String? get selectedTpcStatus => _selectedTpcStatus;
String? get selectedTpcAgentValue => _selectedTpcAgentValue; TpcList? get selectedTpcAgent => _selectedTpcAgent;
AccountDetails get accountDetails => _accountDetails; String? get selectedTpcAgentID => _selectedTpcAgentID;
set accountList(List<AccountList> value) { String? get selectedTpcAgentValue => _selectedTpcAgentValue;
_accountList = value;
notifyListeners();
}
set selectedAccountList(AccountList? value) { AccountDetails get accountDetails => _accountDetails;
_selectedAccountList = value;
_selectedAccountID = value!.id;
_selectedAccountName = value!.text!;
notifyListeners();
}
set selectedAccountID(String? value) { set accountList(List<AccountList> value) {
_selectedAccountID = value; _accountList = value;
notifyListeners(); notifyListeners();
} }
set selectedAccountName(String? value) { set selectedAccountList(AccountList? value) {
_selectedAccountName = value; _selectedAccountList = value;
notifyListeners(); _selectedAccountID = value!.id;
} _selectedAccountName = value!.text!;
notifyListeners();
}
set selectedEmployees(Employees? value) { set selectedAccountID(String? value) {
_selectedEmployees = value; _selectedAccountID = value;
_selectedEmployeeID = value!.id; notifyListeners();
_selectedEmployeeName = value!.name!; }
notifyListeners();
}
set selectedEmployeeID(String? value) { set selectedAccountName(String? value) {
_selectedEmployeeID = value; _selectedAccountName = value;
notifyListeners(); notifyListeners();
} }
set selectedEmployeeName(String? value) { set selectedEmployees(Employees? value) {
_selectedEmployeeName = value; _selectedEmployees = value;
notifyListeners(); _selectedEmployeeID = value!.id;
} _selectedEmployeeName = value!.name!;
notifyListeners();
}
set selecetdBillingStates(States? value) { set selectedEmployeeID(String? value) {
_selectedBillingStates = value; _selectedEmployeeID = value;
_selectedBillingStateID = value!.id; notifyListeners();
_selectedBillingStateName = value!.name!; }
notifyListeners();
}
set selectedBillingStateID(String? value) { set selectedEmployeeName(String? value) {
_selectedBillingStateID = value; _selectedEmployeeName = value;
notifyListeners(); notifyListeners();
} }
set selectedBillingStateName(String? value) { set selecetdBillingStates(States? value) {
_selectedBillingStateName = value; _selectedBillingStates = value;
notifyListeners(); _selectedBillingStateID = value!.id;
} _selectedBillingStateName = value!.name!;
selectedBillingStateError = "";
notifyListeners();
}
set selectedBillingDistricts(Districts? value) { set selectedBillingStateID(String? value) {
_selectedBillingDistricts = value; _selectedBillingStateID = value;
_selectedBillingDistrictID = value!.id; selectedBillingStateError = "";
_selectedBillingDistrictValue = value!.district; notifyListeners();
// districtError = null; }
notifyListeners();
}
set selectedBillingSubLocations(SubLocations? value) { set selectedBillingStateName(String? value) {
_selectedBillingSubLocations = value; _selectedBillingStateName = value;
_selectedBillingSubLocID = value!.id; selectedBillingStateError = "";
_selectedBillingSubLocValue = value!.subLocality!; notifyListeners();
// localityError = null; }
notifyListeners();
}
set selectedBillingDistrictId(value) { set selectedBillingDistricts(Districts? value) {
_selectedBillingDistrictID = value; _selectedBillingDistricts = value;
notifyListeners(); _selectedBillingDistrictID = value!.id;
} _selectedBillingDistrictValue = value!.district;
selectedBillingDistrictError = "";
// districtError = null;
notifyListeners();
}
set selectedBillingDistrictValue(value) { set selectedBillingSubLocations(SubLocations? value) {
_selectedBillingDistrictValue = value; _selectedBillingSubLocations = value;
notifyListeners(); _selectedBillingSubLocID = value!.id;
} _selectedBillingSubLocValue = value!.subLocality!;
selectedBillingSubLocError = "";
// localityError = null;
notifyListeners();
}
set selectedBillingSubLocID(value) { set selectedBillingDistrictId(value) {
_selectedBillingSubLocID = value; _selectedBillingDistrictID = value;
notifyListeners(); notifyListeners();
} }
set selectedBillingSubLocValue(value) { set selectedBillingDistrictValue(value) {
_selectedBillingSubLocValue = value; _selectedBillingDistrictValue = value;
notifyListeners(); notifyListeners();
} }
set selecetdDispatchStates(States? value) { set selectedBillingSubLocID(value) {
_selectedDispatchStates = value; _selectedBillingSubLocID = value;
_selectedDispatchStateID = value!.id; notifyListeners();
_selectedDispatchStateName = value!.name!; }
notifyListeners();
}
set selectedDispatchStateID(String? value) { set selectedBillingSubLocValue(value) {
_selectedDispatchStateID = value; _selectedBillingSubLocValue = value;
notifyListeners(); notifyListeners();
} }
set selectedDispatchStateName(String? value) { set selecetdDispatchStates(States? value) {
_selectedDispatchStateName = value; _selectedDispatchStates = value;
notifyListeners(); _selectedDispatchStateID = value!.id;
} _selectedDispatchStateName = value!.name!;
selectedDispatchStateError = "";
notifyListeners();
}
set selectedDispatchDistricts(Districts? value) { set selectedDispatchStateID(String? value) {
_selectedDispatchDistricts = value; _selectedDispatchStateID = value;
_selectedDispatchDistrictID = value!.id; notifyListeners();
_selectedDispatchDistrictValue = value!.district; }
// districtError = null;
notifyListeners();
}
set selectedDispatchSubLocations(SubLocations? value) { set selectedDispatchStateName(String? value) {
_selectedDispatchSubLocations = value; _selectedDispatchStateName = value;
_selectedDispatchSubLocID = value!.id; notifyListeners();
_selectedDispatchSubLocValue = value!.subLocality!; }
// localityError = null;
notifyListeners();
}
set selectedDispatchDistrictId(value) { set selectedDispatchDistricts(Districts? value) {
_selectedDispatchDistrictID = value; _selectedDispatchDistricts = value;
notifyListeners(); _selectedDispatchDistrictID = value!.id;
} _selectedDispatchDistrictValue = value!.district;
selectedDispatchDistrictError = "";
// districtError = null;
notifyListeners();
}
set selectedDispatchDistrictValue(value) { set selectedDispatchSubLocations(SubLocations? value) {
_selectedDispatchDistrictValue = value; _selectedDispatchSubLocations = value;
notifyListeners(); _selectedDispatchSubLocID = value!.id;
} _selectedDispatchSubLocValue = value!.subLocality!;
selectedDispatchSubLocError = "";
// localityError = null;
notifyListeners();
}
set selectedDispatchSubLocID(value) { set selectedDispatchDistrictId(value) {
_selectedDispatchSubLocID = value; _selectedDispatchDistrictID = value;
notifyListeners(); notifyListeners();
} }
set selectedDispatchSubLocValue(value) { set selectedDispatchDistrictValue(value) {
_selectedDispatchSubLocValue = value; _selectedDispatchDistrictValue = value;
notifyListeners(); notifyListeners();
} }
set selectedSaleProducts(SaleProducts? value) { set selectedDispatchSubLocID(value) {
_selectedSaleProducts = value; _selectedDispatchSubLocID = value;
// _selectedSaleProductID = value!.id!; notifyListeners();
// _selectedSaleProductName = value!.prodName; }
notifyListeners();
}
set selectedSaleProductID(List<String?> value) { set selectedDispatchSubLocValue(value) {
_selectedSaleProductID = value; _selectedDispatchSubLocValue = value;
notifyListeners(); notifyListeners();
} }
set selectedSaleProductName(String? value) { set selectedSaleProducts(SaleProducts? value) {
_selectedSaleProductName = value; _selectedSaleProducts = value;
notifyListeners(); // _selectedSaleProductID = value!.id!;
} // _selectedSaleProductName = value!.prodName;
notifyListeners();
}
set selectedUnloadingScope(String? value) { set selectedSaleProductID(List<String?> value) {
_selectedUnloadingScope = value; _selectedSaleProductID = value;
notifyListeners(); notifyListeners();
} }
set selectedFreightScope(String? value) { set selectedSaleProductName(String? value) {
_selectedFreightScope = value; _selectedSaleProductName = value;
notifyListeners(); notifyListeners();
} }
set selectedErectionScope(String? value) { set selectedUnloadingScope(String? value) {
_selectedErectionScope = value; _selectedUnloadingScope = value;
notifyListeners(); notifyListeners();
} }
set selectedTpcStatus(String? value) { set selectedFreightScope(String? value) {
_selectedTpcStatus = value; _selectedFreightScope = value;
notifyListeners(); notifyListeners();
} }
set selectedTpcAgent(TpcList? value) { set selectedErectionScope(String? value) {
_selectedTpcAgent = value; _selectedErectionScope = value;
_selectedTpcAgentID = value!.id; notifyListeners();
_selectedTpcAgentValue = value!.text; }
notifyListeners();
}
set selectedTpcAgentID(String? value) { set selectedTpcStatus(String? value) {
_selectedTpcAgentID = value; _selectedTpcStatus = value;
notifyListeners(); notifyListeners();
} }
set selectedTpcAgentValue(String? value) { set selectedTpcAgent(TpcList? value) {
_selectedTpcAgentValue = value; _selectedTpcAgent = value;
notifyListeners(); _selectedTpcAgentID = value!.id;
} _selectedTpcAgentValue = value!.text;
notifyListeners();
}
set accountDetails(AccountDetails value) { set selectedTpcAgentID(String? value) {
_accountDetails = value; _selectedTpcAgentID = value;
notifyListeners(); notifyListeners();
} }
set imagePath(File? value) { set selectedTpcAgentValue(String? value) {
_imageName = value; _selectedTpcAgentValue = value;
notifyListeners(); notifyListeners();
} }
set imageFilePath(File? value) { set accountDetails(AccountDetails value) {
_image = value; _accountDetails = value;
notifyListeners(); notifyListeners();
} }
set imagePicked(value) { set imagePath(File? value) {
_imagePicked = value; _imageName = value;
notifyListeners(); notifyListeners();
} }
set formattedDate(String? value) { set imageFilePath(File? value) {
_formattedDate = value; _image = value;
orderReceivedDateController.text = _formattedDate!; notifyListeners();
dateError = null; }
notifyListeners();
}
void setDate(DateTime newDate) { set imagePicked(value) {
_date = newDate; _imagePicked = value;
_formattedDate = DateFormat('yyyy-MM-dd').format(newDate); notifyListeners();
orderReceivedDateController.text = _formattedDate!; }
dateError = null;
notifyListeners();
}
dynamic get basicAmount { set formattedDate(String? value) {
double total = 0; _formattedDate = value;
for (var controller in TaxableValueControllers) { orderReceivedDateController.text = _formattedDate!;
total += double.tryParse(controller.text)?.round() ?? 0.0; dateError = null;
notifyListeners();
} }
basicAmountReadOnlyController.text = total.toStringAsFixed(2);
return total;
}
dynamic get cgstAmount { void setDate(DateTime newDate) {
double total = 0; _date = newDate;
for (int i = 0; i < ProductControllers.length; i++) { _formattedDate = DateFormat('yyyy-MM-dd').format(newDate);
final taxableValue = orderReceivedDateController.text = _formattedDate!;
double.tryParse(TaxableValueControllers[i].text) ?? 0.0; dateError = null;
final cgst = double.tryParse(CGSTControllers[i].text) ?? 0.0; notifyListeners();
total += (taxableValue * cgst) / 100;
} }
cgstReadOnlyController.text = total.toStringAsFixed(2);
return total;
}
dynamic get sgstAmount { dynamic get basicAmount {
double total = 0; double total = 0;
for (int i = 0; i < ProductControllers.length; i++) { for (var controller in TaxableValueControllers) {
final taxableValue = total += double.tryParse(controller.text)?.round() ?? 0.0;
double.tryParse(TaxableValueControllers[i].text) ?? 0.0; }
final sgst = double.tryParse(SGSTControllers[i].text) ?? 0.0; basicAmountReadOnlyController.text = total.toStringAsFixed(2);
total += (taxableValue * sgst).round() / 100; return total;
} }
sgstReadOnlyController.text = total.toStringAsFixed(2);
return total;
}
dynamic get igstAmount { dynamic get cgstAmount {
double total = 0; double total = 0;
for (int i = 0; i < ProductControllers.length; i++) { for (int i = 0; i < ProductControllers.length; i++) {
final taxableValue = final taxableValue =
double.tryParse(TaxableValueControllers[i].text) ?? 0.0; double.tryParse(TaxableValueControllers[i].text) ?? 0.0;
final igst = double.tryParse(IGSTControllers[i].text) ?? 0.0; final cgst = double.tryParse(CGSTControllers[i].text) ?? 0.0;
total += (taxableValue * igst).round() / 100; total += (taxableValue * cgst) / 100;
}
cgstReadOnlyController.text = total.toStringAsFixed(2);
return total;
} }
igstReadOnlyController.text = total.toStringAsFixed(2);
return total;
}
dynamic get totalAmount { dynamic get sgstAmount {
double total = basicAmount + cgstAmount + sgstAmount + igstAmount; double total = 0;
totalReadOnlyAmountController.text = total.round().toStringAsFixed(2); for (int i = 0; i < ProductControllers.length; i++) {
return total! ; final taxableValue =
} double.tryParse(TaxableValueControllers[i].text) ?? 0.0;
final sgst = double.tryParse(SGSTControllers[i].text) ?? 0.0;
total += (taxableValue * sgst).round() / 100;
}
sgstReadOnlyController.text = total.toStringAsFixed(2);
return total;
}
void addNewRow() { dynamic get igstAmount {
ProductControllers.add(TextEditingController()); double total = 0;
PriceControllers.add(TextEditingController()); for (int i = 0; i < ProductControllers.length; i++) {
QuantityControllers.add(TextEditingController(text: '1')); final taxableValue =
CGSTControllers.add(TextEditingController(text: '9')); double.tryParse(TaxableValueControllers[i].text) ?? 0.0;
SGSTControllers.add(TextEditingController(text: '9')); final igst = double.tryParse(IGSTControllers[i].text) ?? 0.0;
IGSTControllers.add(TextEditingController(text: '0')); total += (taxableValue * igst).round() / 100;
TaxableValueControllers.add(TextEditingController()); }
igstReadOnlyController.text = total.toStringAsFixed(2);
selectedSaleProductID.add(null); return total;
notifyListeners(); }
}
void removeRow(int index) { dynamic get totalAmount {
if (index >= 0 && index < ProductControllers.length) { double total = basicAmount + cgstAmount + sgstAmount + igstAmount;
ProductControllers[index].dispose(); totalReadOnlyAmountController.text = total.round().toStringAsFixed(2);
PriceControllers[index].dispose(); return total!;
QuantityControllers[index].dispose();
CGSTControllers[index].dispose();
SGSTControllers[index].dispose();
IGSTControllers[index].dispose();
TaxableValueControllers[index].dispose();
ProductControllers.removeAt(index);
PriceControllers.removeAt(index);
QuantityControllers.removeAt(index);
CGSTControllers.removeAt(index);
SGSTControllers.removeAt(index);
IGSTControllers.removeAt(index);
TaxableValueControllers.removeAt(index);
selectedSaleProductID.removeAt(index);
notifyListeners();
} }
}
void updateSelectedProduct(int index, SaleProducts? product) { void addNewRow() {
if (index >= 0 && index < _saleProducts.length) { ProductControllers.add(TextEditingController());
_selectedSaleProducts = product; PriceControllers.add(TextEditingController());
_selectedSaleProductID[index] = product!.id; QuantityControllers.add(TextEditingController(text: '1'));
PriceControllers[index].text = product!.price!; CGSTControllers.add(TextEditingController(text: '9'));
updateRowCalculations(index); SGSTControllers.add(TextEditingController(text: '9'));
IGSTControllers.add(TextEditingController(text: '0'));
TaxableValueControllers.add(TextEditingController());
TotalPriceControllers.add(TextEditingController());
selectedSaleProductID.add(null);
notifyListeners(); notifyListeners();
} }
}
void updateRowCalculations(int index) { void removeRow(int index) {
if (index >= 0 && index < PriceControllers.length) { if (index >= 0 && index < ProductControllers.length) {
final inclusivePrice = ProductControllers[index].dispose();
double.tryParse(PriceControllers[index].text) ?? 0.0; PriceControllers[index].dispose();
final quantity = double.tryParse(QuantityControllers[index].text) ?? 1.0; QuantityControllers[index].dispose();
final cgst = double.tryParse(CGSTControllers[index].text) ?? 0.0; CGSTControllers[index].dispose();
final sgst = double.tryParse(SGSTControllers[index].text) ?? 0.0; SGSTControllers[index].dispose();
final igst = double.tryParse(IGSTControllers[index].text) ?? 0.0; IGSTControllers[index].dispose();
final totalTaxRate = (cgst + sgst + igst) / 100; TaxableValueControllers[index].dispose();
// Calculate taxable value per unit TotalPriceControllers[index].dispose();
final taxableValuePerUnit = inclusivePrice / (1 + totalTaxRate); ProductControllers.removeAt(index);
// Total taxable value = taxable value per unit * quantity PriceControllers.removeAt(index);
final totalTaxableValue = taxableValuePerUnit * quantity; QuantityControllers.removeAt(index);
TaxableValueControllers[index].text = totalTaxableValue.toStringAsFixed( CGSTControllers.removeAt(index);
0, SGSTControllers.removeAt(index);
); IGSTControllers.removeAt(index);
notifyListeners(); TaxableValueControllers.removeAt(index);
TotalPriceControllers.removeAt(index);
selectedSaleProductID.removeAt(index);
notifyListeners();
}
} }
}
void updateSelectedProduct(int index, SaleProducts? product) {
if (index >= 0 && index < _saleProducts.length) {
_selectedSaleProducts = product;
_selectedSaleProductID[index] = product!.id;
PriceControllers[index].text = product!.price!;
updateRowCalculations(index);
notifyListeners();
}
}
void updateRowCalculations(int index) {
if (index >= 0 && index < PriceControllers.length) {
final inclusivePrice =
double.tryParse(PriceControllers[index].text) ?? 0.0;
final quantity = double.tryParse(QuantityControllers[index].text) ?? 1.0;
final cgst = double.tryParse(CGSTControllers[index].text) ?? 0.0;
final sgst = double.tryParse(SGSTControllers[index].text) ?? 0.0;
final igst = double.tryParse(IGSTControllers[index].text) ?? 0.0;
final totalTaxRate = (cgst + sgst + igst) / 100;
// Calculate taxable value per unit
final taxableValuePerUnit = inclusivePrice / (1 + totalTaxRate);
// Total taxable value = taxable value per unit * quantity
final totalTaxableValue = taxableValuePerUnit * quantity;
TaxableValueControllers[index].text = totalTaxableValue.toStringAsFixed(
0,
);
notifyListeners();
}
}
///[{"product_id":"1","qty":"1","price":"500","cgst_p":"9","sgst_p":"9","igst_p":"0","total_price":"500"},
///{"product_id":"2","qty":"1","price":"1000","cgst_p":"9","sgst_p":"9","igst_p":"0","total_price":"1000"}]
Map<String, dynamic> getFormData() { Map<String, dynamic> getFormData() {
final List<Map<String, dynamic>> orders = []; final List<Map<String, dynamic>> orders = [];
for (int i = 0; i < ProductControllers.length; i++) { for (int i = 0; i < ProductControllers.length; i++) {
orders.add({ orders.add({
'product_id': selectedSaleProductID[i], 'product_id': selectedSaleProductID[i],
'product_name': ProductControllers[i].text, 'qty': QuantityControllers[i].text,
'inclusive_price': PriceControllers[i].text, 'price': PriceControllers[i].text,
'quantity': QuantityControllers[i].text, 'cgst_p': CGSTControllers[i].text,
'cgst': CGSTControllers[i].text, 'sgst_p': SGSTControllers[i].text,
'sgst': SGSTControllers[i].text, 'igst_p': IGSTControllers[i].text,
'igst': IGSTControllers[i].text, 'total_price': TaxableValueControllers[i].text,
'taxable_value': TaxableValueControllers[i].text,
}); });
} }
return { return {
...@@ -807,14 +825,14 @@ void updateRowCalculations(int index) { ...@@ -807,14 +825,14 @@ void updateRowCalculations(int index) {
); );
if (data != null) { if (data != null) {
if (data.error == "0") { if (data.error == "0") {
_tpcApplicable = ["Yes","No"]; _tpcApplicable = ["Yes", "No"];
_erectionScope = data.erectionScope??[]; _erectionScope = data.erectionScope ?? [];
_unloadingScope = data.unloadingScope??[]; _unloadingScope = data.unloadingScope ?? [];
_freightScope = data.freightScope??[]; _freightScope = data.freightScope ?? [];
_employees = data.employees??[]; _employees = data.employees ?? [];
_billingStates = data.states??[]; _billingStates = data.states ?? [];
_dispatchStates = data.states??[]; _dispatchStates = data.states ?? [];
_saleProducts = data.saleProducts??[]; _saleProducts = data.saleProducts ?? [];
checkDropdownselected(); checkDropdownselected();
...@@ -839,7 +857,6 @@ void updateRowCalculations(int index) { ...@@ -839,7 +857,6 @@ void updateRowCalculations(int index) {
!_billingStates.contains(_selectedBillingStates)) { !_billingStates.contains(_selectedBillingStates)) {
_selectedBillingStateID = null; _selectedBillingStateID = null;
_selectedBillingStateName = ""; _selectedBillingStateName = "";
} }
if (_selectedBillingDistricts != null && if (_selectedBillingDistricts != null &&
!_billingDistricts.contains(_selectedBillingDistricts)) { !_billingDistricts.contains(_selectedBillingDistricts)) {
...@@ -884,8 +901,7 @@ void updateRowCalculations(int index) { ...@@ -884,8 +901,7 @@ void updateRowCalculations(int index) {
_selectedTpcStatus = null; _selectedTpcStatus = null;
} }
if (_selectedTpcAgent != null && if (_selectedTpcAgent != null && !_tpcAgent.contains(_selectedTpcAgent)) {
!_tpcAgent.contains(_selectedTpcAgent)) {
_selectedTpcAgentID = null; _selectedTpcAgentID = null;
_selectedTpcAgentValue = ""; _selectedTpcAgentValue = "";
} }
...@@ -941,6 +957,7 @@ void updateRowCalculations(int index) { ...@@ -941,6 +957,7 @@ void updateRowCalculations(int index) {
} }
} catch (e, s) {} } catch (e, s) {}
} }
Future<void> getDispatchDistrictAPI(context, stateID) async { Future<void> getDispatchDistrictAPI(context, stateID) async {
try { try {
var homeProv = Provider.of<HomescreenNotifier>(context, listen: false); var homeProv = Provider.of<HomescreenNotifier>(context, listen: false);
...@@ -980,6 +997,7 @@ void updateRowCalculations(int index) { ...@@ -980,6 +997,7 @@ void updateRowCalculations(int index) {
} }
} catch (e, s) {} } catch (e, s) {}
} }
Future<void> getDispatchSubLocationAPI(context, districtID) async { Future<void> getDispatchSubLocationAPI(context, districtID) async {
try { try {
var homeProv = Provider.of<HomescreenNotifier>(context, listen: false); var homeProv = Provider.of<HomescreenNotifier>(context, listen: false);
...@@ -1000,7 +1018,7 @@ void updateRowCalculations(int index) { ...@@ -1000,7 +1018,7 @@ void updateRowCalculations(int index) {
} catch (e, s) {} } catch (e, s) {}
} }
Future<void> ordersAddOrderTPCAgentFunction(context,mode, text) async { Future<void> ordersAddOrderTPCAgentFunction(context, mode, text) async {
try { try {
final provider = Provider.of<HomescreenNotifier>(context, listen: false); final provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.addOrderTPCAgentListAPI( final data = await ApiCalling.addOrderTPCAgentListAPI(
...@@ -1037,6 +1055,9 @@ void updateRowCalculations(int index) { ...@@ -1037,6 +1055,9 @@ void updateRowCalculations(int index) {
order_products, order_products,
) async { ) async {
try { try {
if (!validateAddOrder()) {
return;
}
_submitClicked = true; _submitClicked = true;
final provider = Provider.of<HomescreenNotifier>(context, listen: false); final provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.addOrderSubmitAPI( final data = await ApiCalling.addOrderSubmitAPI(
...@@ -1311,6 +1332,112 @@ void updateRowCalculations(int index) { ...@@ -1311,6 +1332,112 @@ void updateRowCalculations(int index) {
notifyListeners(); notifyListeners();
} }
bool validateAddOrder() {
bool isValid = true;
selectAccountError = "";
billingNameError = "";
orderDateError = "";
billingAddressError = "";
billingPincodeError = "";
dispatchAddressError = "";
dispatchPincodeError = "";
gstError = "";
tpcAmountError = "";
selectedBillingStateError = "";
selectedBillingDistrictError = "";
selectedBillingSubLocError = "";
selectedDispatchStateError = "";
selectedDispatchDistrictError = "";
selectedDispatchSubLocError = "";
if (_selectedAccountList == null || _selectedAccountID==null) {
selectAccountError = "Please select an Account";
isValid = false;
}
if (_selectedAccountList == null || _selectedAccountID==null) {
selectAccountError = "Please select an Account";
isValid = false;
}
if (_selectedBillingStates == null || _selectedBillingStateID==null) {
selectedBillingStateError = "Please select a State";
isValid = false;
}
if (_selectedBillingDistricts == null || _selectedBillingDistrictID==null) {
selectedBillingDistrictError = "Please select a District";
isValid = false;
}
if (_selectedBillingSubLocations == null || _selectedBillingSubLocID==null) {
selectedBillingSubLocError = "Please select a Location";
isValid = false;
}
if (_selectedDispatchStates == null || _selectedDispatchStateID==null) {
selectedDispatchStateError = "Please select a State";
isValid = false;
}
if (_selectedDispatchDistricts == null || _selectedDispatchDistrictID==null) {
selectedDispatchDistrictError = "Please select a District";
isValid = false;
}
if (_selectedDispatchSubLocations == null || _selectedDispatchSubLocID==null) {
selectedDispatchSubLocError = "Please select a Location";
isValid = false;
}
if (orderReceivedDateController.text.trim().isEmpty) {
orderDateError = "Please Enter Date";
isValid = false;
notifyListeners();
}
if (billingNameController.text.trim().isEmpty) {
isValid = false;
billingNameError = "Please Enter Your Name";
notifyListeners();
}
if (billingAddressController.text.trim().isEmpty) {
isValid = false;
billingAddressError = "Please Enter Address";
notifyListeners();
}
if (billingPincodeController.text.trim().isEmpty) {
isValid = false;
billingPincodeError = "Please Enter Pin Code";
notifyListeners();
}
if (dispatchAddressController.text.trim().isEmpty) {
dispatchAddressError = "Please Enter Dispatch Address";
isValid = false;
notifyListeners();
}
if (dispatchPincodeController.text.trim().isEmpty) {
dispatchPincodeError = "Please Enter Dispatch Pin Code";
isValid = false;
notifyListeners();
}
if (gstController.text.trim().isEmpty) {
gstError = "Please Enter GST Number";
isValid = false;
notifyListeners();
}
if (_selectedTpcStatus == "Yes") {
if (tpcAmountController.text.trim().isEmpty) {
isValid = false;
tpcAmountError = "Please Enter Amount";
notifyListeners();
}
}
notifyListeners();
return isValid;
}
void resetForm() { void resetForm() {
_submitClicked = false; _submitClicked = false;
dropDownSearchController.clear(); dropDownSearchController.clear();
...@@ -1331,7 +1458,6 @@ void updateRowCalculations(int index) { ...@@ -1331,7 +1458,6 @@ void updateRowCalculations(int index) {
gstController.clear(); gstController.clear();
orderReceivedDateController.clear(); orderReceivedDateController.clear();
tpcAmountController.clear(); tpcAmountController.clear();
gstController.clear();
orderReceivedDateController.clear(); orderReceivedDateController.clear();
noteController.clear(); noteController.clear();
...@@ -1367,7 +1493,12 @@ void updateRowCalculations(int index) { ...@@ -1367,7 +1493,12 @@ void updateRowCalculations(int index) {
billingPincodeError = ""; billingPincodeError = "";
dispatchAddressError = ""; dispatchAddressError = "";
dispatchPincodeError = ""; dispatchPincodeError = "";
selectedBillingStateError = "";
selectedBillingDistrictError = "";
selectedBillingSubLocError = "";
selectedDispatchStateError = "";
selectedDispatchDistrictError = "";
selectedDispatchSubLocError = "";
_selectedAccountList = null; _selectedAccountList = null;
_selectedEmployees = null; _selectedEmployees = null;
_selectedBillingStates = null; _selectedBillingStates = null;
......
...@@ -6,6 +6,7 @@ import 'package:dropdown_button2/dropdown_button2.dart'; ...@@ -6,6 +6,7 @@ import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:generp/Notifiers/HomeScreenNotifier.dart'; import 'package:generp/Notifiers/HomeScreenNotifier.dart';
import 'package:generp/Utils/commonServices.dart';
import 'package:generp/services/api_calling.dart'; import 'package:generp/services/api_calling.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
...@@ -15,6 +16,8 @@ import '../../Models/ordersModels/AddOrderPaymentSelectAccountResponse.dart'; ...@@ -15,6 +16,8 @@ import '../../Models/ordersModels/AddOrderPaymentSelectAccountResponse.dart';
import '../../Models/ordersModels/AddOrderPaymentSelectOrderResponse.dart'; import '../../Models/ordersModels/AddOrderPaymentSelectOrderResponse.dart';
class Addpaymentprovider extends ChangeNotifier{ class Addpaymentprovider extends ChangeNotifier{
bool _submitClicked = false;
TextEditingController dropDownSearchController = TextEditingController(); TextEditingController dropDownSearchController = TextEditingController();
TextEditingController amountController = TextEditingController(); TextEditingController amountController = TextEditingController();
...@@ -65,7 +68,7 @@ class Addpaymentprovider extends ChangeNotifier{ ...@@ -65,7 +68,7 @@ class Addpaymentprovider extends ChangeNotifier{
bool get submitClicked =>_submitClicked;
List<String> get paymentMode => _paymentMode; List<String> get paymentMode => _paymentMode;
List<String> get description => _description; List<String> get description => _description;
bool get isLoading => _isLoading; bool get isLoading => _isLoading;
...@@ -90,6 +93,11 @@ class Addpaymentprovider extends ChangeNotifier{ ...@@ -90,6 +93,11 @@ class Addpaymentprovider extends ChangeNotifier{
File? get imageFilePath => _image; File? get imageFilePath => _image;
int get imagePicked => _imagePicked; int get imagePicked => _imagePicked;
set submitClicked(bool value){
_submitClicked = value;
notifyListeners();
}
set accountList(List<AccountList> value){ set accountList(List<AccountList> value){
_accountList = value; _accountList = value;
notifyListeners(); notifyListeners();
...@@ -130,7 +138,7 @@ class Addpaymentprovider extends ChangeNotifier{ ...@@ -130,7 +138,7 @@ class Addpaymentprovider extends ChangeNotifier{
} }
void updateSelectedOrderId(int index, OrderList? value) { void updateSelectedOrderId(int index, OrderList? value) {
_selectedOrderLists = value!; _selectedOrderLists = value!;
_updateAdjustedAmount();
_selectedOrderIds[index] = value!.orderId; _selectedOrderIds[index] = value!.orderId;
print(_selectedOrderIds[index]); print(_selectedOrderIds[index]);
notifyListeners(); notifyListeners();
...@@ -212,11 +220,18 @@ class Addpaymentprovider extends ChangeNotifier{ ...@@ -212,11 +220,18 @@ class Addpaymentprovider extends ChangeNotifier{
tempAdjustAmount += int.tryParse(text) ?? 0; tempAdjustAmount += int.tryParse(text) ?? 0;
} }
} }
int amountControllerAmount = int.parse(amountController.text.toString());
if(tempAdjustAmount>amountControllerAmount){
orderAdjustedAmountError = "Amount Should not be greater than Total Amount";
}else{
orderAdjustedAmountError = "";
}
orderAdjustedAmountController.text = tempAdjustAmount.toString(); orderAdjustedAmountController.text = tempAdjustAmount.toString();
notifyListeners(); notifyListeners();
} }
void updateAdjustedAmount() => _updateAdjustedAmount();
List<Map<String, String>> getFormData() { List<Map<String, String>> getFormData() {
_selectedOrders = []; _selectedOrders = [];
...@@ -225,18 +240,17 @@ class Addpaymentprovider extends ChangeNotifier{ ...@@ -225,18 +240,17 @@ class Addpaymentprovider extends ChangeNotifier{
for (int i = 0; i < orderAmountControllers.length; i++) { for (int i = 0; i < orderAmountControllers.length; i++) {
if (_selectedOrderIds[i] != null && if (_selectedOrderIds[i] != null &&
orderAmountControllers[i].text.isNotEmpty) { orderAmountControllers[i].text.isNotEmpty) {
latestEntries[_selectedOrderIds[i]!] = orderAmountControllers[i].text; // latestEntries[_selectedOrderIds[i]!] = orderAmountControllers[i].text;
_selectedOrders.add({
"order_id": _selectedOrderIds[i]!,
"amount": orderAmountControllers[i].text,
});
tempAdjustAmount = tempAdjustAmount+int.parse(double.parse(orderAmountControllers[i].text).round().toString()); tempAdjustAmount = tempAdjustAmount+int.parse(double.parse(orderAmountControllers[i].text).round().toString());
} }
} }
_selectedOrders = latestEntries.entries
.map((entry) => {
"order_id": entry.key,
"amount": entry.value,
})
.toList();
print("Form Data: $_selectedOrders"); print("Form Data: $_selectedOrders");
orderAdjustedAmountController.text = tempAdjustAmount.toString(); orderAdjustedAmountController.text = tempAdjustAmount.toString();
...@@ -369,6 +383,12 @@ class Addpaymentprovider extends ChangeNotifier{ ...@@ -369,6 +383,12 @@ class Addpaymentprovider extends ChangeNotifier{
accountId,selDescription, selectedOrders, accountId,selDescription, selectedOrders,
paymentMode,) async { paymentMode,) async {
try{ try{
if (!validateAddPayment()) {
return;
}
_submitClicked = true;
notifyListeners();
final provider = Provider.of<HomescreenNotifier>(context,listen: false); final provider = Provider.of<HomescreenNotifier>(context,listen: false);
final data = await ApiCalling.addOrderpaymentListSubmitAPI(provider.empId, provider.session, final data = await ApiCalling.addOrderpaymentListSubmitAPI(provider.empId, provider.session,
accountId, selDescription, accountId, selDescription,
...@@ -377,20 +397,26 @@ class Addpaymentprovider extends ChangeNotifier{ ...@@ -377,20 +397,26 @@ class Addpaymentprovider extends ChangeNotifier{
paymentMode, paymentRefController.text, _image); paymentMode, paymentRefController.text, _image);
if(data!=null){ if(data!=null){
if(data.error=="0"){ if(data.error=="0"){
_submitClicked = false;
resetForm(); resetForm();
Navigator.pop(context); Navigator.pop(context);
toast(context, data.message);
notifyListeners();
}else{ }else{
_submitClicked = false;
notifyListeners();
toast(context, data.message);
} }
}else{ }else{
submitClicked = false;
notifyListeners();
} }
}catch(e,s){ }catch(e,s){
submitClicked = false;
notifyListeners();
} }
} }
...@@ -437,11 +463,13 @@ class Addpaymentprovider extends ChangeNotifier{ ...@@ -437,11 +463,13 @@ class Addpaymentprovider extends ChangeNotifier{
} }
void onChangeAmount(value){ void onChangeAmount(value){
_updateAdjustedAmount();
amountError = ""; amountError = "";
notifyListeners(); notifyListeners();
} }
void onChangeorderAdjustedAmount(value){ void onChangeorderAdjustedAmount(value){
orderAdjustedAmountError = "";
_updateAdjustedAmount();
notifyListeners(); notifyListeners();
} }
void onChangeDescription(value){ void onChangeDescription(value){
...@@ -453,6 +481,51 @@ class Addpaymentprovider extends ChangeNotifier{ ...@@ -453,6 +481,51 @@ class Addpaymentprovider extends ChangeNotifier{
paymentRefError = ""; paymentRefError = "";
notifyListeners(); notifyListeners();
} }
bool validateAddPayment(){
bool isValid = true;
selectAccountError = "";
amountError = "";
orderAdjustedAmountError = "";
descriptionError = "";
paymentModeError = "";
paymentRefError = "";
if (_selectedAccountList == null || _selectedAccountID==null) {
selectAccountError = "Please select an Account";
isValid = false;
}
if(amountController.text.trim().isEmpty){
isValid = false;
amountError = "Please Enter the Amount";
notifyListeners();
}
if(orderAdjustedAmountController.text.trim().isEmpty){
isValid = false;
orderAdjustedAmountError = "Please Enter the Amount";
notifyListeners();
}
if(descriptionController.text.trim().isEmpty){
isValid = false;
descriptionError = "Please Enter the Description";
notifyListeners();
}
if(paymentReceivedDateController.text.trim().isEmpty){
isValid = false;
paymentModeError = "Please Enter the Amount";
notifyListeners();
}
if (_paymentMode == null || _selectedPaymentMode==null) {
paymentModeError = "Please select an Account";
isValid = false;
}
if(paymentRefController.text.trim().isEmpty){
isValid = false;
paymentRefError = "Please Enter the Payment reference";
notifyListeners();
}
notifyListeners();
return isValid;
}
void resetForm() { void resetForm() {
......
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:provider/provider.dart';
import '../../Utils/commonServices.dart';
import '../../services/api_calling.dart';
import '../HomeScreenNotifier.dart';
import 'package:generp/Models/ordersModels/ordersDetailsDispatchOrderViewResponse.dart';
class Dispatchorderprovider extends ChangeNotifier{
bool _submitClicked = false;
TextEditingController invoiceNumberController = TextEditingController();
TextEditingController vehicleNumberController = TextEditingController();
TextEditingController driverNameController = TextEditingController();
TextEditingController driverMobileNumberController = TextEditingController();
String? invoiceNumberError;
String? vehicleNumberError;
String? driverNameError;
String? driverMobileNumberError;
List<Products> _leadProductsList = [];
Products? _selectedProducts;
List<TextEditingController> engineNumberControllers = [];
List<TextEditingController> pdiIDControllers = [];
List<String?> _selectedProductIds = [];
List<String?> _selectedProductValues = [];
List<Products> get productsList => _leadProductsList;
List<Products> get leadProductsList => _leadProductsList;
Products? get selectedProducts => _selectedProducts;
List<String?> get selectedProductIds => _selectedProductIds;
List<String?> get selectedProductValues => _selectedProductValues;
bool get submitClicked => _submitClicked;
set submitClicked(bool value){
_submitClicked = value;
notifyListeners();
}
void initializeForm(BuildContext context) {
// Clear existing controllers
engineNumberControllers.clear();
pdiIDControllers.clear();
_selectedProductIds.clear();
_selectedProductValues.clear();
// Initialize controllers for each lead product
for (var product in _leadProductsList) {
engineNumberControllers.add(TextEditingController());
pdiIDControllers.add(TextEditingController(text: product.pdiId?.toString() ?? ''));
_selectedProductIds.add(product.id);
_selectedProductValues.add(product.productName);
}
// Add one empty row if the list is empty
if (_leadProductsList.isEmpty) {
editAddNewRow();
}
notifyListeners();
}
void editAddNewRow() {
engineNumberControllers.add(TextEditingController());
pdiIDControllers.add(TextEditingController());
_selectedProductIds.add(null);
_selectedProductValues.add(null);
notifyListeners();
}
void editRemoveRow(int index) {
engineNumberControllers[index].dispose();
pdiIDControllers[index].dispose();
engineNumberControllers.removeAt(index);
pdiIDControllers.removeAt(index);
_selectedProductIds.removeAt(index);
_selectedProductValues.removeAt(index);
notifyListeners();
}
void updateSelectedProductIds(int index, Products value) {
_selectedProductIds[index] = value.id;
_selectedProductValues[index] = value.productName;
notifyListeners();
}
void updateTotalAmount(int index) {
final price = double.tryParse(engineNumberControllers[index].text) ?? 0;
final qty = int.tryParse(pdiIDControllers[index].text) ?? 0;
// editTotalAmountControllers[index].text = (price * qty).toString();
notifyListeners();
}
List<Map<String, String>> getFormData() {
final List<Map<String, String>> insertData = [];
for (int i = 0; i < engineNumberControllers.length; i++) {
if (_selectedProductIds[i] != null) {
final rowData = {
"product_id": _selectedProductIds[i]!,
"engine_number": engineNumberControllers[i].text,
"pdi_id": pdiIDControllers[i].text,
};
insertData.add(rowData);
}
}
return insertData;
}
Future<void> ordersDetailsDispatchOrderViewFunction(context, orderID) async {
try {
final provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersDetailsDispatchOrderViewAPI(
provider.empId,
provider.session,
orderID,
);
if (data != null) {
if (data.error == "0") {
_leadProductsList = data.products!;
notifyListeners();
} else {}
} else {}
} catch (e, s) {}
}
Future<void> approvalRejectionAPIFunction(
context,
status,
orderId,
type,
feedback,
tpc_applicable,
tpc_approved_amount,
sale_order_number,
edit_company_name,
crm_order_p_id,
) async {
try {
if (!validateApproveRejectForm()) {
// _submitClicked = false;
return;
}
_submitClicked = true;
notifyListeners();
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersDetailsApproveRejectAPI(
provider.empId,
provider.session,
status,
type,
orderId,
feedback,
tpc_applicable,
tpc_approved_amount,
sale_order_number,
edit_company_name,
invoiceNumberController.text,
vehicleNumberController.text,
driverNameController.text,
driverMobileNumberController.text,
crm_order_p_id,
);
if (data != null) {
if (data.error == "0") {
_submitClicked = false;
toast(context, "${data.message}");
resetForm();
Navigator.pop(context, true);
notifyListeners();
} else {
_submitClicked = false;
notifyListeners();
}
}else{
_submitClicked = false;
notifyListeners();
}
} catch (e, s) {
_submitClicked = false;
notifyListeners();
}
}
bool validateApproveRejectForm(){
bool isValid = true;
if(invoiceNumberController.text.trim().isEmpty){
invoiceNumberError = "Enter Invoice Number";
isValid = false;
}
if(vehicleNumberController.text.trim().isEmpty){
vehicleNumberError = "Enter Vehicle Number";
isValid = false;
}
if(driverNameController.text.trim().isEmpty){
driverNameError = "Enter Driver Name";
isValid = false;
}
if(driverMobileNumberController.text.trim().isEmpty){
driverMobileNumberError = "Enter Driver Number";
isValid = false;
}
notifyListeners();
return isValid;
}
resetForm(){
invoiceNumberController.clear();
vehicleNumberController.clear();
driverNameController.clear();
driverMobileNumberController.clear();
engineNumberControllers.clear();
pdiIDControllers.clear();
_selectedProductIds.clear();
_selectedProductValues.clear();
_leadProductsList.clear();
invoiceNumberError = null;
vehicleNumberError = null;
driverNameError = null;
driverMobileNumberError = null;
notifyListeners();
}
onChangedinvoiceNumber(value){
invoiceNumberError = null;
notifyListeners();
}
onChangedvehicleNumber(value){
vehicleNumberError = null;
notifyListeners();
}
onChangeddriverName(value){
driverNameError = null;
notifyListeners();
}
onChangeddriverMobileNumber(value){
driverMobileNumberError = null;
notifyListeners();
}
}
...@@ -14,6 +14,7 @@ import '../../services/api_calling.dart'; ...@@ -14,6 +14,7 @@ import '../../services/api_calling.dart';
import '../HomeScreenNotifier.dart'; import '../HomeScreenNotifier.dart';
class Pagesdashboardprovider extends ChangeNotifier { class Pagesdashboardprovider extends ChangeNotifier {
bool _submitClicked = false;
TextEditingController feedbackController = TextEditingController(); TextEditingController feedbackController = TextEditingController();
TextEditingController approveRejectFeedbackController = TextEditingController approveRejectFeedbackController =
TextEditingController(); TextEditingController();
...@@ -49,6 +50,12 @@ class Pagesdashboardprovider extends ChangeNotifier { ...@@ -49,6 +50,12 @@ class Pagesdashboardprovider extends ChangeNotifier {
File? _image; File? _image;
File? _imageName; File? _imageName;
bool get submitClicked => _submitClicked;
set submitClicked(bool value){
_submitClicked = value;
notifyListeners();
}
String get approvalSheetHeading => _approvalSheetHeading; String get approvalSheetHeading => _approvalSheetHeading;
String get rejecetionSheetHeading => _rejecetionSheetHeading; String get rejecetionSheetHeading => _rejecetionSheetHeading;
...@@ -459,6 +466,8 @@ class Pagesdashboardprovider extends ChangeNotifier { ...@@ -459,6 +466,8 @@ class Pagesdashboardprovider extends ChangeNotifier {
// _submitClicked = false; // _submitClicked = false;
return; return;
} }
_submitClicked = true;
notifyListeners();
var provider = Provider.of<HomescreenNotifier>(context, listen: false); var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersDetailsFeedbackSubmissionAPI( final data = await ApiCalling.ordersDetailsFeedbackSubmissionAPI(
provider.empId, provider.empId,
...@@ -470,14 +479,23 @@ class Pagesdashboardprovider extends ChangeNotifier { ...@@ -470,14 +479,23 @@ class Pagesdashboardprovider extends ChangeNotifier {
); );
if (data != null) { if (data != null) {
if (data.error == "0") { if (data.error == "0") {
_submitClicked = false;
toast(context, "Submitted Successfully"); toast(context, "Submitted Successfully");
resetForm(); resetForm();
Navigator.pop(context, true); Navigator.pop(context, true);
notifyListeners(); notifyListeners();
} else {} } else {
_submitClicked = false;
notifyListeners();
}
}else{
_submitClicked = false;
notifyListeners(); notifyListeners();
} }
} catch (e, s) {} } catch (e, s) {
_submitClicked = false;
notifyListeners();
}
} }
Future<void> approvalRejectionAPIFunction( Future<void> approvalRejectionAPIFunction(
...@@ -499,6 +517,8 @@ class Pagesdashboardprovider extends ChangeNotifier { ...@@ -499,6 +517,8 @@ class Pagesdashboardprovider extends ChangeNotifier {
// _submitClicked = false; // _submitClicked = false;
return; return;
} }
_submitClicked = true;
notifyListeners();
var provider = Provider.of<HomescreenNotifier>(context, listen: false); var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersDetailsApproveRejectAPI( final data = await ApiCalling.ordersDetailsApproveRejectAPI(
provider.empId, provider.empId,
...@@ -519,12 +539,12 @@ class Pagesdashboardprovider extends ChangeNotifier { ...@@ -519,12 +539,12 @@ class Pagesdashboardprovider extends ChangeNotifier {
); );
if (data != null) { if (data != null) {
if (data.error == "0") { if (data.error == "0") {
_submitClicked = false;
toast(context, "${data.message}"); toast(context, "${data.message}");
resetForm(); resetForm();
Navigator.pop(context, true); Navigator.pop(context, true);
notifyListeners(); notifyListeners();
} else {} } else {}
notifyListeners();
} }
} catch (e, s) {} } catch (e, s) {}
} }
...@@ -548,10 +568,18 @@ class Pagesdashboardprovider extends ChangeNotifier { ...@@ -548,10 +568,18 @@ class Pagesdashboardprovider extends ChangeNotifier {
resetForm(); resetForm();
Navigator.pop(context, true); Navigator.pop(context, true);
notifyListeners(); notifyListeners();
} else {} } else {
_submitClicked = false;
notifyListeners();
}
}else{
_submitClicked = false;
notifyListeners(); notifyListeners();
} }
} catch (e, s) {} } catch (e, s) {
_submitClicked = false;
notifyListeners();
}
} }
void onChangeFeedback(value) { void onChangeFeedback(value) {
......
...@@ -14,6 +14,7 @@ import '../../services/api_calling.dart'; ...@@ -14,6 +14,7 @@ import '../../services/api_calling.dart';
import '../HomeScreenNotifier.dart'; import '../HomeScreenNotifier.dart';
class Tpcagentsprovider extends ChangeNotifier{ class Tpcagentsprovider extends ChangeNotifier{
bool _submitClicked = false;
TextEditingController tpcNameController = TextEditingController(); TextEditingController tpcNameController = TextEditingController();
TextEditingController tpcMobileNumberController = TextEditingController(); TextEditingController tpcMobileNumberController = TextEditingController();
...@@ -34,6 +35,7 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -34,6 +35,7 @@ class Tpcagentsprovider extends ChangeNotifier{
String? tpcBankAccountNumberError = ""; String? tpcBankAccountNumberError = "";
String? tpcBankIFSCError = ""; String? tpcBankIFSCError = "";
String? tpcNoteError = ""; String? tpcNoteError = "";
String? imageError = "";
String? tpcPaymentModeError = ""; String? tpcPaymentModeError = "";
String? tpcPaymentReferenceNoError = ""; String? tpcPaymentReferenceNoError = "";
...@@ -53,6 +55,7 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -53,6 +55,7 @@ class Tpcagentsprovider extends ChangeNotifier{
File? _image; File? _image;
File? _imageName; File? _imageName;
bool get submitClicked => _submitClicked;
List<String> get Headings => _headings; List<String> get Headings => _headings;
List<String> get subHeadings => _subHeadings; List<String> get subHeadings => _subHeadings;
...@@ -69,6 +72,11 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -69,6 +72,11 @@ class Tpcagentsprovider extends ChangeNotifier{
get imagePicked => _image_picked; get imagePicked => _image_picked;
set submitClicked(bool value){
_submitClicked = value;
notifyListeners();
}
set imagePath(File? value) { set imagePath(File? value) {
_imageName = value; _imageName = value;
notifyListeners(); notifyListeners();
...@@ -188,6 +196,8 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -188,6 +196,8 @@ class Tpcagentsprovider extends ChangeNotifier{
// _submitClicked = false; // _submitClicked = false;
return; return;
} }
_submitClicked = true;
notifyListeners();
var provider = Provider.of<HomescreenNotifier>(context, listen: false); var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.TpcIssueListApprovalAPI( final data = await ApiCalling.TpcIssueListApprovalAPI(
provider.empId, provider.empId,
...@@ -201,13 +211,26 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -201,13 +211,26 @@ class Tpcagentsprovider extends ChangeNotifier{
if (data != null) { if (data != null) {
if (data.error == "0") { if (data.error == "0") {
_submitClicked = false;
toast(context, "Submitted Successfully"); toast(context, "Submitted Successfully");
resetAll();
resetApprovalForm(); resetApprovalForm();
Navigator.pop(context, true); Navigator.pop(context, true);
notifyListeners(); notifyListeners();
}else{
_submitClicked = false;
notifyListeners();
} }
}else{
_submitClicked = false;
notifyListeners();
} }
} catch (e, s) {} } catch (e, s) {
_submitClicked = false;
notifyListeners();
}
} }
Future<void> addTPCAgentAPIFunction(context) async { Future<void> addTPCAgentAPIFunction(context) async {
...@@ -216,6 +239,8 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -216,6 +239,8 @@ class Tpcagentsprovider extends ChangeNotifier{
// _submitClicked = false; // _submitClicked = false;
return; return;
} }
_submitClicked = true;
notifyListeners();
var provider = Provider.of<HomescreenNotifier>(context, listen: false); var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersAddTPCAgentAPI( final data = await ApiCalling.ordersAddTPCAgentAPI(
provider.empId, provider.empId,
...@@ -233,13 +258,24 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -233,13 +258,24 @@ class Tpcagentsprovider extends ChangeNotifier{
if (data != null) { if (data != null) {
if (data.error == "0") { if (data.error == "0") {
_submitClicked = false;
toast(context, "Submitted Successfully"); toast(context, "Submitted Successfully");
resetAll();
resetAddTPCAgentForm(); resetAddTPCAgentForm();
Navigator.pop(context, true); Navigator.pop(context, true);
notifyListeners(); notifyListeners();
}else{
_submitClicked = false;
notifyListeners();
} }
}else{
_submitClicked = false;
notifyListeners();
} }
} catch (e, s) {} } catch (e, s) {
_submitClicked = false;
notifyListeners();
}
} }
bool validateAddTPCAgentForm(BuildContext context) { bool validateAddTPCAgentForm(BuildContext context) {
...@@ -262,6 +298,11 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -262,6 +298,11 @@ class Tpcagentsprovider extends ChangeNotifier{
tpcMobileNumberError = "PLease Enter Your Mobile Number"; tpcMobileNumberError = "PLease Enter Your Mobile Number";
isValid = false; isValid = false;
} }
if(_image_picked==0){
imageError = "Please select ID Proof";
isValid = false;
}
if(tpcBankNameController.text.trim().isEmpty){ if(tpcBankNameController.text.trim().isEmpty){
tpcBankNameError = "Please Enter Bank Name"; tpcBankNameError = "Please Enter Bank Name";
isValid = false; isValid = false;
...@@ -278,7 +319,7 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -278,7 +319,7 @@ class Tpcagentsprovider extends ChangeNotifier{
tpcBankIFSCError = "Please Enter IFSC"; tpcBankIFSCError = "Please Enter IFSC";
isValid = false; isValid = false;
} }
_submitClicked = false;
notifyListeners(); notifyListeners();
return isValid; return isValid;
...@@ -305,6 +346,7 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -305,6 +346,7 @@ class Tpcagentsprovider extends ChangeNotifier{
orderTpcFeedbackError = "Please enter a description"; orderTpcFeedbackError = "Please enter a description";
isValid = false; isValid = false;
} }
_submitClicked = false;
notifyListeners(); notifyListeners();
return isValid; return isValid;
} }
...@@ -367,6 +409,9 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -367,6 +409,9 @@ class Tpcagentsprovider extends ChangeNotifier{
tpcBankAccountNumberController.clear(); tpcBankAccountNumberController.clear();
tpcBankIFSCController.clear(); tpcBankIFSCController.clear();
tpcNoteController.clear(); tpcNoteController.clear();
tpcPaymentModeController.clear();
tpcPaymentReferenceNoController.clear();
orderTpcFeedbackController.clear();
tpcNameError = ""; tpcNameError = "";
tpcMobileNumberError = ""; tpcMobileNumberError = "";
tpcBankNameError = ""; tpcBankNameError = "";
...@@ -376,7 +421,9 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -376,7 +421,9 @@ class Tpcagentsprovider extends ChangeNotifier{
tpcNoteError = ""; tpcNoteError = "";
_image = null; _image = null;
_imageName = null; _imageName = null;
imageError = null;
_image_picked = 0; _image_picked = 0;
notifyListeners();
} }
void resetApprovalForm() { void resetApprovalForm() {
...@@ -388,7 +435,9 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -388,7 +435,9 @@ class Tpcagentsprovider extends ChangeNotifier{
orderTpcFeedbackError = ""; orderTpcFeedbackError = "";
_image = null; _image = null;
_imageName = null; _imageName = null;
imageError = null;
_image_picked = 0; _image_picked = 0;
notifyListeners();
} }
void resetAll(){ void resetAll(){
...@@ -415,6 +464,8 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -415,6 +464,8 @@ class Tpcagentsprovider extends ChangeNotifier{
_image = null; _image = null;
_imageName = null; _imageName = null;
_image_picked = 0; _image_picked = 0;
imageError = null;
notifyListeners();
} }
imgFromCamera(context) async { imgFromCamera(context) async {
...@@ -429,6 +480,7 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -429,6 +480,7 @@ class Tpcagentsprovider extends ChangeNotifier{
_image = File(galleryImage!.path); _image = File(galleryImage!.path);
_imageName = File(galleryImage!.name); _imageName = File(galleryImage!.name);
_image_picked = 1; _image_picked = 1;
imageError = null;
notifyListeners(); notifyListeners();
} catch (e) { } catch (e) {
debugPrint("mmmm: ${e.toString()}"); debugPrint("mmmm: ${e.toString()}");
...@@ -450,6 +502,7 @@ class Tpcagentsprovider extends ChangeNotifier{ ...@@ -450,6 +502,7 @@ class Tpcagentsprovider extends ChangeNotifier{
_image = File(galleryImage!.path); _image = File(galleryImage!.path);
_imageName = File(galleryImage!.name); _imageName = File(galleryImage!.name);
_image_picked = 1; _image_picked = 1;
imageError = null;
notifyListeners(); notifyListeners();
// var file = FlutterImageCompress.compressWithFile(galleryImage!.path); // var file = FlutterImageCompress.compressWithFile(galleryImage!.path);
} catch (e) { } catch (e) {
......
...@@ -216,6 +216,7 @@ class MyApp extends StatelessWidget { ...@@ -216,6 +216,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => Crmeditprospectaccountprovider()), ChangeNotifierProvider(create: (_) => Crmeditprospectaccountprovider()),
ChangeNotifierProvider(create: (_) => Addprospectleadsprovider()), ChangeNotifierProvider(create: (_) => Addprospectleadsprovider()),
ChangeNotifierProvider(create: (_) => Editorderprovider()), ChangeNotifierProvider(create: (_) => Editorderprovider()),
ChangeNotifierProvider(create: (_) => Dispatchorderprovider()),
], ],
child: Builder( child: Builder(
builder: (BuildContext context) { builder: (BuildContext context) {
......
...@@ -54,7 +54,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> { ...@@ -54,7 +54,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
resizeToAvoidBottomInset: true, resizeToAvoidBottomInset: true,
appBar: appbar2( appBar: appbar2(
context, context,
widget.pageTitleName, "Lead Details (${widget.mode})",
provider.resetAll, provider.resetAll,
InkResponse( InkResponse(
onTap: () { onTap: () {
......
...@@ -40,6 +40,8 @@ export 'package:generp/Notifiers/ordersProvider/addPaymentProvider.dart'; ...@@ -40,6 +40,8 @@ export 'package:generp/Notifiers/ordersProvider/addPaymentProvider.dart';
export 'package:generp/Notifiers/ordersProvider/addOrderProvider.dart'; export 'package:generp/Notifiers/ordersProvider/addOrderProvider.dart';
export 'package:generp/Notifiers/ordersProvider/editPaymentProvider.dart'; export 'package:generp/Notifiers/ordersProvider/editPaymentProvider.dart';
export 'package:generp/Notifiers/ordersProvider/editOrderProvider.dart'; export 'package:generp/Notifiers/ordersProvider/editOrderProvider.dart';
export 'package:generp/Notifiers/ordersProvider/dispatchOrderProvider.dart';
export 'package:generp/Notifiers/crmProvider/crmDashboardProvider.dart'; export 'package:generp/Notifiers/crmProvider/crmDashboardProvider.dart';
export 'package:generp/Notifiers/crmProvider/LeadListProvider.dart'; export 'package:generp/Notifiers/crmProvider/LeadListProvider.dart';
......
...@@ -26,7 +26,8 @@ class _AddorderScreenState extends State<AddorderScreen> { ...@@ -26,7 +26,8 @@ class _AddorderScreenState extends State<AddorderScreen> {
FocusNode focusNode = FocusNode(); FocusNode focusNode = FocusNode();
FocusNode focusNodetpc = FocusNode(); FocusNode focusNodetpc = FocusNode();
List<FocusNode> focusNodes = List.generate(10, (index) => FocusNode()); List<FocusNode> focusNodes = List.generate(10, (index) => FocusNode());
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
...@@ -44,7 +45,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -44,7 +45,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
@override @override
void dispose() { void dispose() {
focusNodes.map((e)=>e.dispose()); focusNodes.map((e) => e.dispose());
focusNode.dispose(); focusNode.dispose();
focusNodetpc.dispose(); focusNodetpc.dispose();
super.dispose(); super.dispose();
...@@ -95,7 +96,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -95,7 +96,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
borderRadius: BorderRadius.circular(14), borderRadius: BorderRadius.circular(14),
), ),
child: ListTile( child: ListTile(
onTap: (){ onTap: () {
if (focusNode.hasFocus) { if (focusNode.hasFocus) {
focusNode.unfocus(); focusNode.unfocus();
} else { } else {
...@@ -162,7 +163,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -162,7 +163,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
margin: EdgeInsets.symmetric(horizontal: 0), margin: EdgeInsets.symmetric(horizontal: 0),
child: Container( child: Container(
padding: EdgeInsets.symmetric(horizontal: 10), padding: EdgeInsets.symmetric(horizontal: 10),
height: widget.mode=="self"?50:150, height: widget.mode == "self" ? 50 : 150,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16), borderRadius: BorderRadius.circular(16),
), ),
...@@ -317,7 +318,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -317,7 +318,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
], ],
), ),
), ),
errorWidget(context, provider.dateError), errorWidget(context, provider.orderDateError),
textControllerWidget( textControllerWidget(
context, context,
...@@ -329,7 +330,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -329,7 +330,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
null, null,
focusNodes[0], focusNodes[0],
null, null,
TextInputAction.done TextInputAction.done,
), ),
errorWidget(context, provider.billingNameError), errorWidget(context, provider.billingNameError),
TextWidget(context, "Billing State"), TextWidget(context, "Billing State"),
...@@ -381,40 +382,39 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -381,40 +382,39 @@ Dropdowntheme ddtheme = Dropdowntheme();
}, },
dropdownSearchData: DropdownSearchData( dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50, searchInnerWidgetHeight: 50,
searchController:provider.billingStateSearchController, searchController:
provider.billingStateSearchController,
searchInnerWidget: Padding( searchInnerWidget: Padding(
padding: const EdgeInsets.all(8), padding: const EdgeInsets.all(8),
child: TextFormField( child: TextFormField(
controller: controller:
provider.billingStateSearchController, provider.billingStateSearchController,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true, isDense: true,
contentPadding: contentPadding:
const EdgeInsets.symmetric( const EdgeInsets.symmetric(
horizontal: 10, horizontal: 10,
vertical: 8, vertical: 8,
), ),
hintText: 'Search Sate...', hintText: 'Search Sate...',
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: borderRadius: BorderRadius.circular(8),
BorderRadius.circular(8),
), ),
), ),
), ),
), ),
searchMatchFn: (item, searchValue) { searchMatchFn: (item, searchValue) {
return item.value?.name return item.value?.name
?.toLowerCase() ?.toLowerCase()
.contains( .contains(
searchValue.toLowerCase(), searchValue.toLowerCase(),
) ?? ) ??
false; false;
}, },
), ),
onMenuStateChange: (isOpen) { onMenuStateChange: (isOpen) {
if (!isOpen) { if (!isOpen) {
provider.billingStateSearchController provider.billingStateSearchController.clear();
.clear();
} }
}, },
buttonStyleData: ddtheme.buttonStyleData, buttonStyleData: ddtheme.buttonStyleData,
...@@ -426,6 +426,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -426,6 +426,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
], ],
), ),
), ),
errorWidget(context, provider.selectedBillingStateError),
TextWidget(context, "Billing District"), TextWidget(context, "Billing District"),
//dd //dd
DropdownButtonHideUnderline( DropdownButtonHideUnderline(
...@@ -474,33 +475,34 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -474,33 +475,34 @@ Dropdowntheme ddtheme = Dropdowntheme();
}, },
dropdownSearchData: DropdownSearchData( dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50, searchInnerWidgetHeight: 50,
searchController:provider.billingDistrictSearchController, searchController:
provider.billingDistrictSearchController,
searchInnerWidget: Padding( searchInnerWidget: Padding(
padding: const EdgeInsets.all(8), padding: const EdgeInsets.all(8),
child: TextFormField( child: TextFormField(
controller: controller:
provider.billingDistrictSearchController, provider
.billingDistrictSearchController,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true, isDense: true,
contentPadding: contentPadding:
const EdgeInsets.symmetric( const EdgeInsets.symmetric(
horizontal: 10, horizontal: 10,
vertical: 8, vertical: 8,
), ),
hintText: 'Search District...', hintText: 'Search District...',
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: borderRadius: BorderRadius.circular(8),
BorderRadius.circular(8),
), ),
), ),
), ),
), ),
searchMatchFn: (item, searchValue) { searchMatchFn: (item, searchValue) {
return item.value?.district return item.value?.district
?.toLowerCase() ?.toLowerCase()
.contains( .contains(
searchValue.toLowerCase(), searchValue.toLowerCase(),
) ?? ) ??
false; false;
}, },
), ),
...@@ -519,6 +521,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -519,6 +521,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
], ],
), ),
), ),
errorWidget(context, provider.selectedBillingDistrictError),
TextWidget(context, "Billing Sub Location"), TextWidget(context, "Billing Sub Location"),
//dd //dd
DropdownButtonHideUnderline( DropdownButtonHideUnderline(
...@@ -555,33 +558,33 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -555,33 +558,33 @@ Dropdowntheme ddtheme = Dropdowntheme();
}, },
dropdownSearchData: DropdownSearchData( dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50, searchInnerWidgetHeight: 50,
searchController:provider.billingSubLocSearchController, searchController:
provider.billingSubLocSearchController,
searchInnerWidget: Padding( searchInnerWidget: Padding(
padding: const EdgeInsets.all(8), padding: const EdgeInsets.all(8),
child: TextFormField( child: TextFormField(
controller: controller:
provider.billingSubLocSearchController, provider.billingSubLocSearchController,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true, isDense: true,
contentPadding: contentPadding:
const EdgeInsets.symmetric( const EdgeInsets.symmetric(
horizontal: 10, horizontal: 10,
vertical: 8, vertical: 8,
), ),
hintText: 'Search Sub Location...', hintText: 'Search Sub Location...',
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: borderRadius: BorderRadius.circular(8),
BorderRadius.circular(8),
), ),
), ),
), ),
), ),
searchMatchFn: (item, searchValue) { searchMatchFn: (item, searchValue) {
return item.value?.subLocality return item.value?.subLocality
?.toLowerCase() ?.toLowerCase()
.contains( .contains(
searchValue.toLowerCase(), searchValue.toLowerCase(),
) ?? ) ??
false; false;
}, },
), ),
...@@ -600,6 +603,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -600,6 +603,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
], ],
), ),
), ),
errorWidget(context, provider.selectedBillingSubLocError),
textControllerWidget( textControllerWidget(
context, context,
provider.billingAddressController, provider.billingAddressController,
...@@ -608,9 +612,9 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -608,9 +612,9 @@ Dropdowntheme ddtheme = Dropdowntheme();
TextInputType.text, TextInputType.text,
false, false,
null, null,
focusNodes[1], focusNodes[1],
focusNodes[2], focusNodes[2],
TextInputAction.next TextInputAction.next,
), ),
errorWidget(context, provider.billingAddressError), errorWidget(context, provider.billingAddressError),
...@@ -622,10 +626,10 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -622,10 +626,10 @@ Dropdowntheme ddtheme = Dropdowntheme();
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
focusNodes[2], focusNodes[2],
null, null,
TextInputAction.done, TextInputAction.done,
6 6,
), ),
errorWidget(context, provider.billingPincodeError), errorWidget(context, provider.billingPincodeError),
...@@ -676,33 +680,33 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -676,33 +680,33 @@ Dropdowntheme ddtheme = Dropdowntheme();
}, },
dropdownSearchData: DropdownSearchData( dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50, searchInnerWidgetHeight: 50,
searchController:provider.dispatchStateSearchController, searchController:
provider.dispatchStateSearchController,
searchInnerWidget: Padding( searchInnerWidget: Padding(
padding: const EdgeInsets.all(8), padding: const EdgeInsets.all(8),
child: TextFormField( child: TextFormField(
controller: controller:
provider.dispatchStateSearchController, provider.dispatchStateSearchController,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true, isDense: true,
contentPadding: contentPadding:
const EdgeInsets.symmetric( const EdgeInsets.symmetric(
horizontal: 10, horizontal: 10,
vertical: 8, vertical: 8,
), ),
hintText: 'Search Sate...', hintText: 'Search Sate...',
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: borderRadius: BorderRadius.circular(8),
BorderRadius.circular(8),
), ),
), ),
), ),
), ),
searchMatchFn: (item, searchValue) { searchMatchFn: (item, searchValue) {
return item.value?.name return item.value?.name
?.toLowerCase() ?.toLowerCase()
.contains( .contains(
searchValue.toLowerCase(), searchValue.toLowerCase(),
) ?? ) ??
false; false;
}, },
), ),
...@@ -721,6 +725,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -721,6 +725,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
], ],
), ),
), ),
errorWidget(context, provider.selectedDispatchStateError),
//dd //dd
TextWidget(context, "Dispatch District"), TextWidget(context, "Dispatch District"),
//dd //dd
...@@ -773,33 +778,34 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -773,33 +778,34 @@ Dropdowntheme ddtheme = Dropdowntheme();
}, },
dropdownSearchData: DropdownSearchData( dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50, searchInnerWidgetHeight: 50,
searchController:provider.dispatchDistrictSearchController, searchController:
provider.dispatchDistrictSearchController,
searchInnerWidget: Padding( searchInnerWidget: Padding(
padding: const EdgeInsets.all(8), padding: const EdgeInsets.all(8),
child: TextFormField( child: TextFormField(
controller: controller:
provider.dispatchDistrictSearchController, provider
.dispatchDistrictSearchController,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true, isDense: true,
contentPadding: contentPadding:
const EdgeInsets.symmetric( const EdgeInsets.symmetric(
horizontal: 10, horizontal: 10,
vertical: 8, vertical: 8,
), ),
hintText: 'Search District...', hintText: 'Search District...',
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: borderRadius: BorderRadius.circular(8),
BorderRadius.circular(8),
), ),
), ),
), ),
), ),
searchMatchFn: (item, searchValue) { searchMatchFn: (item, searchValue) {
return item.value?.district return item.value?.district
?.toLowerCase() ?.toLowerCase()
.contains( .contains(
searchValue.toLowerCase(), searchValue.toLowerCase(),
) ?? ) ??
false; false;
}, },
), ),
...@@ -818,6 +824,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -818,6 +824,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
], ],
), ),
), ),
errorWidget(context, provider.selectedDispatchDistrictError),
TextWidget(context, "Dispatch Sub Location"), TextWidget(context, "Dispatch Sub Location"),
DropdownButtonHideUnderline( DropdownButtonHideUnderline(
child: Row( child: Row(
...@@ -854,33 +861,33 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -854,33 +861,33 @@ Dropdowntheme ddtheme = Dropdowntheme();
}, },
dropdownSearchData: DropdownSearchData( dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50, searchInnerWidgetHeight: 50,
searchController:provider.dispatchSubLocSearchController, searchController:
provider.dispatchSubLocSearchController,
searchInnerWidget: Padding( searchInnerWidget: Padding(
padding: const EdgeInsets.all(8), padding: const EdgeInsets.all(8),
child: TextFormField( child: TextFormField(
controller: controller:
provider.dispatchSubLocSearchController, provider.dispatchSubLocSearchController,
decoration: InputDecoration( decoration: InputDecoration(
isDense: true, isDense: true,
contentPadding: contentPadding:
const EdgeInsets.symmetric( const EdgeInsets.symmetric(
horizontal: 10, horizontal: 10,
vertical: 8, vertical: 8,
), ),
hintText: 'Search Sub Location...', hintText: 'Search Sub Location...',
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: borderRadius: BorderRadius.circular(8),
BorderRadius.circular(8),
), ),
), ),
), ),
), ),
searchMatchFn: (item, searchValue) { searchMatchFn: (item, searchValue) {
return item.value?.subLocality return item.value?.subLocality
?.toLowerCase() ?.toLowerCase()
.contains( .contains(
searchValue.toLowerCase(), searchValue.toLowerCase(),
) ?? ) ??
false; false;
}, },
), ),
...@@ -899,6 +906,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -899,6 +906,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
], ],
), ),
), ),
errorWidget(context, provider.selectedDispatchSubLocError),
//dd //dd
textControllerWidget( textControllerWidget(
context, context,
...@@ -908,9 +916,9 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -908,9 +916,9 @@ Dropdowntheme ddtheme = Dropdowntheme();
TextInputType.text, TextInputType.text,
false, false,
null, null,
focusNodes[3], focusNodes[3],
focusNodes[4], focusNodes[4],
TextInputAction.next TextInputAction.next,
), ),
errorWidget(context, provider.dispatchAddressError), errorWidget(context, provider.dispatchAddressError),
...@@ -922,10 +930,10 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -922,10 +930,10 @@ Dropdowntheme ddtheme = Dropdowntheme();
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
focusNodes[4], focusNodes[4],
focusNodes[5], focusNodes[5],
TextInputAction.next, TextInputAction.next,
6 6,
), ),
errorWidget(context, provider.dispatchPincodeError), errorWidget(context, provider.dispatchPincodeError),
...@@ -936,10 +944,10 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -936,10 +944,10 @@ Dropdowntheme ddtheme = Dropdowntheme();
provider.onChangedGst, provider.onChangedGst,
TextInputType.text, TextInputType.text,
false, false,
null, null,
focusNodes[5], focusNodes[5],
null, null,
TextInputAction.done TextInputAction.done,
), ),
errorWidget(context, provider.gstError), errorWidget(context, provider.gstError),
...@@ -1331,9 +1339,9 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -1331,9 +1339,9 @@ Dropdowntheme ddtheme = Dropdowntheme();
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
focusNodes[6], focusNodes[6],
focusNodes[7], focusNodes[7],
TextInputAction.next TextInputAction.next,
), ),
errorWidget(context, provider.tpcAmountError), errorWidget(context, provider.tpcAmountError),
], ],
...@@ -1355,6 +1363,10 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -1355,6 +1363,10 @@ Dropdowntheme ddtheme = Dropdowntheme();
provider.submitClicked = true; provider.submitClicked = true;
var order_prod_data = provider.getFormData(); var order_prod_data = provider.getFormData();
print(order_prod_data); print(order_prod_data);
print(order_prod_data['orders']);
///[{"product_id":"1","qty":"1","price":"500","cgst_p":"9","sgst_p":"9","igst_p":"0","total_price":"500"},
///{"product_id":"2","qty":"1","price":"1000","cgst_p":"9","sgst_p":"9","igst_p":"0","total_price":"1000"}]
provider.getCurrentLocation(); provider.getCurrentLocation();
provider.ordersAddOrderAPISubmitFunction( provider.ordersAddOrderAPISubmitFunction(
context, context,
...@@ -1372,7 +1384,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -1372,7 +1384,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
provider.selectedBillingDistrictId, provider.selectedBillingDistrictId,
provider.selectedBillingSubLocID, provider.selectedBillingSubLocID,
provider.selectedTpcAgentID, provider.selectedTpcAgentID,
order_prod_data, order_prod_data['orders'],
); );
}, },
child: Container( child: Container(
...@@ -1388,7 +1400,7 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -1388,7 +1400,7 @@ Dropdowntheme ddtheme = Dropdowntheme();
provider.submitClicked provider.submitClicked
? CircularProgressIndicator.adaptive( ? CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>( valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue, AppColors.white,
), ),
) )
: Text( : Text(
...@@ -1495,9 +1507,9 @@ Dropdowntheme ddtheme = Dropdowntheme(); ...@@ -1495,9 +1507,9 @@ Dropdowntheme ddtheme = Dropdowntheme();
} }
class OrderForm extends StatelessWidget { class OrderForm extends StatelessWidget {
OrderForm({super.key}); OrderForm({super.key});
FocusNode focusNode = FocusNode(); FocusNode focusNode = FocusNode();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
...@@ -1603,10 +1615,16 @@ class OrderForm extends StatelessWidget { ...@@ -1603,10 +1615,16 @@ class OrderForm extends StatelessWidget {
) )
.toList(), .toList(),
value: value:
provider.saleProducts.contains(provider.selectedSaleProducts)? provider.saleProducts.contains(
provider.saleProducts.firstWhere( provider.selectedSaleProducts,
(product) => product.id == provider.selectedSaleProductID[index], )
):null, ? provider.saleProducts.firstWhere(
(product) =>
product.id ==
provider
.selectedSaleProductID[index],
)
: null,
onChanged: (SaleProducts? value) { onChanged: (SaleProducts? value) {
if (value != null) { if (value != null) {
if (provider if (provider
...@@ -1624,10 +1642,13 @@ class OrderForm extends StatelessWidget { ...@@ -1624,10 +1642,13 @@ class OrderForm extends StatelessWidget {
} }
} }
}, },
buttonStyleData: ddtheme.buttonStyleData, buttonStyleData:
ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData, iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData, menuItemStyleData:
dropdownStyleData: ddtheme.dropdownStyleData, ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
), ),
), ),
), ),
...@@ -1647,10 +1668,9 @@ class OrderForm extends StatelessWidget { ...@@ -1647,10 +1668,9 @@ class OrderForm extends StatelessWidget {
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
null, null,
null, null,
TextInputAction.next TextInputAction.next,
), ),
), ),
const SizedBox(width: 8.0), const SizedBox(width: 8.0),
...@@ -1684,9 +1704,9 @@ class OrderForm extends StatelessWidget { ...@@ -1684,9 +1704,9 @@ class OrderForm extends StatelessWidget {
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
null, null,
null, null,
TextInputAction.next TextInputAction.next,
), ),
), ),
], ],
...@@ -1723,9 +1743,9 @@ class OrderForm extends StatelessWidget { ...@@ -1723,9 +1743,9 @@ class OrderForm extends StatelessWidget {
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
null, null,
null, null,
TextInputAction.next TextInputAction.next,
), ),
), ),
const SizedBox(width: 8.0), const SizedBox(width: 8.0),
...@@ -1758,9 +1778,9 @@ class OrderForm extends StatelessWidget { ...@@ -1758,9 +1778,9 @@ class OrderForm extends StatelessWidget {
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
null, null,
null, null,
TextInputAction.next TextInputAction.next,
), ),
), ),
const SizedBox(width: 8.0), const SizedBox(width: 8.0),
...@@ -1793,9 +1813,9 @@ class OrderForm extends StatelessWidget { ...@@ -1793,9 +1813,9 @@ class OrderForm extends StatelessWidget {
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
null, null,
null, null,
TextInputAction.next TextInputAction.next,
), ),
), ),
], ],
...@@ -1828,9 +1848,9 @@ class OrderForm extends StatelessWidget { ...@@ -1828,9 +1848,9 @@ class OrderForm extends StatelessWidget {
TextInputType.number, TextInputType.number,
true, true,
null, null,
null, null,
null, null,
TextInputAction.next TextInputAction.next,
), ),
), ),
// const SizedBox(width: 8.0), // const SizedBox(width: 8.0),
...@@ -1871,7 +1891,7 @@ class OrderForm extends StatelessWidget { ...@@ -1871,7 +1891,7 @@ class OrderForm extends StatelessWidget {
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
null, null,
null, null,
TextInputAction.none TextInputAction.none,
), ),
textControllerWidget( textControllerWidget(
context, context,
...@@ -1881,9 +1901,9 @@ class OrderForm extends StatelessWidget { ...@@ -1881,9 +1901,9 @@ class OrderForm extends StatelessWidget {
TextInputType.text, TextInputType.text,
true, true,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
null, null,
null, null,
TextInputAction.none TextInputAction.none,
), ),
textControllerWidget( textControllerWidget(
context, context,
...@@ -1893,9 +1913,9 @@ class OrderForm extends StatelessWidget { ...@@ -1893,9 +1913,9 @@ class OrderForm extends StatelessWidget {
TextInputType.text, TextInputType.text,
true, true,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
null, null,
null, null,
TextInputAction.none TextInputAction.none,
), ),
textControllerWidget( textControllerWidget(
context, context,
...@@ -1905,9 +1925,9 @@ class OrderForm extends StatelessWidget { ...@@ -1905,9 +1925,9 @@ class OrderForm extends StatelessWidget {
TextInputType.text, TextInputType.text,
true, true,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
null, null,
null, null,
TextInputAction.none TextInputAction.none,
), ),
textControllerWidget( textControllerWidget(
context, context,
...@@ -1917,9 +1937,9 @@ class OrderForm extends StatelessWidget { ...@@ -1917,9 +1937,9 @@ class OrderForm extends StatelessWidget {
TextInputType.text, TextInputType.text,
true, true,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
null, null,
null, null,
TextInputAction.none TextInputAction.none,
), ),
textControllerWidget( textControllerWidget(
context, context,
...@@ -1929,9 +1949,9 @@ class OrderForm extends StatelessWidget { ...@@ -1929,9 +1949,9 @@ class OrderForm extends StatelessWidget {
TextInputType.text, TextInputType.text,
false, false,
null, null,
focusNode, focusNode,
null, null,
TextInputAction.done TextInputAction.done,
), ),
], ],
), ),
...@@ -2010,10 +2030,11 @@ class OrderForm extends StatelessWidget { ...@@ -2010,10 +2030,11 @@ class OrderForm extends StatelessWidget {
style: const TextStyle(fontWeight: FontWeight.bold), style: const TextStyle(fontWeight: FontWeight.bold),
), ),
), ),
Padding(padding: const EdgeInsets.all(8.0), child: Text(value.toString())), Padding(
padding: const EdgeInsets.all(8.0),
child: Text(value.toString()),
),
], ],
); );
} }
} }
...@@ -120,11 +120,11 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -120,11 +120,11 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
focusedBorder: InputBorder.none, focusedBorder: InputBorder.none,
isDense: true, isDense: true,
contentPadding: const EdgeInsets.symmetric( contentPadding: const EdgeInsets.symmetric(
horizontal: 10, horizontal: 0,
vertical: 8, vertical: 8,
), ),
hintText: 'Select Account Type', hintText: 'Select Account Type',
hintStyle: const TextStyle(fontSize: 12), hintStyle: const TextStyle(fontSize: 14),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
...@@ -154,7 +154,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -154,7 +154,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
margin: EdgeInsets.symmetric(horizontal: 0), margin: EdgeInsets.symmetric(horizontal: 0),
child: Container( child: Container(
padding: EdgeInsets.symmetric(horizontal: 10), padding: EdgeInsets.symmetric(horizontal: 10),
height: 150, height: widget.mode=="self"?50:150,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16), borderRadius: BorderRadius.circular(16),
), ),
...@@ -211,298 +211,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -211,298 +211,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
), ),
), ),
], ],
// DropdownButtonHideUnderline(
// child: Row(
// children: [
// Expanded(
// child: DropdownButton2<AccountList>(
// isExpanded: true,
// hint: Text(
// 'Select Account Type',
// style: TextStyle(fontSize: 14),
// overflow: TextOverflow.ellipsis,
// ),
//
// items: provider.accountList.isEmpty
// ? [
// DropdownMenuItem(
// enabled: false,
// value: null,
// child: Text(
// 'Select Account Type',
// style: TextStyle(
// fontSize: 14,
// color: Colors.grey,
// ),
// ),
// ),
// ]
// :provider.accountList
// .map(
// (accs) => DropdownMenuItem(
// value: accs,
// child: Text(
// accs.text ?? '',
// style: const TextStyle(
// fontSize: 14,
// ),
// overflow: TextOverflow.ellipsis,
// ),
// ),
// )
// .toList(),
// value: provider.accountList.contains(provider.selectedAccountList)
// ? provider.selectedAccountList
// : null,
//
// onChanged: (AccountList? value) {
// if (value != null) {
// if (provider.accountList.isNotEmpty) {
// provider.selectedAccountList = value;
//
// print("Selected Complaint Type: ${value.text}, ID: ${value.id}");
// provider.selectedAccountID = value.id!;
// provider.selectedAccountName = value.text!;
// print("hfjkshfg" + provider.selectedAccountID.toString());
// }
// provider.ordersAddPaymentSelectOrderAPIFunction(context, provider.selectedAccountID);
// }
// },
// buttonStyleData: ButtonStyleData(
// height: 50,
// width: 160,
// padding: const EdgeInsets.only(
// left: 14,
// right: 14,
// ),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(14),
// color: AppColors.text_field_color,
// ),
// ),
// iconStyleData: IconStyleData(
// icon: SvgPicture.asset(
// "assets/svg/arrow_dropdown.svg",
// height: 25,
// width: 20,
// ),
// iconSize: 12,
// iconEnabledColor: Color(0xFF2D2D2D),
// iconDisabledColor: Colors.grey,
// ),
// dropdownStyleData: DropdownStyleData(
// maxHeight: 200,
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(14),
// color: AppColors.text_field_color,
// ),
// scrollbarTheme: ScrollbarThemeData(
// radius: const Radius.circular(15),
// thickness: MaterialStateProperty.all<double>(6),
// thumbVisibility: MaterialStateProperty.all<bool>(true),
// ),
// ),
// menuItemStyleData: const MenuItemStyleData(
// height: 40,
// padding: EdgeInsets.only(left: 14, right: 14),
// ),
// dropdownSearchData: DropdownSearchData(
//
// searchController: provider.dropDownSearchController,
// searchInnerWidgetHeight: 50,
// searchInnerWidget: Container(
// height: 50,
// padding: const EdgeInsets.only(
// top: 8,
// bottom: 4,
// right: 8,
// left: 8,
// ),
// child: TextFormField(
// controller: provider.dropDownSearchController,
// onChanged: (value) async {
// Future.delayed(Durations.short2,() async {
// await provider.ordersAddPaymentSelectAccountAPIFunction(
// context,
// widget.mode,
// provider.selectedAccountID,
// value,
// );
// },);
//
//
//
// },
// decoration: InputDecoration(
// isDense: true,
// contentPadding: const EdgeInsets.symmetric(
// horizontal: 10,
// vertical: 8,
// ),
// hintText: 'Search account type...',
// hintStyle: const TextStyle(fontSize: 12),
// border: OutlineInputBorder(
// borderRadius: BorderRadius.circular(8),
// ),
// ),
// ),
// ),
// searchMatchFn: (item, searchValue) {
// if (item.value == null || searchValue.isEmpty) return false;
// return item.value!.text!
// .toLowerCase()
// .contains(searchValue.toLowerCase());
// },
// // searchMatchFn: (item, searchValue) {
// // if (item.value == null) return false; //
// // return item.value!.text!.toLowerCase().contains(searchValue.toLowerCase());
// // },
// ),
//
// onMenuStateChange: (isOpen) {
// print("isOpen:${isOpen}");
// if (isOpen) {
// provider.ordersAddPaymentSelectAccountAPIFunction(
// context,
// widget.mode,
// provider.selectedAccountID,
// provider.dropDownSearchController.text,
// );
//
// } else {
// provider.dropDownSearchController.clear();
// }
// },
// ),
// ),
// ],
// ),
// ),
///enwewe ///enwewe
// DropdownButtonHideUnderline(
// child: Row(
// children: [
// Expanded(
// child: DropdownButton2<AccountList>(
// isExpanded: true,
// hint: Text(
// 'Select Account Type',
// style: TextStyle(fontSize: 14),
// overflow: TextOverflow.ellipsis,
// ),
// items: provider.accountList
// .map(
// (accs) => DropdownMenuItem<AccountList>(
// value: accs,
// child: Text(
// accs.text ?? '',
// style: const TextStyle(
// fontSize: 14,
// ),
// overflow: TextOverflow.ellipsis,
// ),
// ),
// )
// .toList(),
// value: provider.selectedAccountList,
// onChanged: (AccountList? value) {
// if (value != null) {
// if (provider.accountList.isNotEmpty) {
// provider.selectedAccountList = value;
// print("Selected Complaint Type: ${value.text}, ID: ${value.id}");
// provider.selectedAccountID = value.id!;
// provider.selectedAccountName = value.text!;
// print("hfjkshfg" + provider.selectedAccountID.toString());
// }
// provider.ordersAddPaymentSelectOrderAPIFunction(context, provider.selectedAccountID);
// }
// },
// buttonStyleData: ButtonStyleData(
// height: 50,
// width: 160,
// padding: const EdgeInsets.only(
// left: 14,
// right: 14,
// ),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(14),
// color: AppColors.text_field_color,
// ),
// ),
// iconStyleData: IconStyleData(
// icon: SvgPicture.asset(
// "assets/svg/arrow_dropdown.svg",
// height: 25,
// width: 20,
// ),
// iconSize: 12,
// iconEnabledColor: Color(0xFF2D2D2D),
// iconDisabledColor: Colors.grey,
// ),
// dropdownStyleData: DropdownStyleData(
// maxHeight: 200,
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(14),
// color: AppColors.text_field_color,
// ),
// scrollbarTheme: ScrollbarThemeData(
// radius: const Radius.circular(15),
// thickness: MaterialStateProperty.all<double>(6),
// thumbVisibility: MaterialStateProperty.all<bool>(true),
// ),
// ),
// menuItemStyleData: const MenuItemStyleData(
// height: 40,
// padding: EdgeInsets.only(left: 14, right: 14),
// ),
// dropdownSearchData: DropdownSearchData(
// searchController: provider.dropDownSearchController,
// searchInnerWidgetHeight: 50,
// searchInnerWidget: Container(
// height: 50,
// padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
// child: TextFormField(
// controller: provider.dropDownSearchController,
// onChanged: (searchTerm) {
// onSearchChanged(searchTerm);
// },
// decoration: InputDecoration(
// isDense: true,
// contentPadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 8),
// hintText: 'Search account type...',
// hintStyle: const TextStyle(fontSize: 12),
// border: OutlineInputBorder(
// borderRadius: BorderRadius.circular(8),
// ),
// ),
// ),
// ),
// // You can omit or always return true since we're doing server-side filtering
// searchMatchFn: (item, searchValue) => true,
// ),
//
// onMenuStateChange: (isOpen) {
// if (!isOpen) {
// print("is called"); // Clear search when menu closes
// // Optionally reset accountList to initial state
// setState(() {
// provider.ordersAddPaymentSelectAccountAPIFunction(context, widget.mode,provider.selectedAccountID,provider.dropDownSearchController.text);
// });
// } else {
// print("is called2");
// // Fetch initial data when menu opens
// setState(() {
// provider.ordersAddPaymentSelectAccountAPIFunction(context, widget.mode,provider.selectedAccountID,provider.dropDownSearchController.text);
// });
// }
// },
// ),
// ),
// ],
// ),
// ),
errorWidget(context, provider.selectAccountError), errorWidget(context, provider.selectAccountError),
textControllerWidget( textControllerWidget(
...@@ -520,7 +229,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -520,7 +229,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
errorWidget(context, provider.amountError), errorWidget(context, provider.amountError),
///Addorderbutton ///Addorderbutton
if (provider.selectedAccountID!.isNotEmpty) ...[ if (provider.selectedAccountID!=null) ...[
InkResponse( InkResponse(
onTap: () { onTap: () {
// if (provider.selectedOrderIds.length < provider.orderList.length) { // if (provider.selectedOrderIds.length < provider.orderList.length) {
...@@ -617,7 +326,8 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -617,7 +326,8 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
) )
.toList(), .toList(),
// value: provider.selectedOrderLists, // value: provider.selectedOrderLists,
value: provider value:provider.selectedOrderIds[index] != null?
provider
.orderList .orderList
.firstWhere( .firstWhere(
(product) => (product) =>
...@@ -625,7 +335,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -625,7 +335,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
.orderId == .orderId ==
provider provider
.selectedOrderIds[index], .selectedOrderIds[index],
), ):null,
onChanged: ( onChanged: (
OrderList? value, OrderList? value,
) { ) {
...@@ -684,7 +394,9 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -684,7 +394,9 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
provider provider
.orderAmountControllers[index], .orderAmountControllers[index],
"Enter Order Amount", "Enter Order Amount",
(p0) {}, (p0) {
provider.updateAdjustedAmount();
},
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter FilteringTextInputFormatter
...@@ -708,6 +420,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -708,6 +420,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
], ],
), ),
], ],
], ],
textControllerWidget( textControllerWidget(
...@@ -959,10 +672,11 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -959,10 +672,11 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
), ),
floatingActionButtonLocation: floatingActionButtonLocation:
FloatingActionButtonLocation.centerFloat, FloatingActionButtonLocation.centerFloat,
bottomNavigationBar: InkResponse( bottomNavigationBar:provider.submitClicked?null:
InkResponse(
onTap: () { onTap: () {
provider.submitClicked = true;
provider.selectedOrders = provider.getFormData(); provider.selectedOrders = provider.getFormData();
print(provider.selectedOrders);
provider.ordersAddPaymentAPISubmitFunction( provider.ordersAddPaymentAPISubmitFunction(
context, context,
provider.selectedAccountID, provider.selectedAccountID,
...@@ -980,7 +694,9 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -980,7 +694,9 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
color: AppColors.app_blue, color: AppColors.app_blue,
borderRadius: BorderRadius.circular(15), borderRadius: BorderRadius.circular(15),
), ),
child: Text( child:provider.submitClicked?CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation(Colors.white),
): Text(
"Submit", "Submit",
style: TextStyle( style: TextStyle(
fontSize: 15, fontSize: 15,
......
...@@ -155,6 +155,7 @@ class _AddtpcagentScreenState extends State<AddtpcagentScreen> { ...@@ -155,6 +155,7 @@ class _AddtpcagentScreenState extends State<AddtpcagentScreen> {
), ),
), ),
], ],
errorWidget(context, provider.imageError),
textControllerWidget( textControllerWidget(
context, context,
...@@ -212,7 +213,8 @@ class _AddtpcagentScreenState extends State<AddtpcagentScreen> { ...@@ -212,7 +213,8 @@ class _AddtpcagentScreenState extends State<AddtpcagentScreen> {
TextInputType.text, TextInputType.text,
false, false,
null, null,
focusNodes[5],focusNodes[6],TextInputAction.next focusNodes[5],focusNodes[6],
TextInputAction.next
), ),
if (provider.tpcBankIFSCError != null) ...[ if (provider.tpcBankIFSCError != null) ...[
errorWidget(context, provider.tpcBankIFSCError), errorWidget(context, provider.tpcBankIFSCError),
...@@ -232,7 +234,8 @@ class _AddtpcagentScreenState extends State<AddtpcagentScreen> { ...@@ -232,7 +234,8 @@ class _AddtpcagentScreenState extends State<AddtpcagentScreen> {
errorWidget(context, provider.tpcNoteError), errorWidget(context, provider.tpcNoteError),
], ],
InkWell( InkWell(
onTap: () { onTap:provider.submitClicked?null: () {
provider.submitClicked = true;
provider.addTPCAgentAPIFunction(context); provider.addTPCAgentAPIFunction(context);
}, },
...@@ -250,7 +253,9 @@ class _AddtpcagentScreenState extends State<AddtpcagentScreen> { ...@@ -250,7 +253,9 @@ class _AddtpcagentScreenState extends State<AddtpcagentScreen> {
borderRadius: BorderRadius.circular(14.0), borderRadius: BorderRadius.circular(14.0),
), ),
child: Center( child: Center(
child: Text( child:provider.submitClicked?CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation(Colors.white),
): Text(
"Submit", "Submit",
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
......
import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:generp/Notifiers/ordersProvider/dispatchOrderProvider.dart';
import 'package:generp/Notifiers/ordersProvider/pagesDashboardProvider.dart'; import 'package:generp/Notifiers/ordersProvider/pagesDashboardProvider.dart';
import 'package:generp/Utils/dropdownTheme.dart';
import 'package:generp/screens/screensExports.dart'; import 'package:generp/screens/screensExports.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
...@@ -9,6 +12,7 @@ import '../../Utils/app_colors.dart'; ...@@ -9,6 +12,7 @@ import '../../Utils/app_colors.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
import '../finance/FileViewer.dart'; import '../finance/FileViewer.dart';
import 'editOrderAccountDetails.dart'; import 'editOrderAccountDetails.dart';
import 'package:generp/Models/ordersModels/ordersDetailsDispatchOrderViewResponse.dart';
class Ordersdetailsbymodes extends StatefulWidget { class Ordersdetailsbymodes extends StatefulWidget {
final pageTitleName; final pageTitleName;
...@@ -27,6 +31,7 @@ class Ordersdetailsbymodes extends StatefulWidget { ...@@ -27,6 +31,7 @@ class Ordersdetailsbymodes extends StatefulWidget {
} }
class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
Dropdowntheme ddtheme = Dropdowntheme();
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
...@@ -36,6 +41,8 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -36,6 +41,8 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
context, context,
listen: false, listen: false,
); );
var disproved = Provider.of<Dispatchorderprovider>(context,listen: false);
disproved.ordersDetailsDispatchOrderViewFunction(context,widget.orderId);
provider.ordersDetailsByModeAPIFunction( provider.ordersDetailsByModeAPIFunction(
context, context,
widget.orderId, widget.orderId,
...@@ -46,8 +53,8 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -46,8 +53,8 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Pagesdashboardprovider>( return Consumer2<Pagesdashboardprovider,Dispatchorderprovider>(
builder: (context, provider, child) { builder: (context, provider,disProvider, child) {
var orderDetails = provider.orderDetails; var orderDetails = provider.orderDetails;
return WillPopScope( return WillPopScope(
...@@ -333,7 +340,34 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -333,7 +340,34 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
), ),
], ],
if (widget.mode == "dispatched") ...[], if (widget.mode == "dispatched") ...[
Expanded(
child: InkResponse(
onTap: () {
disProvider.initializeForm(context);
_showDispatchSheet(context, "Dispatch");
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Color(0xFFFFEFEF),
border: Border.all(
color: Color(0xFFED3424),
width: 0.5,
),
),
child: Center(
child: Text(
"Dispatch",
style: TextStyle(
color: Color(0xFFED3424),
),
),
),
),
),
),
],
], ],
), ),
), ),
...@@ -401,12 +435,14 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -401,12 +435,14 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: builder:
(context) => (
Editorderaccountdetails( context,
mode: widget.mode, ) => Editorderaccountdetails(
pageTitleName: "Edit Order (${widget.mode})", mode: widget.mode,
orderID: provider.orderDetails.id, pageTitleName:
), "Edit Order (${widget.mode})",
orderID: provider.orderDetails.id,
),
), ),
); );
break; break;
...@@ -693,7 +729,8 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -693,7 +729,8 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
], ],
InkWell( InkWell(
onTap: () { onTap:provider.submitClicked?null: () {
provider.submitClicked = true;
provider.approvalRejectionAPIFunction( provider.approvalRejectionAPIFunction(
context, context,
details.status, details.status,
...@@ -736,7 +773,286 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -736,7 +773,286 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
borderRadius: BorderRadius.circular(14.0), borderRadius: BorderRadius.circular(14.0),
), ),
child: Center( child: Center(
child:provider.submitClicked?CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation(Colors.white),
): Text(
"Submit",
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white),
),
),
),
),
],
),
),
);
},
),
);
},
);
},
);
}
Future<void> _showDispatchSheet(BuildContext context, type) {
return showModalBottomSheet(
useSafeArea: true,
isDismissible: true,
isScrollControlled: true,
showDragHandle: true,
backgroundColor: Colors.white,
enableDrag: true,
context: context,
builder: (context) {
return StatefulBuilder(
builder: (context, setState) {
return SafeArea(
child: Consumer2<Pagesdashboardprovider, Dispatchorderprovider>(
builder: (context, provider, disProvider, child) {
final details = provider.orderDetails;
return Container(
margin: EdgeInsets.only(
bottom: 15,
left: 15,
right: 15,
top: 10,
),
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Align(
alignment: Alignment.topLeft,
child: Text(
"Dispatch",
style: TextStyle(
color: AppColors.app_blue,
fontSize: 16,
),
),
),
textControllerWidget(
context,
disProvider.invoiceNumberController,
"Enter Invoice Number",
disProvider.onChangedinvoiceNumber,
TextInputType.text,
false,
null,
),
errorWidget(context, disProvider.invoiceNumberError),
textControllerWidget(
context,
disProvider.vehicleNumberController,
"Enter Vehicle Number",
disProvider.onChangedvehicleNumber,
TextInputType.text,
false,
null,
),
errorWidget(context, disProvider.vehicleNumberError),
textControllerWidget(
context,
disProvider.driverNameController,
"Enter Driver Name",
disProvider.onChangeddriverName,
TextInputType.text,
false,
null,
),
errorWidget(context, disProvider.driverNameError),
textControllerWidget(
context,
disProvider.driverMobileNumberController,
"Enter Driver Mobile Number",
disProvider.onChangeddriverMobileNumber,
TextInputType.text,
false,
null,
),
errorWidget(context, disProvider.driverMobileNumberError),
InkResponse(
onTap: () {
disProvider.editAddNewRow();
},
child: Container(
margin: const EdgeInsets.symmetric(vertical: 10),
height: 45,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: const Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: AppColors.app_blue,
width: 0.5,
),
),
child: Center(
child: Text( child: Text(
"+ Add Product",
style: TextStyle(
fontFamily: "JakartaMedium",
color: AppColors.app_blue,
),
),
),
),
),
if (disProvider.leadProductsList.isNotEmpty ||
disProvider.engineNumberControllers.isNotEmpty)...[
ListView.builder(
itemCount: disProvider.engineNumberControllers.length,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (context, j) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10),
margin: const EdgeInsets.symmetric(vertical: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget(context, "Product"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<Products>(
isExpanded: true,
hint: const Text(
'Select Product',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items: disProvider.productsList
.map((ord) => DropdownMenuItem<Products>(
value: ord,
child: Text(
"(Product Name: ${ord.productName})",
style: const TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
))
.toList(),
value: disProvider.selectedProductIds[j] != null
? disProvider.productsList.firstWhere(
(ord) => ord.id == disProvider.selectedProductIds[j],
orElse: () => disProvider.productsList[0],
)
: null,
onChanged: (Products? value) {
if (value != null) {
disProvider.updateSelectedProductIds(j, value);
disProvider.selectedProductIds[j] =
value.id?.toString() ?? '';
disProvider.updateTotalAmount(j);
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
),
),
const SizedBox(height: 10),
Row(
children: [
Expanded(
flex: 2,
child: textControllerWidget(
context,
disProvider.engineNumberControllers[j],
"Enter Engine Number",
(value) => disProvider.updateTotalAmount(j),
TextInputType.number,
false,
FilteringTextInputFormatter.digitsOnly,
),
),
],
),
const SizedBox(height: 10),
Row(
children: [
Expanded(
flex: 2,
child: textControllerWidget(
context,
disProvider.pdiIDControllers[j],
"Enter PDI ID",
(value) => disProvider.updateTotalAmount(j),
TextInputType.number,
false,
FilteringTextInputFormatter.digitsOnly,
),
),
],
),
const SizedBox(height: 10),
// IconButton(
// icon: const Icon(Icons.delete),
// onPressed: disProvider.editProductPriceControllers.length > 1
// ? () => disProvider.editRemoveRow(j)
// : null,
// ),
],
),
);
},
),
],
InkWell(
onTap:provider.submitClicked?null: () {
provider.submitClicked = false;
final data = disProvider.getFormData();
print(data);
// disProvider.approvalRejectionAPIFunction(
// context,
// details.status,
// details.id,
// type == "Dispatch",
// provider.approveRejectFeedbackController.text,
// details.tpcApplicable,
// details.tpcApplicable == "Yes"
// ? (widget.mode == "level_one_approval"
// ? details.level1TpcApprovedAmount
// : details.level2TpcApprovedAmount)
// : "",
// provider.saleOrderNumberController.text,
// provider.editCompanyController.text,
// data,
// );
},
child: Container(
alignment: Alignment.center,
height: 45,
margin: EdgeInsets.only(
left: 5.0,
right: 5.0,
top: 5.0,
bottom: 5.0,
),
decoration: BoxDecoration(
color: AppColors.app_blue, //1487C9
borderRadius: BorderRadius.circular(14.0),
),
child: Center(
child:provider.submitClicked?CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation(Colors.white),
): Text(
"Submit", "Submit",
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
...@@ -857,7 +1173,8 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -857,7 +1173,8 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
], ],
InkWell( InkWell(
onTap: () { onTap:provider.submitClicked ?null: () {
provider.submitClicked = true;
provider.delectionAPIFunction( provider.delectionAPIFunction(
context, context,
provider.orderDetails.id, provider.orderDetails.id,
...@@ -877,7 +1194,9 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -877,7 +1194,9 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
borderRadius: BorderRadius.circular(14.0), borderRadius: BorderRadius.circular(14.0),
), ),
child: Center( child: Center(
child: Text( child:provider.submitClicked ?CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation(Colors.white),
): Text(
"Submit", "Submit",
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
......
...@@ -90,6 +90,7 @@ import '../Models/ordersModels/addOrderTpcAgentListResponse.dart'; ...@@ -90,6 +90,7 @@ import '../Models/ordersModels/addOrderTpcAgentListResponse.dart';
import '../Models/ordersModels/commonResponse.dart'; import '../Models/ordersModels/commonResponse.dart';
import '../Models/ordersModels/ordersAccessiblePagesResponse.dart'; import '../Models/ordersModels/ordersAccessiblePagesResponse.dart';
import '../Models/ordersModels/ordersDetailsByModeResponse.dart'; import '../Models/ordersModels/ordersDetailsByModeResponse.dart';
import '../Models/ordersModels/ordersDetailsDispatchOrderViewResponse.dart';
import '../Models/ordersModels/ordersDetailsEditOrderViewResponse.dart'; import '../Models/ordersModels/ordersDetailsEditOrderViewResponse.dart';
import '../Models/ordersModels/ordersListByModeFilterResponse.dart'; import '../Models/ordersModels/ordersListByModeFilterResponse.dart';
import '../Models/ordersModels/ordersListByModeResponse.dart'; import '../Models/ordersModels/ordersListByModeResponse.dart';
...@@ -2485,6 +2486,33 @@ class ApiCalling { ...@@ -2485,6 +2486,33 @@ class ApiCalling {
} }
} }
static Future<ordersDetailsDispatchOrderViewResponse?> ordersDetailsDispatchOrderViewAPI(
empId,
session,
order_id,
) async {
try {
Map<String, String> data = {
'empId,':empId.toString(),
'session,':session.toString(),
'order_id,':order_id.toString(),
};
final res = await post(data, ordersOrderDetailsDispatchProductsUrl, {});
if(res!=null){
return ordersDetailsDispatchOrderViewResponse.fromJson(jsonDecode(res.body));
}else{
debugPrint("Null Response");
}
} catch (e) {
debugPrint('hello bev=bug $e ');
return null;
}
}
static Future<CommonResponse?> ordersDetailsApproveRejectAPI( static Future<CommonResponse?> ordersDetailsApproveRejectAPI(
empId, empId,
session, session,
......
...@@ -146,7 +146,7 @@ packages: ...@@ -146,7 +146,7 @@ packages:
source: hosted source: hosted
version: "1.1.2" version: "1.1.2"
collection: collection:
dependency: transitive dependency: "direct main"
description: description:
name: collection name: collection
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
......
...@@ -79,6 +79,7 @@ dependencies: ...@@ -79,6 +79,7 @@ dependencies:
printing: ^5.14.2 printing: ^5.14.2
interactive_slider: ^0.5.1 interactive_slider: ^0.5.1
tuple: ^2.0.2 tuple: ^2.0.2
collection: ^1.19.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment