second commit
This commit is contained in:
391
lib/Controller/Authentication/Authcontroller.dart
Normal file
391
lib/Controller/Authentication/Authcontroller.dart
Normal file
@@ -0,0 +1,391 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'dart:math';
|
||||
import 'package:country_currency_pickers/country.dart';
|
||||
import 'package:country_currency_pickers/utils/utils.dart';
|
||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:http/http.dart';
|
||||
import 'package:http/http.dart' as dio1;
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:otp_timer_button/otp_timer_button.dart';
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:sms_autofill/sms_autofill.dart';
|
||||
import '../../Data/Repository/Authentication/loginrepository.dart';
|
||||
import '../../Helper/Constants/Colorconstants.dart';
|
||||
import '../../Helper/Logger.dart';
|
||||
import '../../Helper/toast.dart';
|
||||
import '../../Model/Request/Authentication/Loginrequest.dart';
|
||||
import '../../Model/Response/Authentication/Loginresponse.dart';
|
||||
import '../../View/Authentication/Otpverification.dart';
|
||||
import '../../View/Authentication/Usercreate/Usercreateview.dart';
|
||||
|
||||
|
||||
class AuthController extends GetxController with CodeAutoFill{
|
||||
|
||||
String? formatter;
|
||||
String? currencyCode;
|
||||
String? fcmEntryToken;
|
||||
|
||||
String? resendOtp;
|
||||
|
||||
|
||||
String? userFcmToken;
|
||||
String? contactNo;
|
||||
|
||||
|
||||
//Otp
|
||||
String? smsOtp;
|
||||
String verifyId = "";
|
||||
|
||||
int authmode = 0;
|
||||
|
||||
bool termsChecking =false;
|
||||
|
||||
//Otp
|
||||
bool codeSent = false;
|
||||
|
||||
var loginStatus;
|
||||
|
||||
String? contactLength;
|
||||
|
||||
|
||||
// FirebaseMessaging firebaseMessaging = FirebaseMessaging.instance;
|
||||
FirebaseMessaging firebaseMessaging = FirebaseMessaging.instance;
|
||||
|
||||
|
||||
Country selectedDialogCountry = CountryPickerUtils.getCountryByIsoCode('IN');
|
||||
|
||||
|
||||
// final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
|
||||
final RoundedLoadingButtonController loginController = RoundedLoadingButtonController();
|
||||
|
||||
//Otp
|
||||
OtpTimerButtonController otpTimerController = OtpTimerButtonController();
|
||||
|
||||
|
||||
TextEditingController loginPhoneNumberController = TextEditingController();
|
||||
TextEditingController otpController = TextEditingController();
|
||||
TextEditingController textEditingController = TextEditingController();
|
||||
|
||||
LoginRepository loginRepository = LoginRepository();
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
getId();
|
||||
fcmToken();
|
||||
listenForCode();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
cancel(); /// Stop listening for the OTP code
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
@override
|
||||
void codeUpdated() {
|
||||
otpController.text = code ?? '';
|
||||
logger.i("OTP Code Received: ${otpController.text}");
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
SmsAutoFill().unregisterListener();
|
||||
loginPhoneNumberController.dispose();
|
||||
otpController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
||||
|
||||
fcmToken() async {
|
||||
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
var token = await firebaseMessaging.getToken();
|
||||
logger.i("firebase token======$token");
|
||||
fcmEntryToken = token;
|
||||
prefs.setString('fcmToken', token!);
|
||||
logger.i("tenanttokensetstring ${prefs.getString('fcmToken')}");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void currency() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
currencyCode = prefs.getString('Code_Currency')!;
|
||||
final formats = NumberFormat();
|
||||
formatter = formats.simpleCurrencySymbol("$currencyCode");
|
||||
prefs.setString('Currency_Symbol', formatter!);
|
||||
}
|
||||
|
||||
void loginTenant(context) async {
|
||||
Timer(const Duration(seconds: 1), () {
|
||||
// btnController.success();
|
||||
profileValidation(context);
|
||||
});
|
||||
}
|
||||
|
||||
profileValidation(context)async{
|
||||
if (loginPhoneNumberController.text.isEmpty) {
|
||||
loginController.reset();
|
||||
Toast.showToast("Please Enter Mobile Number");
|
||||
} else if (!RegExp(
|
||||
r'^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$')
|
||||
.hasMatch(loginPhoneNumberController.text)) {
|
||||
loginController.reset();
|
||||
Toast.showToast("Please Enter a Valid Phone Number");
|
||||
} else if(termsChecking==false){
|
||||
loginController.reset();
|
||||
Toast.showToast("Please Select Terms of Service");
|
||||
|
||||
}
|
||||
else {
|
||||
signIn(context);
|
||||
}
|
||||
}
|
||||
|
||||
String? uniqueDeviceId;
|
||||
String? deviceId;
|
||||
var iosDeviceInfo;
|
||||
var androidDeviceInfo;
|
||||
Future<String?> getId() async {
|
||||
// var deviceInfo = DeviceInfoPlugin();
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
if (Platform.isIOS) { // import 'dart:io'
|
||||
// iosDeviceInfo = await deviceInfo.iosInfo;
|
||||
deviceId = iosDeviceInfo.toMap().toString();
|
||||
uniqueDeviceId = iosDeviceInfo.id;
|
||||
prefs.setString('deviceId',uniqueDeviceId!);
|
||||
print('iosDeviceInfodeviceId$deviceId');
|
||||
print('uniqueDeviceId${prefs.getString('deviceId')}');
|
||||
return iosDeviceInfo.identifierForVendor; // Unique ID on iOS
|
||||
} else {
|
||||
// androidDeviceInfo = await deviceInfo.androidInfo;
|
||||
deviceId = androidDeviceInfo.toMap().toString();
|
||||
uniqueDeviceId = androidDeviceInfo.id;
|
||||
prefs.setString('deviceId',uniqueDeviceId!);
|
||||
print('androidDeviceInfodeviceId$deviceId');
|
||||
print('uniqueDeviceId${prefs.getString('deviceId')}');
|
||||
return androidDeviceInfo.androidId; // Unique ID on Android
|
||||
}
|
||||
print('${deviceId =androidDeviceInfo.androidId}');
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Authentication
|
||||
|
||||
signIn(context) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
|
||||
// ✅ Ensure FCM token is ready before calling API
|
||||
if (fcmEntryToken == null) {
|
||||
await fcmToken();
|
||||
}
|
||||
|
||||
// Prepare data
|
||||
final contactNo = loginPhoneNumberController.text;
|
||||
final configId = 1;
|
||||
final deviceType = Platform.operatingSystem;
|
||||
final fcmTokenValue = fcmEntryToken ?? '';
|
||||
final deviceId1 = deviceId ?? '';
|
||||
|
||||
// ✅ Print all values before sending
|
||||
print("========= LOGIN REQUEST DATA =========");
|
||||
print("📱 Contact No : $contactNo");
|
||||
print("⚙️ Config ID : $configId");
|
||||
print("💻 Device Type : $deviceType");
|
||||
print("🔑 FCM Token : $fcmTokenValue");
|
||||
print("🆔 Device ID : $deviceId1");
|
||||
print("======================================");
|
||||
|
||||
// Call login API
|
||||
loginApi(
|
||||
LoginRequest(
|
||||
contactno: contactNo,
|
||||
configid: configId,
|
||||
devicetype: deviceType,
|
||||
userfcmtoken: fcmTokenValue,
|
||||
deviceid: deviceId1,
|
||||
),
|
||||
context,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
loginApi(LoginRequest data,context) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
LoginResponse? result = await loginRepository.signIn(data);
|
||||
if (result?.status == true) {
|
||||
|
||||
loginStatus = result?.status;
|
||||
authmode = result?.details?.authmode??0;
|
||||
userFcmToken = result?.details?.userfcmtoken;
|
||||
contactNo = result?.details?.contactno;
|
||||
|
||||
|
||||
logger.i('loginApilocationname ${result?.details?.locationname}');
|
||||
|
||||
|
||||
prefs.setInt('userId', result?.details?.userid ?? 0);
|
||||
prefs.setString('authName', result?.details?.authname ?? '');
|
||||
prefs.setInt('configId', result?.details?.configid ?? 0);
|
||||
prefs.setInt('authMode', result?.details?.authmode ?? 0);
|
||||
prefs.setInt('roleId', result?.details?.roleid ?? 0);
|
||||
prefs.setString('userFirstName', result?.details?.firstname ?? '');
|
||||
prefs.setString('userLastName', result?.details?.lastname ?? '');
|
||||
prefs.setString('userPassword', result?.details?.password ?? '');
|
||||
prefs.setString('userEmail', result?.details?.email ?? '');
|
||||
// prefs.setString('tenantContactNo', result?.details?.contactno ?? '');
|
||||
prefs.setString('address', result?.details?.address ?? '');
|
||||
prefs.setString('userSuburb', result?.details?.suburb ?? '');
|
||||
prefs.setString('userCity', result?.details?.city ?? '');
|
||||
prefs.setString('userState', result?.details?.state ?? '');
|
||||
prefs.setString('userPostcode', result?.details?.postcode ?? '');
|
||||
// prefs.setString('tenantFcmToken', result?.details?.userfcmtoken ?? '');
|
||||
prefs.setInt('userPin', result?.details?.pin ?? 0);
|
||||
prefs.setInt('partnerId', result?.details?.partnerid ?? 0);
|
||||
prefs.setInt('tenantId', result?.details?.tenantid ?? 0);
|
||||
prefs.setString('userName', result?.details?.fullname ?? '');
|
||||
prefs.setString('tenantName', result?.details?.tenantname ?? '');
|
||||
prefs.setString('tenantAddress', result?.details?.tenantaddress ?? '');
|
||||
prefs.setString('tenantCity', result?.details?.tenantcity ?? '');
|
||||
prefs.setString('tenantPostcode', result?.details?.tenantpostcode ?? '');
|
||||
prefs.setString('tenantLatitude', result?.details?.tenantlat ?? '');
|
||||
prefs.setString('tenantLongitude', result?.details?.tenantlong ?? '');
|
||||
prefs.setInt('locationId', result?.details?.locationid ?? 0);
|
||||
prefs.setString('locationName', result?.details?.locationname ?? '');
|
||||
prefs.setString('appLocation', result?.details?.applocation ?? '');
|
||||
prefs.setString('appLatitude', result?.details?.applatitude ?? '');
|
||||
prefs.setString('appLongitude', result?.details?.applongitude ?? '');
|
||||
prefs.setInt('appRadius', result?.details?.appradius ?? 0);
|
||||
prefs.setInt('appLocationId', result?.details?.applocationid ?? 0);
|
||||
prefs.setInt('moduleId', result?.details?.moduleid ?? 0);
|
||||
logger.i('App location Id from login : ${prefs.getInt('appLocationId')}');
|
||||
logger.i('location Id from login : ${prefs.getInt('locationId')}');
|
||||
update();
|
||||
}
|
||||
|
||||
if(authmode !=1) {
|
||||
sendSmsOtp('${loginPhoneNumberController.text.trim()}',
|
||||
authmode: result?.details?.authmode ?? 0);
|
||||
}
|
||||
else{
|
||||
otpController.clear();
|
||||
resendOtp = '123456';
|
||||
if(authmode==1){
|
||||
var snackBar = SnackBar(
|
||||
backgroundColor: ColorConstants.primaryColor,
|
||||
duration: const Duration(seconds: 5),
|
||||
content: Text('Please enter your 6 digit verification code provided by Nearlexpress Business',style: TextStyle(color: ColorConstants.secondaryColor),)
|
||||
);
|
||||
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
||||
}
|
||||
Get.to(()=>OTPVerification(otp: '$resendOtp' ,authmode: authmode,logInStatus:loginStatus ,));
|
||||
}
|
||||
loginController.reset();
|
||||
}
|
||||
|
||||
//Otp
|
||||
|
||||
sendSmsOtp(String mobile, {authmode=0}) async {
|
||||
int otpInput = await otpGenerator();
|
||||
smsOtp = otpInput.toString();
|
||||
if(authmode==1)
|
||||
{
|
||||
onNavigateToProfileNumberVerification(otp: "123456",authmode: authmode);
|
||||
}
|
||||
|
||||
else {
|
||||
receiveSmsOtp(mobile,smsOtp.toString(), Get.context);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> receiveSmsOtp(String phoneNumber, String otp, context) async {
|
||||
final appSignature = await SmsAutoFill().getAppSignature;
|
||||
|
||||
final message = "<#> Dear customer, use OTP $otp to sign in to Nearle App.\n$appSignature";
|
||||
final encodedMessage = Uri.encodeComponent(message);
|
||||
|
||||
final url = Uri.parse(
|
||||
'https://msg.lionsms.com/api/smsapi?'
|
||||
'key=e57f5c9679af26077be1a7eadabb1b2a'
|
||||
'&route=7'
|
||||
'&sender=NEARLE'
|
||||
'&number=$phoneNumber'
|
||||
'&sms=$encodedMessage'
|
||||
'&templateid=1107174712357438611',
|
||||
);
|
||||
|
||||
logger.i('urlsendOtp $url');
|
||||
logger.i('appSignaturereceiveSmsOtp $appSignature');
|
||||
|
||||
try {
|
||||
final response = await http.get(url);
|
||||
if (response.statusCode == 200) {
|
||||
logger.i("SMS sent successfully");
|
||||
receiveOtp(response, otp);
|
||||
} else {
|
||||
logger.i("Failed to send SMS: ${response.body}");
|
||||
}
|
||||
} catch (e) {
|
||||
logger.i("Error sending SMS: $e");
|
||||
}
|
||||
}
|
||||
|
||||
receiveOtp(model,otp) async{
|
||||
onNavigateToProfileNumberVerification(otp: otp);
|
||||
}
|
||||
|
||||
onNavigateToProfileNumberVerification({String? otp,authmode=0}){
|
||||
otpController.clear();
|
||||
print('onNavigateToProfileNumberVerification $otp');
|
||||
resendOtp = otp;
|
||||
Get.to(()=>OTPVerification(otp: resendOtp??'' ,authmode: authmode,logInStatus: loginStatus,));
|
||||
}
|
||||
|
||||
|
||||
otpGenerator(){
|
||||
var rng = Random();
|
||||
var next = rng.nextDouble() * 1000000;
|
||||
while (next < 100000) {
|
||||
next *= 10;
|
||||
}
|
||||
print(next.toInt());
|
||||
print("random${next.toInt()}");
|
||||
return next.toInt();
|
||||
}
|
||||
|
||||
|
||||
Future<void> getHintPhoneNumber(context) async {
|
||||
try {
|
||||
final phoneNumber = await SmsAutoFill().hint;
|
||||
if (phoneNumber != null) {
|
||||
// Remove +91 from the phone number
|
||||
String cleanedPhoneNumber = phoneNumber.startsWith('+91')
|
||||
? phoneNumber.substring(3)
|
||||
: phoneNumber;
|
||||
|
||||
loginPhoneNumberController.text = cleanedPhoneNumber;
|
||||
contactLength = cleanedPhoneNumber;
|
||||
// doSomething(context);
|
||||
update();
|
||||
|
||||
logger.i("Phone number retrieved: ${loginPhoneNumberController.text}");
|
||||
}
|
||||
} catch (e) {
|
||||
logger.i("Failed to retrieve phone number hint: $e");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
599
lib/Controller/Authentication/Createtenantusercontroller.dart
Normal file
599
lib/Controller/Authentication/Createtenantusercontroller.dart
Normal file
@@ -0,0 +1,599 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||
import 'package:geolocator/geolocator.dart' as LocationAccuracy;
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:minio/io.dart';
|
||||
import 'package:minio/minio.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'dart:io';
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../Data/Provider/Appcategory/Appcategoryprovider.dart';
|
||||
import '../../Data/Repository/Appcategory/Appcategoryrepository.dart';
|
||||
import '../../Data/Repository/Applocation/Applocationrepository.dart';
|
||||
import '../../Data/Repository/Authentication/Createtenantuser/Createtenantuserrepository.dart';
|
||||
import '../../Data/Repository/TenantPartner/Tenantpartnerrepository.dart';
|
||||
import '../../Helper/Logger.dart';
|
||||
import '../../Helper/location_service.dart';
|
||||
import '../../Helper/toast.dart';
|
||||
import '../../Model/Request/Authentication/Createuser/Createuserresponse.dart';
|
||||
import '../../Model/Response/Appcategory/app_category_response.dart';
|
||||
import '../../Model/Response/Applocations/Applocationresponse.dart';
|
||||
import '../../Model/Response/Authentication/Createtenantuser/Createtenantuserresponse.dart';
|
||||
import '../../Model/Response/Partners/Getpartnerinforequest.dart';
|
||||
import '../../View/Success/Successview.dart';
|
||||
|
||||
class CreateUserController extends GetxController {
|
||||
String appLocationName = '';
|
||||
String appCategoryName = '';
|
||||
String partnerName = '';
|
||||
String? latitude;
|
||||
String? longitude;
|
||||
String? catName;
|
||||
int? moduleIdByCategory = 0;
|
||||
String? subCatName;
|
||||
String? fcmEntryToken;
|
||||
|
||||
String? todayDate;
|
||||
String? validityDate;
|
||||
String? url; // This will hold the uploaded image URL
|
||||
|
||||
int selectedIndex = 0;
|
||||
int? catId;
|
||||
int? subCatId;
|
||||
|
||||
String? deviceId;
|
||||
|
||||
int appLocationId = 0;
|
||||
int partnerSelectedIndex = -1;
|
||||
int? partnerId;
|
||||
|
||||
List<AppLocationDetails> locations = [];
|
||||
List<PartnerInfoDetails> getPartners = [];
|
||||
List<AppCategoryDetails> appCategory = [];
|
||||
|
||||
Position? resultPosition;
|
||||
|
||||
List<SubCategory> subCategories = [];
|
||||
|
||||
Future<void> getFcmToken() async {
|
||||
try {
|
||||
await FirebaseMessaging.instance.requestPermission();
|
||||
|
||||
fcmEntryToken = await FirebaseMessaging.instance.getToken();
|
||||
print('FCM Token: $fcmEntryToken');
|
||||
|
||||
FirebaseMessaging.instance.onTokenRefresh.listen((newToken) {
|
||||
fcmEntryToken = newToken;
|
||||
print('FCM Token Refreshed: $fcmEntryToken');
|
||||
});
|
||||
} catch (e) {
|
||||
print('Error getting FCM token: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getSubCategories() async {
|
||||
final provider = SubCategoryProvider();
|
||||
final List<SubCategory> fetched = await provider.fetchSubCategories();
|
||||
subCategories.assignAll(fetched);
|
||||
update();
|
||||
}
|
||||
|
||||
final String apiUrl = "https://fiesta.nearle.app/live/api/v1/mob/utils/getsubcategories";
|
||||
|
||||
Future<GetSubCategoriesResponse?> fetchSubCategories() async {
|
||||
try {
|
||||
final response = await http.get(Uri.parse(apiUrl));
|
||||
if (response.statusCode == 200) {
|
||||
final jsonData = json.decode(response.body);
|
||||
return GetSubCategoriesResponse.fromJson(jsonData);
|
||||
} else {
|
||||
print("Failed to load subcategories: ${response.statusCode}");
|
||||
}
|
||||
} catch (e) {
|
||||
print("Error fetching subcategories: $e");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
bool shimmer = true;
|
||||
bool categoryShimmer = true;
|
||||
bool isEnterAddress = false;
|
||||
String selectedCategoryName = '';
|
||||
var currentLat;
|
||||
var currentLong;
|
||||
|
||||
TextEditingController firstnameController = TextEditingController();
|
||||
TextEditingController lastnameController = TextEditingController();
|
||||
TextEditingController companyNameController = TextEditingController();
|
||||
TextEditingController emailController = TextEditingController();
|
||||
TextEditingController gstinNumberController = TextEditingController();
|
||||
TextEditingController contactNoController = TextEditingController();
|
||||
TextEditingController addressController = TextEditingController();
|
||||
TextEditingController stateController = TextEditingController();
|
||||
TextEditingController cityController = TextEditingController();
|
||||
TextEditingController suburbController = TextEditingController();
|
||||
TextEditingController postcodeController = TextEditingController();
|
||||
|
||||
final searchText = ''.obs;
|
||||
final predictions = <Map<String, dynamic>>[].obs;
|
||||
final selectedPlace = {}.obs;
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
|
||||
AppLocationRepository appLocationRepository = AppLocationRepository();
|
||||
GetPartnersRepository getPartnersRepository = GetPartnersRepository();
|
||||
AppCategoryRepository appCategoryRepository = AppCategoryRepository();
|
||||
CreateTenantUserRepository createTenantUserRepository = CreateTenantUserRepository();
|
||||
|
||||
final GooglePlacesService placesService = GooglePlacesService();
|
||||
|
||||
getAppLocations() async {
|
||||
GetAppLocations? result = await appLocationRepository.getAppLocations();
|
||||
if (result?.code == 200) {
|
||||
locations = result?.details ?? [];
|
||||
shimmer = false;
|
||||
update();
|
||||
} else {
|
||||
Toast.showToast("${result?.message}");
|
||||
}
|
||||
}
|
||||
|
||||
getCurrentLocation() async {
|
||||
resultPosition = await Geolocator.getCurrentPosition(
|
||||
desiredAccuracy: LocationAccuracy.LocationAccuracy.high);
|
||||
currentLat = resultPosition?.latitude.toString();
|
||||
currentLong = resultPosition?.longitude.toString();
|
||||
print('currentLatinlocation $currentLat');
|
||||
print('currentLonglocation $currentLong');
|
||||
getAddressFromLatLongs(double.parse(currentLat), double.parse(currentLong));
|
||||
}
|
||||
|
||||
getAppCategory() async {
|
||||
categoryShimmer = true;
|
||||
update();
|
||||
|
||||
try {
|
||||
final provider = SubCategoryProvider();
|
||||
final List<SubCategory> subCats = await provider.fetchSubCategories();
|
||||
|
||||
final Map<int, AppCategoryDetails> uniqueCats = {};
|
||||
|
||||
for (var sub in subCats) {
|
||||
if (sub.categoryid != null && sub.catgeoryname != null) {
|
||||
uniqueCats[sub.categoryid!] = AppCategoryDetails(
|
||||
categoryid: sub.categoryid,
|
||||
categoryname: sub.catgeoryname,
|
||||
moduleid: sub.moduleid,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
appCategory = uniqueCats.values.toList();
|
||||
logger.i('Loaded ${appCategory.length} categories');
|
||||
|
||||
if (appCategory.isNotEmpty) {
|
||||
catId = appCategory[0].categoryid;
|
||||
catName = appCategory[0].categoryname;
|
||||
moduleIdByCategory = appCategory[0].moduleid;
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e('Error loading categories: $e');
|
||||
Toast.showToast("Failed to load categories");
|
||||
}
|
||||
|
||||
categoryShimmer = false;
|
||||
update();
|
||||
}
|
||||
|
||||
Future<void> getAddressFromLatLongs(double latitudes, double longitudes) async {
|
||||
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
cityController.text = place.locality ?? '';
|
||||
stateController.text = place.administrativeArea ?? '';
|
||||
suburbController.text = '${place.subLocality ?? place.street}';
|
||||
postcodeController.text = place.postalCode ?? '';
|
||||
latitude = latitudes.toString();
|
||||
longitude = longitudes.toString();
|
||||
addressController.text =
|
||||
'${place.street}, ${place.subLocality}, ${place.locality}, ${place.administrativeArea} ${place.subAdministrativeArea}, ${place.country}, ${place.postalCode}.';
|
||||
update();
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
getPartnersInfo(locationId) async {
|
||||
GetPartnersInfo? result = await getPartnersRepository.getPartners(locationId);
|
||||
getPartners = result?.details ?? [];
|
||||
partnerId = getPartners.isNotEmpty ? getPartners[0].partnerid : null;
|
||||
print('getPartnerslengthss${getPartners.length}');
|
||||
print('getpartnerId$partnerId');
|
||||
}
|
||||
|
||||
onSearchTextChanged(String text) async {
|
||||
searchText.value = text;
|
||||
if (text.length > 2) {
|
||||
try {
|
||||
final places = await placesService.getPlacesPredictions(text);
|
||||
predictions.assignAll(places);
|
||||
update();
|
||||
} catch (e) {
|
||||
print('Error fetching predictions: $e');
|
||||
}
|
||||
} else {
|
||||
predictions.clear();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
getPlaceDetails(String placeId, locationAddress) async {
|
||||
try {
|
||||
final details = await placesService.getPlaceDetails(placeId);
|
||||
selectedPlace.value = details;
|
||||
getAddressFromLatLng(
|
||||
selectedPlace['geometry']['location']['lat'],
|
||||
selectedPlace['geometry']['location']['lng'],
|
||||
locationAddress,
|
||||
);
|
||||
} catch (e) {
|
||||
print('Error fetching place details: $e');
|
||||
}
|
||||
}
|
||||
|
||||
getAddressFromLatLng(double latitudes, double longitudes, locationAddress) async {
|
||||
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
cityController.text = place.locality ?? '';
|
||||
stateController.text = place.administrativeArea ?? '';
|
||||
suburbController.text = (place.subLocality?.isNotEmpty == true) ? place.subLocality! : place.street!;
|
||||
postcodeController.text = place.postalCode ?? '';
|
||||
addressController.text = locationAddress;
|
||||
latitude = latitudes.toString();
|
||||
longitude = longitudes.toString();
|
||||
predictions.clear();
|
||||
update();
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
void doSomething() async {
|
||||
Timer(const Duration(seconds: 1), () {
|
||||
profileValidation();
|
||||
});
|
||||
}
|
||||
|
||||
profileValidation() async {
|
||||
if (firstnameController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter Firstname");
|
||||
return;
|
||||
}
|
||||
if (companyNameController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter Companyname");
|
||||
return;
|
||||
}
|
||||
if (emailController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter Email");
|
||||
return;
|
||||
}
|
||||
if (addressController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter Address");
|
||||
return;
|
||||
}
|
||||
if (suburbController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter Suburb");
|
||||
return;
|
||||
}
|
||||
if (cityController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter City");
|
||||
return;
|
||||
}
|
||||
if (stateController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter State");
|
||||
return;
|
||||
}
|
||||
if (postcodeController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter Postcode");
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle image upload if selected
|
||||
if (profileImage != null) {
|
||||
btnController.start();
|
||||
final uploadedUrl = await uploadImageAndSave(File(profileImage!.path));
|
||||
if (uploadedUrl == null) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Image upload failed. Please try again.");
|
||||
return;
|
||||
}
|
||||
url = uploadedUrl;
|
||||
} else {
|
||||
url = null; // Optional: send empty or placeholder
|
||||
}
|
||||
|
||||
// Now safe to create tenant
|
||||
createTenantUser();
|
||||
}
|
||||
|
||||
createTenantUser() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
DateTime now = DateTime.now();
|
||||
|
||||
todayDate = DateFormat("yyyy-MM-dd").format(now);
|
||||
validityDate = DateTime(now.year + 1, now.month, now.day).toString();
|
||||
|
||||
deviceId = prefs.getString('deviceId');
|
||||
|
||||
final request = CreateTenantUser(
|
||||
tenantimage: url, // Now correctly set
|
||||
|
||||
configid: 1,
|
||||
allocationid: 2,
|
||||
roleid: 1,
|
||||
tenantname: companyNameController.text,
|
||||
tenanttype: "D",
|
||||
registrationno: gstinNumberController.text,
|
||||
devicetype: Platform.isAndroid ? "android" : "ios",
|
||||
deviceid: deviceId ?? '',
|
||||
tenanttoken: fcmEntryToken ?? '',
|
||||
companyname: companyNameController.text,
|
||||
firstname: firstnameController.text,
|
||||
primaryemail: emailController.text,
|
||||
primarycontact: contactNoController.text,
|
||||
categoryid: catId,
|
||||
subcategoryid: subCatId,
|
||||
moduleid: 2,
|
||||
address: addressController.text,
|
||||
suburb: suburbController.text,
|
||||
state: stateController.text,
|
||||
city: cityController.text,
|
||||
postcode: postcodeController.text,
|
||||
latitude: latitude,
|
||||
longitude: longitude,
|
||||
applocationid: 1,
|
||||
approved: 0,
|
||||
|
||||
tenantlocations: Tenantlocations(
|
||||
locationid: 0,
|
||||
applocationid: appLocationId,
|
||||
tenantid: 0,
|
||||
moduleid: 2,
|
||||
locationname: companyNameController.text,
|
||||
email: emailController.text,
|
||||
contactno: contactNoController.text,
|
||||
address: addressController.text,
|
||||
suburb: suburbController.text,
|
||||
state: stateController.text,
|
||||
city: cityController.text,
|
||||
postcode: postcodeController.text,
|
||||
latitude: latitude,
|
||||
longitude: longitude,
|
||||
partnerid: partnerId,
|
||||
opentime: "09:00",
|
||||
closetime: "21:00",
|
||||
deliverytype: 0,
|
||||
deliverymins: 60,
|
||||
cancelsecs: 20,
|
||||
),
|
||||
|
||||
tenantsubscriptions: Tenantsubscriptions(
|
||||
subscriptionid: 0,
|
||||
tenantid: 0,
|
||||
transactiondate: todayDate,
|
||||
moduleid: 2,
|
||||
applocationid: appLocationId,
|
||||
categoryid: catId,
|
||||
subcategoryid: subCatId,
|
||||
validitydate: validityDate?.split(' ')[0] ?? '',
|
||||
subscriptionprice: 300.00,
|
||||
quantity: 1,
|
||||
taxamount: 0.00,
|
||||
taxpercent: 18,
|
||||
totalamount: 300.00,
|
||||
paymentstatus: 1,
|
||||
),
|
||||
);
|
||||
|
||||
createTenantUserResult(request);
|
||||
}
|
||||
|
||||
createTenantUserResult(CreateTenantUser data) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
|
||||
CreateTenantUserResponse? result = await createTenantUserRepository.createTenantUser(data);
|
||||
if (result?.status == true) {
|
||||
await Future.wait([
|
||||
prefs.setInt('userId', result?.details?.userid ?? 0),
|
||||
prefs.setInt('configId', result?.details?.configid ?? 0),
|
||||
prefs.setString('userEmail', result?.details?.authname ?? ''),
|
||||
prefs.setInt('authMode', result?.details?.authmode ?? 0),
|
||||
prefs.setInt('roleId', result?.details?.roleid ?? 0),
|
||||
prefs.setString('userFirstname', result?.details?.firstname ?? ''),
|
||||
prefs.setString('userLastname', result?.details?.lastname ?? ''),
|
||||
prefs.setString('userName', result?.details?.fullname ?? ''),
|
||||
prefs.setString('password', result?.details?.password ?? ''),
|
||||
prefs.setString('userEmail', result?.details?.email ?? ''),
|
||||
prefs.setString('tenantContactNo', result?.details?.contactno ?? ''),
|
||||
prefs.setString('userAddress', result?.details?.address ?? ''),
|
||||
prefs.setString('userSuburb', result?.details?.suburb ?? ''),
|
||||
prefs.setString('userCity', result?.details?.city ?? ''),
|
||||
prefs.setString('userState', result?.details?.state ?? ''),
|
||||
prefs.setString('userPostcode', result?.details?.postcode ?? ''),
|
||||
prefs.setString('userFcmToken', result?.details?.userfcmtoken ?? ''),
|
||||
prefs.setInt('userPin', result?.details?.pin ?? 0),
|
||||
prefs.setInt('partnerId', result?.details?.partnerid ?? 0),
|
||||
prefs.setInt('locationId', result?.details?.locationid ?? 0),
|
||||
prefs.setInt('tenantId', result?.details?.tenantid ?? 0),
|
||||
prefs.setString('tenantName', result?.details?.tenantname ?? ''),
|
||||
prefs.setString('tenantAddress', result?.details?.address ?? ''),
|
||||
prefs.setString('tenantSuburb', result?.details?.suburb ?? ''),
|
||||
prefs.setString('tenantCity', result?.details?.city ?? ''),
|
||||
prefs.setString('tenantState', result?.details?.state ?? ''),
|
||||
prefs.setString('tenantPostcode', result?.details?.postcode ?? ''),
|
||||
prefs.setInt('moduleId', result?.details?.moduleid ?? 0),
|
||||
prefs.setString('locationName', result?.details?.locationname ?? ''),
|
||||
prefs.setInt('categoryId', result?.details?.categoryid ?? 0),
|
||||
prefs.setInt('subcategoryId', result?.details?.subcategoryid ?? 0),
|
||||
prefs.setInt('appLocationId', result?.details?.applocationid ?? 0),
|
||||
]);
|
||||
|
||||
logger.i('TenantId From Create Tenant Response: ${prefs.getInt('tenantId')}');
|
||||
|
||||
// Clear fields
|
||||
firstnameController.clear();
|
||||
companyNameController.clear();
|
||||
emailController.clear();
|
||||
addressController.clear();
|
||||
suburbController.clear();
|
||||
cityController.clear();
|
||||
stateController.clear();
|
||||
postcodeController.clear();
|
||||
profileImage = null;
|
||||
url = null;
|
||||
|
||||
btnController.reset();
|
||||
update();
|
||||
await Future.delayed(Duration(milliseconds: 100));
|
||||
Get.to(() => AccountCreatedScreen());
|
||||
} else {
|
||||
btnController.reset();
|
||||
Toast.showToast("${result?.message}");
|
||||
}
|
||||
}
|
||||
|
||||
Future<Position> getLocation() async {
|
||||
LocationPermission permission = await Geolocator.checkPermission();
|
||||
if (permission == LocationPermission.denied) {
|
||||
permission = await Geolocator.requestPermission();
|
||||
if (permission == LocationPermission.denied) {
|
||||
return Future.error('Location permissions are denied');
|
||||
}
|
||||
}
|
||||
if (permission == LocationPermission.deniedForever) {
|
||||
await Geolocator.openLocationSettings();
|
||||
return Future.error('Location permissions are permanently denied');
|
||||
}
|
||||
Position position = await Geolocator.getCurrentPosition();
|
||||
await getAddressFromLatLongs(position.latitude, position.longitude);
|
||||
logger.i(position);
|
||||
return position;
|
||||
}
|
||||
|
||||
XFile? profileImage;
|
||||
final _picker = ImagePicker();
|
||||
RxString uploadedFileUrl = ''.obs;
|
||||
|
||||
// Only pick image — upload later
|
||||
Future getProfileImage() async {
|
||||
final XFile? selectedImage = await _picker.pickImage(source: ImageSource.gallery);
|
||||
if (selectedImage != null) {
|
||||
profileImage = selectedImage;
|
||||
update();
|
||||
} else {
|
||||
Toast.showToast('Image Not Selected');
|
||||
}
|
||||
}
|
||||
|
||||
// Upload image and return public URL
|
||||
Future<String?> uploadImageAndSave(File selectedImage) async {
|
||||
try {
|
||||
var rng = Random();
|
||||
const String region = "sgp1";
|
||||
const String accessKey = "DO00NQER7N2FRYZAB2HR";
|
||||
const String secretKey = "nMDewX25IBEu1FM5dakK+v28/WbW3TzBAwq913+dxP0";
|
||||
const String bucketName = "nearle";
|
||||
const String folderName = "deals";
|
||||
|
||||
String fileName = 'profile-${rng.nextInt(1000)}-1234.jpg';
|
||||
String endpointUrl = "https://$bucketName.$region.digitaloceanspaces.com/$folderName/$fileName";
|
||||
|
||||
final minio = Minio(
|
||||
endPoint: '$region.digitaloceanspaces.com', // ✅ FIXED HERE
|
||||
accessKey: accessKey,
|
||||
secretKey: secretKey,
|
||||
region: region,
|
||||
useSSL: true,
|
||||
);
|
||||
|
||||
await minio.fPutObject(
|
||||
bucketName,
|
||||
'$folderName/$fileName',
|
||||
selectedImage.path,
|
||||
metadata: {
|
||||
'Content-Type': 'image/jpeg',
|
||||
'x-amz-acl': 'public-read',
|
||||
},
|
||||
);
|
||||
|
||||
print("File uploaded successfully: $endpointUrl");
|
||||
return endpointUrl;
|
||||
} catch (e) {
|
||||
Get.snackbar("Error", "Image upload failed: $e");
|
||||
print("Upload error: $e");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
getFcmToken();
|
||||
getLocation();
|
||||
getSubCategories();
|
||||
getAppCategory();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
firstnameController.dispose();
|
||||
lastnameController.dispose();
|
||||
companyNameController.dispose();
|
||||
emailController.dispose();
|
||||
gstinNumberController.dispose();
|
||||
contactNoController.dispose();
|
||||
addressController.dispose();
|
||||
stateController.dispose();
|
||||
cityController.dispose();
|
||||
suburbController.dispose();
|
||||
postcodeController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
class SubCategoryService {
|
||||
final String apiUrl = "https://fiesta.nearle.app/live/api/v1/mob/utils/getsubcategories";
|
||||
|
||||
Future<GetSubCategoriesResponse?> fetchSubCategories() async {
|
||||
try {
|
||||
final response = await http.get(Uri.parse(apiUrl));
|
||||
if (response.statusCode == 200) {
|
||||
final jsonData = json.decode(response.body);
|
||||
print(response.body);
|
||||
return GetSubCategoriesResponse.fromJson(jsonData);
|
||||
} else {
|
||||
print("Failed to load subcategories: ${response.statusCode}");
|
||||
}
|
||||
} catch (e) {
|
||||
print("Error fetching subcategories: $e");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
1277
lib/Controller/Createorder/Createordercontroller.dart
Normal file
1277
lib/Controller/Createorder/Createordercontroller.dart
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,218 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../../Globalwidgets/Googleplaces/Googleplaces.dart';
|
||||
import '../../../../Helper/location_service.dart';
|
||||
|
||||
|
||||
|
||||
class DropGoogleMapsController extends GetxController{
|
||||
|
||||
|
||||
String? toAddress;
|
||||
|
||||
|
||||
|
||||
String? toLatitude;
|
||||
String? toLongitude;
|
||||
|
||||
|
||||
String? country;
|
||||
String? dialCode;
|
||||
String? countryCode;
|
||||
String? googleApiKey;
|
||||
String? initialCountry;
|
||||
|
||||
|
||||
bool? isSuburbTrue = false;
|
||||
bool? isCity = false;
|
||||
|
||||
List autoCompleteResult = [];
|
||||
|
||||
|
||||
List<LatLng> latlng = [];
|
||||
|
||||
var address;
|
||||
|
||||
static LatLng? center;
|
||||
static double? currentLatitude;
|
||||
static double? currentLongitude;
|
||||
|
||||
Set<Marker>markers = {};
|
||||
Set<Polyline>polyline={};
|
||||
|
||||
|
||||
//Autocomplete
|
||||
|
||||
final pickupSearchText = ''.obs;
|
||||
final dropSearchText = ''.obs;
|
||||
final pickupPredictions = <Map<String, dynamic>>[].obs;
|
||||
final pickupSelectedPlace = {}.obs;
|
||||
final dropPredictions = <Map<String, dynamic>>[].obs;
|
||||
final dropSelectedPlace = {}.obs;
|
||||
final GooglePlacesService placesService = GooglePlacesService();
|
||||
|
||||
|
||||
CameraPosition? kGooglePlex;
|
||||
|
||||
Completer<GoogleMapController> controllers = Completer();
|
||||
|
||||
late GoogleMapController mapController;
|
||||
|
||||
|
||||
// LocationService locationService = LocationService();
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
|
||||
TextEditingController dropAddressController = TextEditingController();
|
||||
TextEditingController dropStateController = TextEditingController();
|
||||
TextEditingController dropCityController = TextEditingController();
|
||||
TextEditingController dropSuburbController = TextEditingController();
|
||||
TextEditingController dropPostcodeController = TextEditingController();
|
||||
|
||||
|
||||
Future<void> goToThePosition(cameraPosition) async {
|
||||
final GoogleMapController controller = await controllers.future;
|
||||
controller.animateCamera(CameraUpdate.newCameraPosition(cameraPosition));
|
||||
}
|
||||
|
||||
onSearchDropTextChanged(String text) async {
|
||||
dropSearchText.value = text;
|
||||
if (text.length > 2) {
|
||||
try {
|
||||
final places = await placesService.getPlacesPredictions(text);
|
||||
// final places = await autocompletePlaces(text);
|
||||
dropPredictions.assignAll(places);
|
||||
update();
|
||||
|
||||
} catch (e) {
|
||||
print('Error fetching predictions: $e');
|
||||
}
|
||||
} else {
|
||||
dropPredictions.clear();
|
||||
update();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
getDropPlaceDetails(String placeId,locationAddress) async {
|
||||
try {
|
||||
final details = await placesService.getPlaceDetails(placeId);
|
||||
dropSelectedPlace.value = details;
|
||||
print('getDropPlaceDetailslatitude ${dropSelectedPlace['geometry']['location']['lat']}');
|
||||
print('getDropPlaceDetailslongitude ${dropSelectedPlace['geometry']['location']['lng']}');
|
||||
getDropAddressFromLatLng(dropSelectedPlace['geometry']['location']['lat'],dropSelectedPlace['geometry']['location']['lng'],locationAddress);
|
||||
} catch (e) {
|
||||
print('Error fetching place details: $e');
|
||||
}
|
||||
}
|
||||
|
||||
getDropAddressFromLatLng(double latitudes, double longitudes,locationAddress) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
dropCityController.text = '${place.locality}' ?? '';
|
||||
dropStateController.text = '${place.administrativeArea}' ?? '';
|
||||
dropSuburbController.text = '${place.subLocality!.isNotEmpty?place.subLocality:place.street}';
|
||||
dropPostcodeController.text ='${place.postalCode}' ?? '';
|
||||
dropAddressController.text = locationAddress ?? '';
|
||||
toAddress = dropAddressController.text;
|
||||
toLatitude = double.parse(latitudes.toString()).toString();
|
||||
toLongitude = double.parse(longitudes.toString()).toString();
|
||||
|
||||
kGooglePlex = CameraPosition(
|
||||
target: LatLng(double.parse(toLatitude.toString()), double.parse(toLongitude.toString())),
|
||||
zoom: 14.4746,
|
||||
);
|
||||
goToThePosition(kGooglePlex);
|
||||
dropPredictions.clear();
|
||||
update();
|
||||
|
||||
|
||||
print('latitude $toLatitude');
|
||||
print('longitude $toLongitude');
|
||||
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
getCountry() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
|
||||
dialCode = prefs.getString('dialCode') ?? '';
|
||||
print(dialCode);
|
||||
googleApiKey = prefs.getString('googleApi');
|
||||
initialCountry = prefs.getString('location_Country');
|
||||
markers.add(Marker(
|
||||
markerId: MarkerId('Mylocation'),
|
||||
infoWindow: InfoWindow(title: 'My Location'),
|
||||
draggable: true,
|
||||
onDragEnd: (latLong) async {
|
||||
print('latLongDrag$latLong');
|
||||
center = latLong;
|
||||
getAddressFromLatLong(
|
||||
double.parse(latLong.latitude.toString()), double.parse(latLong.longitude.toString()));
|
||||
print("addressonDragEnd$address");
|
||||
update();
|
||||
},
|
||||
onDrag: (latLong) {
|
||||
center = latLong;
|
||||
},
|
||||
icon: BitmapDescriptor.defaultMarker,
|
||||
position: center!,
|
||||
));
|
||||
getAddressFromLatLong(
|
||||
double.parse(currentLatitude.toString()), double.parse(currentLongitude.toString()));
|
||||
// number = PhoneNumber(isoCode: initialCountry);
|
||||
update();
|
||||
print('$googleApiKey google');
|
||||
|
||||
// print(number);
|
||||
}
|
||||
|
||||
|
||||
Future<void> getAddressFromLatLong(double latitudes, double longitudes) async {
|
||||
print('getCurrentLocationAddressssssss');
|
||||
|
||||
await placemarkFromCoordinates(
|
||||
latitudes, longitudes)
|
||||
.then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
dropCityController.text = place.locality ?? '';
|
||||
dropStateController.text = place.administrativeArea ?? '';
|
||||
dropSuburbController.text = '${place.subLocality??place.street}' ;
|
||||
dropPostcodeController.text = place.postalCode ?? '';
|
||||
toLatitude = double.parse(latitudes.toString()).toString();
|
||||
toLongitude = double.parse(longitudes.toString()).toString();
|
||||
print('latitudegetAddresstoLatitude$toLatitude');
|
||||
print('longitudegetAddresstoLongitude$toLongitude');
|
||||
dropAddressController.text = '${place.street}, ${place.subLocality},${place.locality},${place.administrativeArea} ${place.subAdministrativeArea},${place.country},${place.postalCode}.';
|
||||
|
||||
print('dropAddressControllergetAddresstoLongitude ${dropAddressController.text}');
|
||||
update();
|
||||
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,215 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../../Globalwidgets/Googleplaces/Googleplaces.dart';
|
||||
import '../../../../Helper/location_service.dart';
|
||||
|
||||
|
||||
|
||||
class PickupGoogleMapsController extends GetxController{
|
||||
|
||||
|
||||
String? fromAddress;
|
||||
|
||||
|
||||
|
||||
String? fromLatitude;
|
||||
String? fromLongitude;
|
||||
|
||||
|
||||
String? country;
|
||||
String? dialCode;
|
||||
String? countryCode;
|
||||
String? googleApiKey;
|
||||
String? initialCountry;
|
||||
|
||||
|
||||
bool? isSuburbTrue = false;
|
||||
bool? isCity = false;
|
||||
|
||||
List autoCompleteResult = [];
|
||||
|
||||
|
||||
List<LatLng> latlng = [];
|
||||
|
||||
var address;
|
||||
|
||||
static LatLng? center;
|
||||
static double? currentLatitude;
|
||||
static double? currentLongitude;
|
||||
|
||||
Set<Marker>markers = {};
|
||||
Set<Polyline>polyline={};
|
||||
|
||||
|
||||
//Autocomplete
|
||||
|
||||
final pickupSearchText = ''.obs;
|
||||
final pickupPredictions = <Map<String, dynamic>>[].obs;
|
||||
final pickupSelectedPlace = {}.obs;
|
||||
final GooglePlacesService placesService = GooglePlacesService();
|
||||
|
||||
|
||||
CameraPosition? kGooglePlex;
|
||||
|
||||
Completer<GoogleMapController> controllers = Completer();
|
||||
|
||||
late GoogleMapController mapController;
|
||||
|
||||
|
||||
// LocationService locationService = LocationService();
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
|
||||
TextEditingController pickupAddressController = TextEditingController();
|
||||
TextEditingController pickupStateController = TextEditingController();
|
||||
TextEditingController pickupCityController = TextEditingController();
|
||||
TextEditingController pickupSuburbController = TextEditingController();
|
||||
TextEditingController pickupPostcodeController = TextEditingController();
|
||||
|
||||
|
||||
Future<void> goToThePosition(cameraPosition) async {
|
||||
final GoogleMapController controller = await controllers.future;
|
||||
controller.animateCamera(CameraUpdate.newCameraPosition(cameraPosition));
|
||||
}
|
||||
|
||||
onSearchPickupTextChanged(String text) async {
|
||||
pickupSearchText.value = text;
|
||||
if (text.length > 2) {
|
||||
try {
|
||||
final places = await placesService.getPlacesPredictions(text);
|
||||
// final places = await autocompletePlaces(text);
|
||||
pickupPredictions.assignAll(places);
|
||||
update();
|
||||
|
||||
} catch (e) {
|
||||
print('Error fetching predictions: $e');
|
||||
}
|
||||
} else {
|
||||
pickupPredictions.clear();
|
||||
update();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
getPickupPlaceDetails(String placeId,locationAddress) async {
|
||||
try {
|
||||
final details = await placesService.getPlaceDetails(placeId);
|
||||
pickupSelectedPlace.value = details;
|
||||
print('getDropPlaceDetailslatitude ${pickupSelectedPlace['geometry']['location']['lat']}');
|
||||
print('getDropPlaceDetailslongitude ${pickupSelectedPlace['geometry']['location']['lng']}');
|
||||
getPickupAddressFromLatLng(pickupSelectedPlace['geometry']['location']['lat'],pickupSelectedPlace['geometry']['location']['lng'],locationAddress);
|
||||
} catch (e) {
|
||||
print('Error fetching place details: $e');
|
||||
}
|
||||
}
|
||||
|
||||
getPickupAddressFromLatLng(double latitudes, double longitudes,locationAddress) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
pickupCityController.text = '${place.locality}' ?? '';
|
||||
pickupStateController.text = '${place.administrativeArea}' ?? '';
|
||||
pickupSuburbController.text = '${place.subLocality!.isNotEmpty?place.subLocality:place.street}';
|
||||
pickupPostcodeController.text ='${place.postalCode}' ?? '';
|
||||
pickupAddressController.text = locationAddress ?? '';
|
||||
fromAddress = pickupAddressController.text;
|
||||
fromLatitude = double.parse(latitudes.toString()).toString();
|
||||
fromLongitude = double.parse(longitudes.toString()).toString();
|
||||
|
||||
kGooglePlex = CameraPosition(
|
||||
target: LatLng(double.parse(fromLatitude.toString()), double.parse(fromLongitude.toString())),
|
||||
zoom: 14.4746,
|
||||
);
|
||||
goToThePosition(kGooglePlex);
|
||||
pickupPredictions.clear();
|
||||
update();
|
||||
|
||||
|
||||
print('latitude $fromLatitude');
|
||||
print('longitude $fromLongitude');
|
||||
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
getCountry() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
|
||||
dialCode = prefs.getString('dialCode') ?? '';
|
||||
print(dialCode);
|
||||
googleApiKey = prefs.getString('googleApi');
|
||||
initialCountry = prefs.getString('location_Country');
|
||||
markers.add(Marker(
|
||||
markerId: MarkerId('Mylocation'),
|
||||
infoWindow: InfoWindow(title: 'My Location'),
|
||||
draggable: true,
|
||||
onDragEnd: (latLong) async {
|
||||
print('latLongDrag$latLong');
|
||||
center = latLong;
|
||||
getAddressFromLatLong(
|
||||
double.parse(latLong.latitude.toString()), double.parse(latLong.longitude.toString()));
|
||||
print("addressonDragEnd$address");
|
||||
update();
|
||||
},
|
||||
onDrag: (latLong) {
|
||||
center = latLong;
|
||||
},
|
||||
icon: BitmapDescriptor.defaultMarker,
|
||||
position: center!,
|
||||
));
|
||||
getAddressFromLatLong(
|
||||
double.parse(currentLatitude.toString()), double.parse(currentLongitude.toString()));
|
||||
// number = PhoneNumber(isoCode: initialCountry);
|
||||
update();
|
||||
print('$googleApiKey google');
|
||||
|
||||
// print(number);
|
||||
}
|
||||
|
||||
|
||||
Future<void> getAddressFromLatLong(double latitudes, double longitudes) async {
|
||||
print('getCurrentLocationAddressssssss');
|
||||
|
||||
await placemarkFromCoordinates(
|
||||
latitudes, longitudes)
|
||||
.then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
pickupCityController.text = place.locality ?? '';
|
||||
pickupStateController.text = place.administrativeArea ?? '';
|
||||
pickupSuburbController.text = '${place.subLocality??place.street}' ;
|
||||
pickupPostcodeController.text = place.postalCode ?? '';
|
||||
fromLatitude = double.parse(latitudes.toString()).toString();
|
||||
fromLongitude = double.parse(longitudes.toString()).toString();
|
||||
print('latitudegetAddressfromLatitude $fromLatitude');
|
||||
print('longitudegetAddressfromLongitude $fromLongitude');
|
||||
pickupAddressController.text = '${place.street}, ${place.subLocality},${place.locality},${place.administrativeArea} ${place.subAdministrativeArea},${place.country},${place.postalCode}.';
|
||||
|
||||
print('dropAddressControllergetAddresstoLongitude ${pickupAddressController.text}');
|
||||
update();
|
||||
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
}
|
||||
43
lib/Controller/Customers/Customercontroller.dart
Normal file
43
lib/Controller/Customers/Customercontroller.dart
Normal file
@@ -0,0 +1,43 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../Data/Repository/Customers/getCustomerbytenantidrepository.dart';
|
||||
import '../../Model/Response/Customers/GetCustomerById/GetCustomerByTenantId.dart';
|
||||
|
||||
class CustomerController extends GetxController{
|
||||
|
||||
RxBool progress = true.obs;
|
||||
|
||||
|
||||
List <GetCustomerByTenantIdDetails> getCustomerBytenantId =[];
|
||||
|
||||
GetCustomersByTenantIdRepository getCustomersByNumberTenantIdRepository = GetCustomersByTenantIdRepository();
|
||||
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
getCustomerByTenantId()async {
|
||||
GetCustomerByTenantId? result = await getCustomersByNumberTenantIdRepository.getCustomerByTenantId();
|
||||
getCustomerByTenantIdResult(result!);
|
||||
}
|
||||
|
||||
RxBool hasLoadedCustomerOnce = false.obs;
|
||||
|
||||
getCustomerByTenantIdResult(GetCustomerByTenantId data) {
|
||||
if (!hasLoadedCustomerOnce.value) {
|
||||
progress.value = true;
|
||||
update();
|
||||
}
|
||||
|
||||
getCustomerBytenantId = data.details ?? [];
|
||||
progress.value = false;
|
||||
hasLoadedCustomerOnce.value = true;
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
236
lib/Controller/Dashboard/Dashboardcontroller.dart
Normal file
236
lib/Controller/Dashboard/Dashboardcontroller.dart
Normal file
@@ -0,0 +1,236 @@
|
||||
import 'package:flutter/material.dart' hide Notification;
|
||||
import 'package:get/get.dart' hide Response;
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../Data/Repository/Notification/Notificationrepository.dart';
|
||||
import '../../Data/Repository/Rider/get_rider_repo.dart';
|
||||
import '../../Data/Repository/Summary/ordersrepository.dart';
|
||||
import '../../Data/Repository/Tenants/Tenantsrepository.dart';
|
||||
import '../../Data/Repository/update_delivery/update_delivery.dart';
|
||||
import '../../Helper/Constants/Colorconstants.dart';
|
||||
import '../../Helper/Logger.dart';
|
||||
import '../../Helper/customDio.dart';
|
||||
import '../../Helper/toast.dart';
|
||||
import '../../Model/Request/Notification/Notification_request_rider.dart';
|
||||
import '../../Model/Request/Notification/Notificationrequest.dart';
|
||||
import '../../Model/Request/update_delivery/update_delivery.dart';
|
||||
import '../../Model/Response/Notification/Notificationresponse.dart';
|
||||
import '../../Model/Response/Riders/get_rider_model.dart';
|
||||
import '../../Model/Response/Summary/Getsummarysresponse.dart';
|
||||
import '../../Model/Response/Tenants/Tenantinforesponse.dart';
|
||||
import '../../Model/Response/update_delivery_response/update_delivery_response.dart';
|
||||
import '../../View/Home/Homeview.dart';
|
||||
|
||||
class DashboardController extends GetxController with SingleGetTickerProviderMixin{
|
||||
|
||||
String? userName;
|
||||
String? businessName;
|
||||
String? businessLocation;
|
||||
String? adminToken;
|
||||
String? currentTime;
|
||||
String? notificationDate;
|
||||
TenantDetails? tenantInfo;
|
||||
int tenantId = 0;
|
||||
int moduleId = 0;
|
||||
int locationId = 0;
|
||||
int tabIndex = 0;
|
||||
int? approved;
|
||||
|
||||
var orderId;
|
||||
var orderHeaderId;
|
||||
var userId;
|
||||
|
||||
DateTime? now;
|
||||
|
||||
late TabController tabController;
|
||||
|
||||
OrderSummaryRepository orderSummaryRepository = OrderSummaryRepository();
|
||||
TenantRepository tenantRepository = TenantRepository();
|
||||
|
||||
List <GetRiderDetails> riderDetails = [];
|
||||
RidersRepository ridersRepository = RidersRepository();
|
||||
|
||||
|
||||
final List<Tab> tabs = <Tab>[
|
||||
Tab(
|
||||
text: "Placed",
|
||||
icon: Icon(Icons.access_time_filled_outlined,color: ColorConstants.primaryColor,size: 25,),
|
||||
),
|
||||
Tab(
|
||||
text: "OnGoing",
|
||||
icon: Icon(Icons.rotate_right,color: ColorConstants.primaryColor,size: 25,),
|
||||
),
|
||||
Tab(
|
||||
text: "Cancelled",
|
||||
icon: Icon(Icons.cancel,color: ColorConstants.primaryColor,size: 25,),
|
||||
),
|
||||
Tab(
|
||||
text: "Completed",
|
||||
icon: Icon(Icons.check_circle,color: ColorConstants.primaryColor,size: 25,),
|
||||
),
|
||||
|
||||
|
||||
];
|
||||
|
||||
getDetails() async{
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
// userName = prefs.getString('userName')??'';
|
||||
businessName = prefs.getString('tenantName')??'';
|
||||
businessLocation = prefs.getString('locationName')??'';
|
||||
logger.i('Business Name prefs: ${businessName}');
|
||||
logger.i('Business Locations prefs: ${businessLocation}');
|
||||
update();
|
||||
}
|
||||
|
||||
getTenantInfo() async{
|
||||
TenantInfo? result = await tenantRepository.getTenantInfo();
|
||||
tenantInfo = result?.details;
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
prefs.setString('tenantName', tenantInfo?.tenantname ?? '');
|
||||
prefs.setString('locationName', tenantInfo?.applocation ?? '');
|
||||
prefs.setInt('tenantId', tenantInfo?.tenantid ?? 0);
|
||||
prefs.setInt('categoryId', tenantInfo?.categoryid ?? 0);
|
||||
prefs.setInt('locationId', result?.details?.locationid ?? 0);
|
||||
logger.i('Business Locations : ${businessLocation}');
|
||||
approved = result?.details?.approved;
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
getOrders()async{
|
||||
|
||||
}
|
||||
|
||||
|
||||
getRiders(appLocationId)async{
|
||||
GetRiderPoolsModel? result = await ridersRepository.getRiders(appLocationId);
|
||||
getRidersResult(result!);
|
||||
}
|
||||
|
||||
bool isSelectAll = false;
|
||||
List riderFcmToken = [];
|
||||
int? riderUserIdList;
|
||||
int? partnerId;
|
||||
int? shiftId;
|
||||
String? riderStatus;
|
||||
RxBool shimmer = true.obs;
|
||||
String? assignTime;
|
||||
bool isIdle = false;
|
||||
|
||||
|
||||
getRidersResult(GetRiderPoolsModel data){
|
||||
if (data.code == 200) {
|
||||
logger.i('RiderPool ${data.details}');
|
||||
if(data.details!.isNotEmpty) {
|
||||
for (int i = 0; i < data.details!.length; i++) {
|
||||
var index = riderDetails.indexWhere(
|
||||
(element) =>
|
||||
element.userid == data.details![i].userid);
|
||||
if (index == -1) {
|
||||
riderDetails.add(data.details![i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
logger.i('riderDetails $riderDetails');
|
||||
if (isSelectAll == true) {
|
||||
riderFcmToken.clear();
|
||||
riderUserIdList = 0;
|
||||
partnerId = 0;
|
||||
shiftId =0;
|
||||
riderStatus = '';
|
||||
|
||||
for (var riderDetail in riderDetails) {
|
||||
riderFcmToken.add(riderDetail.userfcmtoken);
|
||||
riderUserIdList = riderDetail.userid!;
|
||||
partnerId = riderDetail.partnerid!;
|
||||
shiftId = riderDetail.shiftid!;
|
||||
riderStatus = riderDetail.status;
|
||||
print('shiftId $shiftId');
|
||||
}
|
||||
} else {
|
||||
riderFcmToken.clear();
|
||||
riderUserIdList = 0;
|
||||
partnerId = 0;
|
||||
shiftId =0;
|
||||
riderStatus = '';
|
||||
}
|
||||
logger.i('riderFcmToken $riderFcmToken');
|
||||
logger.i('partnerIdinprint $partnerId');
|
||||
logger.i('shiftId $shiftId');
|
||||
logger.i('riderStatus $riderStatus');
|
||||
shimmer.value = false;
|
||||
update();
|
||||
}
|
||||
else {
|
||||
shimmer.value = false;
|
||||
update();
|
||||
Toast.showToast("${data.message}");
|
||||
}
|
||||
}
|
||||
|
||||
updateDelivery(DeliveriesDetails data)async{
|
||||
assignTime = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now());
|
||||
|
||||
updateDeliveryResult(
|
||||
UpdateDeliveryRequest(
|
||||
deliveryid: data.deliveryid,
|
||||
userid: riderUserIdList,
|
||||
orderheaderid: data.orderheaderid,
|
||||
assigntime:assignTime ,
|
||||
orderstatus: 'pending',
|
||||
),
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
UpdateDeliveryRepository updateDeliveryRepository = UpdateDeliveryRepository();
|
||||
|
||||
updateDeliveryResult(UpdateDeliveryRequest data)async{
|
||||
UpdateDeliveryResponse? result = await updateDeliveryRepository.updateDelivery(data);
|
||||
if(result?.status == true){
|
||||
Get.to(()=>HomeView(selectedIndex: 1));
|
||||
// sendRiderNotification();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sendRiderNotification() async {
|
||||
sendRiderNotificationResult(
|
||||
RiderNotificationRequest(
|
||||
notification: NotificationRider(
|
||||
title: "NearleXpress",
|
||||
image: "",
|
||||
body: "Order have been placed for delivery",
|
||||
sound: "ring",
|
||||
),
|
||||
token: riderFcmToken.join(','),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
final NotificationRepository notificationRepository = NotificationRepository();
|
||||
|
||||
//
|
||||
sendRiderNotificationResult(RiderNotificationRequest data)async{
|
||||
NotificationResponse? result = await notificationRepository.notifyRider(data);
|
||||
if(result?.status == true){
|
||||
Toast.showToast('Notified Rider Successfully');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
tabController = TabController(vsync: this, length: tabs.length);
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
getDetails(); // Runs after first frame is rendered
|
||||
});
|
||||
logger.i('controller Init state called : ');
|
||||
//getTenantInfo();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../../Helper/Constants/Colorconstants.dart';
|
||||
|
||||
class DropCustomerTabController extends GetxController with SingleGetTickerProviderMixin{
|
||||
|
||||
|
||||
late TabController tabController;
|
||||
int tabIndex = 0;
|
||||
|
||||
final List<Tab> tabs = <Tab>[
|
||||
Tab(
|
||||
icon:Icon(
|
||||
Icons.person,
|
||||
color: ColorConstants.primaryColor,
|
||||
size: 25,
|
||||
),
|
||||
text: "From Customer",
|
||||
),
|
||||
// // Tab(text: "Yesterday",),
|
||||
Tab(
|
||||
text: "From Business",
|
||||
icon: Icon(
|
||||
Icons.business,
|
||||
color: ColorConstants.primaryColor,
|
||||
size: 25,
|
||||
),
|
||||
),
|
||||
|
||||
];
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
tabController = TabController(vsync: this, length: tabs.length);
|
||||
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,239 @@
|
||||
import 'package:country_currency_pickers/country.dart';
|
||||
import 'package:country_currency_pickers/utils/utils.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'dart:io';
|
||||
import '../../../../../../../Data/Repository/Createcustomer/Createcustomerrepository.dart';
|
||||
import '../../../../../../../Globalwidgets/Googleplaces/Googleplaces.dart';
|
||||
import '../../../../../../../Helper/Locationservice/Locationservice.dart';
|
||||
import '../../../../../../../Helper/location_service.dart';
|
||||
import '../../../../../../../Helper/toast.dart';
|
||||
import '../../../../../../../Model/Request/Createcustomer/Createcustomerrequest.dart';
|
||||
import '../../../../../../../Model/Response/Createcustomer/Createcustomerresponse.dart';
|
||||
import '../../../../../../../View/Createorder/Createorderview.dart';
|
||||
import '../../../../../../Createorder/Createordercontroller.dart';
|
||||
import '../../Tenantcustomercontroller.dart';
|
||||
|
||||
|
||||
class AddDropCustomerController extends GetxController{
|
||||
|
||||
String? latitude;
|
||||
String? longitude;
|
||||
|
||||
String? suburb;
|
||||
String? city;
|
||||
String? state;
|
||||
String? postCode;
|
||||
|
||||
int? tenantId;
|
||||
int? appLocationId;
|
||||
|
||||
|
||||
|
||||
bool progress = true;
|
||||
|
||||
TextEditingController customerFirstNameController = TextEditingController();
|
||||
TextEditingController customerLastNameController = TextEditingController();
|
||||
TextEditingController customerPhoneController = TextEditingController();
|
||||
TextEditingController addressController = TextEditingController();
|
||||
TextEditingController doorNoController = TextEditingController();
|
||||
TextEditingController landMarkController = TextEditingController();
|
||||
|
||||
|
||||
Position? resultPosition;
|
||||
|
||||
final searchText = ''.obs;
|
||||
final predictions = <Map<String, dynamic>>[].obs;
|
||||
final selectedPlace = {}.obs;
|
||||
|
||||
Country selectedDialogCountry = CountryPickerUtils.getCountryByIsoCode('IN');
|
||||
|
||||
final GooglePlacesService placesService = GooglePlacesService();
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
|
||||
CreateCustomerRepository createCustomerRepository = CreateCustomerRepository();
|
||||
|
||||
TenantDropCustomerController tenantDropCustomerController = Get.put(TenantDropCustomerController());
|
||||
CreateOrderController createOrderController = Get.put(CreateOrderController());
|
||||
|
||||
|
||||
|
||||
LocationService locationService = LocationService();
|
||||
|
||||
|
||||
|
||||
getLocation() async {
|
||||
resultPosition = await locationService.getLocation();
|
||||
progress =false;
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
void onSearchTextChanged(String text) async {
|
||||
searchText.value = text;
|
||||
if (text.length > 2) {
|
||||
try {
|
||||
final places = await placesService.getPlacesPredictions(text);
|
||||
predictions.assignAll(places);
|
||||
update();
|
||||
} catch (e) {
|
||||
print('Error fetching predictions: $e');
|
||||
}
|
||||
} else {
|
||||
predictions.clear();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getPlaceDetails(String placeId,locationAddress) async {
|
||||
try {
|
||||
final details = await placesService.getPlaceDetails(placeId);
|
||||
selectedPlace.value = details;
|
||||
print('getPlaceDetailslatitude ${selectedPlace['geometry']['location']['lat']}');
|
||||
print('getPlaceDetailslongitude ${selectedPlace['geometry']['location']['lng']}');
|
||||
getAddressFromLatLng(selectedPlace['geometry']['location']['lat'],selectedPlace['geometry']['location']['lng'],locationAddress);
|
||||
} catch (e) {
|
||||
print('Error fetching place details: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getAddressFromLatLng(double latitudes, double longitudes,address) async {
|
||||
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
latitude = double.parse(latitudes.toString()).toString();
|
||||
longitude = double.parse(longitudes.toString()).toString();
|
||||
city = '${place.locality}';
|
||||
state = '${place.administrativeArea}';
|
||||
suburb = place.subLocality!.isNotEmpty?place.subLocality:place.street;
|
||||
postCode = '${place.postalCode}';
|
||||
addressController.text = address;
|
||||
predictions.clear();
|
||||
update();
|
||||
print('latitude $latitude');
|
||||
print('longitude $longitude');
|
||||
print('eng $suburb');
|
||||
print('city $city');
|
||||
print('state $state');
|
||||
print('postalCode $postCode');
|
||||
print('subAdministrativeArea ${place.subAdministrativeArea}');
|
||||
print('subThoroughfare ${place.subThoroughfare}');
|
||||
print('currentLocationAddress ${addressController.text}');
|
||||
print('streetss ${place.street}');
|
||||
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
describeValidation(){
|
||||
if(customerFirstNameController.text.isEmpty){
|
||||
btnController.reset();
|
||||
Toast.showToast("Please enter your first name");
|
||||
}
|
||||
// else if(customerLastNameController.text.isEmpty){
|
||||
// Toast.showToast("Please enter your last name");
|
||||
// }
|
||||
else if(customerPhoneController.text.isEmpty){
|
||||
btnController.reset();
|
||||
|
||||
Toast.showToast("Please enter your phone number");
|
||||
}else if(addressController.text.isEmpty){
|
||||
btnController.reset();
|
||||
|
||||
Toast.showToast("Please enter your address");
|
||||
}
|
||||
else if(latitude == null &&longitude == null){
|
||||
btnController.reset();
|
||||
Toast.showToast("Please enter correct address");
|
||||
}
|
||||
// else if(doorNoController.text.isEmpty){
|
||||
// Toast.showToast("Please enter your door number");
|
||||
// }
|
||||
// else if(landMarkController.text.isEmpty){
|
||||
// Toast.showToast("Please enter your landmark");
|
||||
// }
|
||||
else{
|
||||
btnController.success();
|
||||
createCustomer();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
createCustomer() async{
|
||||
var createdate = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now());
|
||||
var updatedate = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now());
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
appLocationId = prefs.getInt('appLocationId');
|
||||
|
||||
print('tenantIdcreateCustomer$tenantId');
|
||||
String contactNo = customerPhoneController.text;
|
||||
print("contact............$contactNo");
|
||||
create(
|
||||
CreateCustomers(
|
||||
customerid:0,
|
||||
configid:1,
|
||||
tenantid: tenantId,
|
||||
firstname:customerFirstNameController.text,
|
||||
applocationid:appLocationId,
|
||||
profileimage:"",
|
||||
dialcode:"+91",
|
||||
contactno:customerPhoneController.text,
|
||||
devicetype:Platform.operatingSystem,
|
||||
// deviceid:"${prefs.getString('deviceId')}",
|
||||
// customertoken:"$fcmEntryToken",
|
||||
address:addressController.text,
|
||||
suburb:suburb,
|
||||
city:city,
|
||||
state:state,
|
||||
postcode:postCode,
|
||||
landmark:landMarkController.text,
|
||||
doorno:doorNoController.text,
|
||||
latitude:latitude,
|
||||
longitude:longitude,
|
||||
primaryaddress: 1,
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
create(CreateCustomers data )async{
|
||||
CreateCustomerResponse? result = await createCustomerRepository.createCustomer(data);
|
||||
|
||||
if(result?.status == true){
|
||||
customerFirstNameController.clear();
|
||||
customerLastNameController.clear();
|
||||
customerPhoneController.clear();
|
||||
addressController.clear();
|
||||
doorNoController.clear();
|
||||
landMarkController.clear();
|
||||
tenantDropCustomerController.getCustomerByTenantId();
|
||||
btnController.reset();
|
||||
createOrderController.dropCustomerId = result?.details?.customerid;
|
||||
createOrderController.dropCustomerName = "${result?.details?.firstname}" + "${result?.details?.lastname}";
|
||||
createOrderController.dropCustomerContactNo = result?.details?.contactno;
|
||||
createOrderController.dropLocationId = result?.details?.deliverylocationid;
|
||||
createOrderController.dropTenantLocationId = result?.details?.tenantlocationid;
|
||||
createOrderController.toLatitude = result?.details?.latitude;
|
||||
createOrderController.toLongitude = result?.details?.longitude;
|
||||
createOrderController.toAddress =result?.details?.address;
|
||||
// Get.offAll(TenantDropCustomerView());
|
||||
Get.to(()=>CreateOrderView(isDashboard: false));
|
||||
}else{
|
||||
btnController.reset();
|
||||
Toast.showToast('${result?.message}');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
getLocation();
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../../../../../Data/Provider/Getcustomeraddress/Getcustomeraddressprovider.dart';
|
||||
import '../../../../../../Data/Repository/Createcustomer/Createcustomerrepository.dart';
|
||||
import '../../../../../../Globalwidgets/Googleplaces/Googleplaces.dart';
|
||||
import '../../../../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../../../../Helper/location_service.dart';
|
||||
import '../../../../../../Helper/toast.dart';
|
||||
import '../../../../../../Model/Request/Authentication/Createuser/Createdeliveryaddress/Createdeliveryaddressrequest.dart';
|
||||
import '../../../../../../Model/Response/Createcustomer/Createdeliveryaddress/Createdeliveryaddressresponsel.dart';
|
||||
import '../../../../../../Model/Response/Getcustomeraddress/GetCustomerAddress.dart';
|
||||
import '../../../../../../View/Createorder/Droplocation/Tabs/Allcustomers/Tenantcustomers/Customeraddress/Customeraddressview.dart';
|
||||
|
||||
|
||||
|
||||
class DropCustomerAddressController extends GetxController{
|
||||
|
||||
String? latitude;
|
||||
String? longitude;
|
||||
String? address;
|
||||
|
||||
String? customerName;
|
||||
String? customerContactNo;
|
||||
|
||||
int locationId = 0;
|
||||
int roleId = 0;
|
||||
int? customerId;
|
||||
int? deliveryLocationId;
|
||||
|
||||
int selectedAddressIndex = -1;
|
||||
|
||||
List <CustomerAddressDetail> getCustomeraddress =[];
|
||||
|
||||
|
||||
bool loader = true;
|
||||
bool deliveryAddressList = false;
|
||||
|
||||
var customerAddressInfo;
|
||||
|
||||
|
||||
TextEditingController searchController = TextEditingController();
|
||||
TextEditingController addressController = TextEditingController();
|
||||
TextEditingController suburbController = TextEditingController();
|
||||
TextEditingController cityController = TextEditingController();
|
||||
TextEditingController stateController = TextEditingController();
|
||||
TextEditingController postCodeController = TextEditingController();
|
||||
TextEditingController landmarkController = TextEditingController();
|
||||
TextEditingController doornoController = TextEditingController();
|
||||
|
||||
final searchText = ''.obs;
|
||||
final predictions = <Map<String, dynamic>>[].obs;
|
||||
final selectedPlace = {}.obs;
|
||||
|
||||
final GooglePlacesService placesService = GooglePlacesService();
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
final RoundedLoadingButtonController submitBtnController = RoundedLoadingButtonController();
|
||||
|
||||
CreateCustomerRepository createCustomerRepository = CreateCustomerRepository();
|
||||
|
||||
GetCustomersAddressProvider getCustomersAddressProvider = GetCustomersAddressProvider();
|
||||
|
||||
getDetails()async{
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
roleId = prefs.getInt('roleId')??0;
|
||||
print('roleIdingetDetails $roleId');
|
||||
update();
|
||||
}
|
||||
|
||||
getCustomerAddress()async{
|
||||
GetCustomerAddress? result = await getCustomersAddressProvider.getCustomerAddress('${ApiConstants.getCustomerAddress}?customerid=$customerId');
|
||||
getCustomeraddress = result?.details??[];
|
||||
loader = false;
|
||||
for (var i = 0; i < getCustomeraddress.length; i++) {
|
||||
if (getCustomeraddress[i].defaultaddress == '1') {
|
||||
deliveryLocationId = getCustomeraddress[i].locationid;
|
||||
print('getCustomerAddressforloop $deliveryLocationId');
|
||||
update();
|
||||
}
|
||||
}
|
||||
update();
|
||||
|
||||
print('getCustomerAddressincontroller${result?.toJson()}');
|
||||
|
||||
}
|
||||
|
||||
describeValidation(){
|
||||
if(addressController.text.isEmpty){
|
||||
submitBtnController.reset();
|
||||
Toast.showToast("Delivery address should not be empty");
|
||||
}
|
||||
else if(suburbController.text.isEmpty){
|
||||
submitBtnController.reset();
|
||||
Toast.showToast("Suburb should not be empty!");
|
||||
}
|
||||
else if(stateController.text.isEmpty){
|
||||
submitBtnController.reset();
|
||||
Toast.showToast("State should not be empty!");
|
||||
}else if(postCodeController.text.isEmpty){
|
||||
submitBtnController.reset();
|
||||
Toast.showToast("Pin code should not be empty!");
|
||||
}
|
||||
|
||||
else{
|
||||
submitBtnController.success();
|
||||
createDeliveryAddress();
|
||||
}
|
||||
}
|
||||
|
||||
createDeliveryAddress()async {
|
||||
create(
|
||||
CreateDeliveryAddress(
|
||||
customerid:customerAddressInfo.customerid,
|
||||
address: addressController.text,
|
||||
suburb: suburbController.text,
|
||||
city: cityController.text,
|
||||
state: stateController.text,
|
||||
postcode: postCodeController.text,
|
||||
// countycode:"91",
|
||||
latitude: '$latitude',
|
||||
longitude: '$longitude',
|
||||
primaryaddress: 0,
|
||||
));
|
||||
}
|
||||
|
||||
create(CreateDeliveryAddress data )async{
|
||||
CreateDeliveryAddressResponse? result = await createCustomerRepository.createDeliveryAddress(data);
|
||||
if(result?.status == true){
|
||||
deliveryAddressList = false;
|
||||
getCustomerAddress();
|
||||
submitBtnController.reset();
|
||||
Get.to(CustomerDropAddressView(data: customerAddressInfo,));
|
||||
update();
|
||||
}
|
||||
print('CreateDeliveryAddress create ${result!.toJson()}');
|
||||
}
|
||||
|
||||
void onSearchTextChanged(String text) async {
|
||||
searchText.value = text;
|
||||
if (text.length > 2) {
|
||||
try {
|
||||
final places = await placesService.getPlacesPredictions(text);
|
||||
predictions.assignAll(places);
|
||||
update();
|
||||
} catch (e) {
|
||||
print('Error fetching predictions: $e');
|
||||
}
|
||||
} else {
|
||||
predictions.clear();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getPlaceDetails(String placeId,locationAddress) async {
|
||||
try {
|
||||
final details = await placesService.getPlaceDetails(placeId);
|
||||
selectedPlace.value = details;
|
||||
print('getPlaceDetailslatitude ${selectedPlace['geometry']['location']['lat']}');
|
||||
print('getPlaceDetailslongitude ${selectedPlace['geometry']['location']['lng']}');
|
||||
getAddressFromLatLng(selectedPlace['geometry']['location']['lat'],selectedPlace['geometry']['location']['lng'],locationAddress);
|
||||
} catch (e) {
|
||||
print('Error fetching place details: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getAddressFromLatLng(double latitudes, double longitudes,locationAddress) async {
|
||||
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
latitude = double.parse(latitudes.toString()).toString();
|
||||
longitude = double.parse(longitudes.toString()).toString();
|
||||
cityController.text = '${place.locality}';
|
||||
stateController.text = '${place.administrativeArea}';
|
||||
suburbController.text = (place.subLocality!.isNotEmpty?place.subLocality:place.street)!;
|
||||
postCodeController.text = '${place.postalCode}';
|
||||
addressController.text = locationAddress;
|
||||
predictions.clear();
|
||||
update();
|
||||
print('latitude $latitude');
|
||||
print('longitude $longitude');
|
||||
print('subAdministrativeArea ${place.subAdministrativeArea}');
|
||||
print('subThoroughfare ${place.subThoroughfare}');
|
||||
print('currentLocationAddress ${ addressController.text}');
|
||||
print('streetss ${place.street}');
|
||||
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../../../Data/Repository/Customers/getCustomerbytenantidrepository.dart';
|
||||
import '../../../../../Helper/toast.dart';
|
||||
import '../../../../../Model/Response/Customers/GetCustomerById/Getdropcustomerbytenantid.dart';
|
||||
|
||||
|
||||
|
||||
|
||||
class TenantDropCustomerController extends GetxController{
|
||||
|
||||
final int limit = 10;
|
||||
int page = 1;
|
||||
var hasMore = true.obs;
|
||||
|
||||
bool progress = true;
|
||||
|
||||
RxBool shimmer = true.obs;
|
||||
|
||||
var getCustomerBytenantId = <GetDropCustomerByTenantIdDetails>[].obs;
|
||||
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
|
||||
GetCustomersByTenantIdRepository getCustomersByTenantIdRepository = GetCustomersByTenantIdRepository();
|
||||
|
||||
getCustomerByTenantId()async{
|
||||
GetDropCustomerByTenantId? result = await getCustomersByTenantIdRepository.getDropCustomerByTenantId();
|
||||
getCustomerByTenantIdResult(result!);
|
||||
}
|
||||
|
||||
getDropTenantByTenantId()async{
|
||||
GetDropCustomerByTenantId? result = await getCustomersByTenantIdRepository.getDropTenantByTenantId();
|
||||
getCustomerByTenantIdResult(result!);
|
||||
}
|
||||
|
||||
|
||||
getCustomerByTenantIdResult(GetDropCustomerByTenantId data){
|
||||
getCustomerBytenantId.value = data.details??[];
|
||||
progress =false;
|
||||
update();
|
||||
}
|
||||
|
||||
Future getSearchCustomerData(keyword) async {
|
||||
GetDropCustomerByTenantId? result = await getCustomersByTenantIdRepository.getDropCustomerKeywordByTenantId(keyword);
|
||||
|
||||
if (result?.code == 200) {
|
||||
getCustomerBytenantId.clear();
|
||||
getCustomerBytenantId.addAll(result?.details??[]);
|
||||
shimmer.value = false;
|
||||
update();
|
||||
print('getSearchCustomerDatalength ${getCustomerBytenantId.length}');
|
||||
if(getCustomerBytenantId.isEmpty){
|
||||
Toast.showToast('No customer at this moment');
|
||||
}
|
||||
|
||||
} else {
|
||||
// Toast.showToast(result?.message??"");
|
||||
}
|
||||
}
|
||||
|
||||
Future refreshData() async {
|
||||
searchController.clear();
|
||||
page = 1;
|
||||
hasMore.value = true;
|
||||
getCustomerBytenantId.value = [];
|
||||
|
||||
|
||||
if(searchController.text.isEmpty){
|
||||
print("ifffffffffffffffffffffffffffffffffff");
|
||||
await getCustomerData();
|
||||
}
|
||||
}
|
||||
|
||||
Future getCustomerData() async {
|
||||
GetDropCustomerByTenantId? result = await getCustomersByTenantIdRepository.getDropCustomerByPageLimitTenantId(page,limit);
|
||||
|
||||
if (result?.code == 200) {
|
||||
if (result!.details!.length < limit) {
|
||||
hasMore.value = false;
|
||||
}
|
||||
// getCustomerBytenantId.clear();
|
||||
getCustomerBytenantId.addAll(result.details??[]);
|
||||
shimmer.value = false;
|
||||
page++;
|
||||
update();
|
||||
} else {
|
||||
// Toast.showToast(result?.message??"");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../../../Helper/Constants/Colorconstants.dart';
|
||||
|
||||
class PickupCustomerTabController extends GetxController with SingleGetTickerProviderMixin{
|
||||
|
||||
|
||||
late TabController tabController;
|
||||
int tabIndex = 0;
|
||||
|
||||
final List<Tab> tabs = <Tab>[
|
||||
Tab(
|
||||
icon:Icon(
|
||||
Icons.person,
|
||||
color: ColorConstants.primaryColor,
|
||||
size: 25,
|
||||
),
|
||||
text: "From Customer",
|
||||
),
|
||||
// // Tab(text: "Yesterday",),
|
||||
Tab(
|
||||
text: "From Business",
|
||||
icon: Icon(
|
||||
Icons.business,
|
||||
color: ColorConstants.primaryColor,
|
||||
size: 25,
|
||||
),
|
||||
),
|
||||
|
||||
];
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
tabController = TabController(vsync: this, length: tabs.length);
|
||||
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,236 @@
|
||||
import 'package:country_currency_pickers/country.dart';
|
||||
import 'package:country_currency_pickers/utils/utils.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'dart:io';
|
||||
import '../../../../../../../Data/Repository/Createcustomer/Createcustomerrepository.dart';
|
||||
import '../../../../../../../Globalwidgets/Googleplaces/Googleplaces.dart';
|
||||
import '../../../../../../../Helper/Locationservice/Locationservice.dart';
|
||||
import '../../../../../../../Helper/location_service.dart';
|
||||
import '../../../../../../../Helper/toast.dart';
|
||||
import '../../../../../../../Model/Request/Createcustomer/Createcustomerrequest.dart';
|
||||
import '../../../../../../../Model/Response/Createcustomer/Createcustomerresponse.dart';
|
||||
import '../../../../../../../View/Createorder/Createorderview.dart';
|
||||
import '../../../../../../Createorder/Createordercontroller.dart';
|
||||
import '../../Tenantcustomercontroller.dart';
|
||||
|
||||
class AddPickupCustomerController extends GetxController{
|
||||
|
||||
String? latitude;
|
||||
String? longitude;
|
||||
|
||||
String? suburb;
|
||||
String? city;
|
||||
String? state;
|
||||
String? postCode;
|
||||
|
||||
int? tenantId;
|
||||
int? appLocationId;
|
||||
|
||||
|
||||
|
||||
bool progress = true;
|
||||
|
||||
TextEditingController customerFirstNameController = TextEditingController();
|
||||
TextEditingController customerLastNameController = TextEditingController();
|
||||
TextEditingController customerPhoneController = TextEditingController();
|
||||
TextEditingController addressController = TextEditingController();
|
||||
TextEditingController doorNoController = TextEditingController();
|
||||
TextEditingController landMarkController = TextEditingController();
|
||||
|
||||
|
||||
Position? resultPosition;
|
||||
|
||||
final searchText = ''.obs;
|
||||
final predictions = <Map<String, dynamic>>[].obs;
|
||||
final selectedPlace = {}.obs;
|
||||
|
||||
Country selectedDialogCountry = CountryPickerUtils.getCountryByIsoCode('IN');
|
||||
|
||||
final GooglePlacesService placesService = GooglePlacesService();
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
|
||||
CreateCustomerRepository createCustomerRepository = CreateCustomerRepository();
|
||||
|
||||
TenantPickupCustomerController tenantPickupCustomerController = Get.put(TenantPickupCustomerController());
|
||||
CreateOrderController createOrderController = Get.put(CreateOrderController());
|
||||
|
||||
|
||||
|
||||
LocationService locationService = LocationService();
|
||||
|
||||
|
||||
|
||||
getLocation() async {
|
||||
resultPosition = await locationService.getLocation();
|
||||
progress =false;
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
void onSearchTextChanged(String text) async {
|
||||
searchText.value = text;
|
||||
if (text.length > 2) {
|
||||
try {
|
||||
final places = await placesService.getPlacesPredictions(text);
|
||||
predictions.assignAll(places);
|
||||
update();
|
||||
} catch (e) {
|
||||
print('Error fetching predictions: $e');
|
||||
}
|
||||
} else {
|
||||
predictions.clear();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getPlaceDetails(String placeId,locationAddress) async {
|
||||
try {
|
||||
final details = await placesService.getPlaceDetails(placeId);
|
||||
selectedPlace.value = details;
|
||||
print('getPlaceDetailslatitude ${selectedPlace['geometry']['location']['lat']}');
|
||||
print('getPlaceDetailslongitude ${selectedPlace['geometry']['location']['lng']}');
|
||||
getAddressFromLatLng(selectedPlace['geometry']['location']['lat'],selectedPlace['geometry']['location']['lng'],locationAddress);
|
||||
} catch (e) {
|
||||
print('Error fetching place details: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getAddressFromLatLng(double latitudes, double longitudes,address) async {
|
||||
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
latitude = double.parse(latitudes.toString()).toString();
|
||||
longitude = double.parse(longitudes.toString()).toString();
|
||||
city = '${place.locality}';
|
||||
state = '${place.administrativeArea}';
|
||||
suburb = place.subLocality!.isNotEmpty?place.subLocality:place.street;
|
||||
postCode = '${place.postalCode}';
|
||||
addressController.text = address;
|
||||
predictions.clear();
|
||||
update();
|
||||
print('latitude $latitude');
|
||||
print('longitude $longitude');
|
||||
print('eng $suburb');
|
||||
print('city $city');
|
||||
print('state $state');
|
||||
print('postalCode $postCode');
|
||||
print('subAdministrativeArea ${place.subAdministrativeArea}');
|
||||
print('subThoroughfare ${place.subThoroughfare}');
|
||||
print('currentLocationAddress ${addressController.text}');
|
||||
print('streetss ${place.street}');
|
||||
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
describeValidation(){
|
||||
if(customerFirstNameController.text.isEmpty){
|
||||
btnController.reset();
|
||||
Toast.showToast("Please enter your first name");
|
||||
}
|
||||
// else if(customerLastNameController.text.isEmpty){
|
||||
// Toast.showToast("Please enter your last name");
|
||||
// }
|
||||
else if(customerPhoneController.text.isEmpty){
|
||||
btnController.reset();
|
||||
|
||||
Toast.showToast("Please enter your phone number");
|
||||
}else if(addressController.text.isEmpty){
|
||||
btnController.reset();
|
||||
Toast.showToast("Please enter your address");
|
||||
}
|
||||
else if(latitude == null &&longitude == null){
|
||||
btnController.reset();
|
||||
Toast.showToast("Please enter correct address");
|
||||
}
|
||||
// else if(doorNoController.text.isEmpty){
|
||||
// Toast.showToast("Please enter your door number");
|
||||
// }
|
||||
// else if(landMarkController.text.isEmpty){
|
||||
// Toast.showToast("Please enter your landmark");
|
||||
// }
|
||||
else{
|
||||
btnController.success();
|
||||
createCustomer();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
createCustomer() async{
|
||||
var createdate = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now());
|
||||
var updatedate = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now());
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
appLocationId = prefs.getInt('appLocationId');
|
||||
print('tenantIdcreateCustomer$tenantId');
|
||||
String contactNo = customerPhoneController.text;
|
||||
print("contact............$contactNo");
|
||||
create(
|
||||
CreateCustomers(
|
||||
customerid:0,
|
||||
configid:1,
|
||||
tenantid: tenantId,
|
||||
firstname:customerFirstNameController.text,
|
||||
applocationid:appLocationId,
|
||||
profileimage:"",
|
||||
dialcode:"+91",
|
||||
contactno:customerPhoneController.text,
|
||||
devicetype:Platform.operatingSystem,
|
||||
// deviceid:"${prefs.getString('deviceId')}",
|
||||
// customertoken:"$fcmEntryToken",
|
||||
address:addressController.text,
|
||||
suburb:suburb,
|
||||
city:city,
|
||||
state:state,
|
||||
postcode:postCode,
|
||||
landmark:landMarkController.text,
|
||||
doorno:doorNoController.text,
|
||||
latitude:latitude,
|
||||
longitude:longitude,
|
||||
primaryaddress: 1,
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
create(CreateCustomers data )async{
|
||||
CreateCustomerResponse? result = await createCustomerRepository.createCustomer(data);
|
||||
|
||||
if(result?.status == true){
|
||||
customerFirstNameController.clear();
|
||||
customerLastNameController.clear();
|
||||
customerPhoneController.clear();
|
||||
addressController.clear();
|
||||
doorNoController.clear();
|
||||
landMarkController.clear();
|
||||
tenantPickupCustomerController.getCustomerByTenantId();
|
||||
btnController.reset();
|
||||
createOrderController.pickupCustomerId = result?.details?.customerid;
|
||||
createOrderController.pickUpCustomerName = "${result?.details?.firstname}" + "${result?.details?.lastname}";
|
||||
createOrderController.pickUpCustomerContactNo = result?.details?.contactno;
|
||||
createOrderController.pickupLocationId = result?.details?.deliverylocationid;
|
||||
createOrderController.pickupTenantLocationId = result?.details?.tenantlocationid;
|
||||
createOrderController.fromLatitude = result?.details?.latitude;
|
||||
createOrderController.fromLongitude = result?.details?.longitude;
|
||||
createOrderController.fromAddress =result?.details?.address;
|
||||
// Get.offAll(TenantPickUpCustomerView(navigate: true,));
|
||||
Get.to(()=>CreateOrderView(isDashboard: false));
|
||||
}else{
|
||||
btnController.reset();
|
||||
Toast.showToast('${result?.message}');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
getLocation();
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,196 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../../../../../Data/Provider/Getcustomeraddress/Getcustomeraddressprovider.dart';
|
||||
import '../../../../../../Data/Repository/Createcustomer/Createcustomerrepository.dart';
|
||||
import '../../../../../../Globalwidgets/Googleplaces/Googleplaces.dart';
|
||||
import '../../../../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../../../../Helper/location_service.dart';
|
||||
import '../../../../../../Helper/toast.dart';
|
||||
import '../../../../../../Model/Request/Authentication/Createuser/Createdeliveryaddress/Createdeliveryaddressrequest.dart';
|
||||
import '../../../../../../Model/Response/Createcustomer/Createdeliveryaddress/Createdeliveryaddressresponsel.dart';
|
||||
import '../../../../../../Model/Response/Getcustomeraddress/GetCustomerAddress.dart';
|
||||
import '../../../../../../View/Createorder/Pickuplocation/Tabs/Allcustomers/Tenantcustomers/Customeraddress/Customeraddressview.dart';
|
||||
|
||||
class PickupCustomerAddressController extends GetxController{
|
||||
|
||||
String? latitude;
|
||||
String? longitude;
|
||||
String? address;
|
||||
|
||||
String? customerName;
|
||||
String? customerContactNo;
|
||||
|
||||
int locationId = 0;
|
||||
int roleId = 0;
|
||||
int? customerId;
|
||||
int? deliveryLocationId;
|
||||
|
||||
int selectedAddressIndex = -1;
|
||||
|
||||
List <CustomerAddressDetail> getCustomeraddress =[];
|
||||
|
||||
|
||||
bool loader = true;
|
||||
bool deliveryAddressList = false;
|
||||
|
||||
var customerAddressInfo;
|
||||
|
||||
|
||||
TextEditingController searchController = TextEditingController();
|
||||
TextEditingController addressController = TextEditingController();
|
||||
TextEditingController suburbController = TextEditingController();
|
||||
TextEditingController cityController = TextEditingController();
|
||||
TextEditingController stateController = TextEditingController();
|
||||
TextEditingController postCodeController = TextEditingController();
|
||||
TextEditingController landmarkController = TextEditingController();
|
||||
TextEditingController doornoController = TextEditingController();
|
||||
|
||||
final searchText = ''.obs;
|
||||
final predictions = <Map<String, dynamic>>[].obs;
|
||||
final selectedPlace = {}.obs;
|
||||
|
||||
final GooglePlacesService placesService = GooglePlacesService();
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
final RoundedLoadingButtonController submitBtnController = RoundedLoadingButtonController();
|
||||
|
||||
CreateCustomerRepository createCustomerRepository = CreateCustomerRepository();
|
||||
|
||||
GetCustomersAddressProvider getCustomersAddressProvider = GetCustomersAddressProvider();
|
||||
|
||||
getDetails()async{
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
roleId = prefs.getInt('roleId')??0;
|
||||
print('roleIdingetDetails $roleId');
|
||||
update();
|
||||
}
|
||||
|
||||
getCustomerAddress()async{
|
||||
GetCustomerAddress? result = await getCustomersAddressProvider.getCustomerAddress('${ApiConstants.getCustomerAddress}?customerid=$customerId');
|
||||
getCustomeraddress = result?.details??[];
|
||||
loader = false;
|
||||
for (var i = 0; i < getCustomeraddress.length; i++) {
|
||||
if (getCustomeraddress[i].defaultaddress == '1') {
|
||||
deliveryLocationId = getCustomeraddress[i].locationid;
|
||||
print('getCustomerAddressforloop $deliveryLocationId');
|
||||
update();
|
||||
}
|
||||
}
|
||||
update();
|
||||
|
||||
print('getCustomerAddressincontroller${result?.toJson()}');
|
||||
|
||||
}
|
||||
|
||||
describeValidation(){
|
||||
if(addressController.text.isEmpty){
|
||||
submitBtnController.reset();
|
||||
Toast.showToast("Delivery address should not be empty");
|
||||
}
|
||||
else if(suburbController.text.isEmpty){
|
||||
submitBtnController.reset();
|
||||
Toast.showToast("Suburb should not be empty!");
|
||||
}
|
||||
else if(stateController.text.isEmpty){
|
||||
submitBtnController.reset();
|
||||
Toast.showToast("State should not be empty!");
|
||||
}else if(postCodeController.text.isEmpty){
|
||||
submitBtnController.reset();
|
||||
Toast.showToast("Pin code should not be empty!");
|
||||
}
|
||||
|
||||
else{
|
||||
submitBtnController.success();
|
||||
createDeliveryAddress();
|
||||
}
|
||||
}
|
||||
|
||||
createDeliveryAddress()async {
|
||||
create(
|
||||
CreateDeliveryAddress(
|
||||
customerid:customerAddressInfo.customerid,
|
||||
address: addressController.text,
|
||||
suburb: suburbController.text,
|
||||
city: cityController.text,
|
||||
state: stateController.text,
|
||||
postcode: postCodeController.text,
|
||||
// countycode:"91",
|
||||
latitude: '$latitude',
|
||||
longitude: '$longitude',
|
||||
primaryaddress: 0,
|
||||
));
|
||||
}
|
||||
|
||||
create(CreateDeliveryAddress data )async{
|
||||
CreateDeliveryAddressResponse? result = await createCustomerRepository.createDeliveryAddress(data);
|
||||
if(result?.status == true){
|
||||
deliveryAddressList = false;
|
||||
getCustomerAddress();
|
||||
submitBtnController.reset();
|
||||
Get.to(CustomerPickupAddressView(data: customerAddressInfo,));
|
||||
update();
|
||||
}
|
||||
print('CreateDeliveryAddress create ${result!.toJson()}');
|
||||
}
|
||||
|
||||
void onSearchTextChanged(String text) async {
|
||||
searchText.value = text;
|
||||
if (text.length > 2) {
|
||||
try {
|
||||
final places = await placesService.getPlacesPredictions(text);
|
||||
predictions.assignAll(places);
|
||||
update();
|
||||
} catch (e) {
|
||||
print('Error fetching predictions: $e');
|
||||
}
|
||||
} else {
|
||||
predictions.clear();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getPlaceDetails(String placeId,locationAddress) async {
|
||||
try {
|
||||
final details = await placesService.getPlaceDetails(placeId);
|
||||
selectedPlace.value = details;
|
||||
print('getPlaceDetailslatitude ${selectedPlace['geometry']['location']['lat']}');
|
||||
print('getPlaceDetailslongitude ${selectedPlace['geometry']['location']['lng']}');
|
||||
getAddressFromLatLng(selectedPlace['geometry']['location']['lat'],selectedPlace['geometry']['location']['lng'],locationAddress);
|
||||
} catch (e) {
|
||||
print('Error fetching place details: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getAddressFromLatLng(double latitudes, double longitudes,locationAddress) async {
|
||||
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
latitude = double.parse(latitudes.toString()).toString();
|
||||
longitude = double.parse(longitudes.toString()).toString();
|
||||
cityController.text = '${place.locality}';
|
||||
stateController.text = '${place.administrativeArea}';
|
||||
suburbController.text = (place.subLocality!.isNotEmpty?place.subLocality:place.street)!;
|
||||
postCodeController.text = '${place.postalCode}';
|
||||
addressController.text = locationAddress;
|
||||
predictions.clear();
|
||||
update();
|
||||
print('latitude $latitude');
|
||||
print('longitude $longitude');
|
||||
print('subAdministrativeArea ${place.subAdministrativeArea}');
|
||||
print('subThoroughfare ${place.subThoroughfare}');
|
||||
print('currentLocationAddress ${ addressController.text}');
|
||||
print('streetss ${place.street}');
|
||||
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../../../../Data/Repository/Customers/getCustomerbytenantidrepository.dart';
|
||||
import '../../../../../Helper/toast.dart';
|
||||
import '../../../../../Model/Response/Customers/GetCustomerById/GetCustomerByTenantId.dart';
|
||||
|
||||
|
||||
class TenantPickupCustomerController extends GetxController{
|
||||
|
||||
final int limit = 10;
|
||||
int page = 1;
|
||||
var hasMore = true.obs;
|
||||
|
||||
bool progress = true;
|
||||
|
||||
RxBool shimmer = true.obs;
|
||||
|
||||
var getCustomerBytenantId = <GetCustomerByTenantIdDetails>[].obs;
|
||||
|
||||
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
GetCustomersByTenantIdRepository getCustomersByTenantIdRepository = GetCustomersByTenantIdRepository();
|
||||
|
||||
getCustomerByTenantId()async{
|
||||
GetCustomerByTenantId? result = await getCustomersByTenantIdRepository.getCustomerByTenantId();
|
||||
getCustomerByTenantIdResult(result!);
|
||||
}
|
||||
|
||||
getTenantsByTenantId()async{
|
||||
GetCustomerByTenantId? result = await getCustomersByTenantIdRepository.getTenantsByTenantId();
|
||||
getCustomerByTenantIdResult(result!);
|
||||
}
|
||||
|
||||
|
||||
getCustomerByTenantIdResult(GetCustomerByTenantId data) {
|
||||
final seen = <dynamic>{};
|
||||
|
||||
/// Logic to remove duplicates
|
||||
getCustomerBytenantId.value = (data.details ?? []).where((customer) {
|
||||
if (seen.contains(customer.customerid)) {
|
||||
return false; // Duplicate
|
||||
} else {
|
||||
seen.add(customer.customerid);
|
||||
return true;
|
||||
}
|
||||
}).toList();
|
||||
|
||||
progress = false;
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
Future getSearchCustomerData(keyword) async {
|
||||
|
||||
GetCustomerByTenantId? result = await getCustomersByTenantIdRepository.getCustomerKeywordByTenantId(keyword);
|
||||
|
||||
if (result?.code == 200) {
|
||||
getCustomerBytenantId.clear();
|
||||
getCustomerBytenantId.addAll(result?.details??[]);
|
||||
shimmer.value = false;
|
||||
update();
|
||||
print('getSearchCustomerDatalength ${getCustomerBytenantId.length}');
|
||||
if(getCustomerBytenantId.isEmpty){
|
||||
Toast.showToast('No customer at this moment');
|
||||
}
|
||||
|
||||
} else {
|
||||
// Toast.showToast(result?.message??"");
|
||||
}
|
||||
}
|
||||
|
||||
Future refreshData() async {
|
||||
searchController.clear();
|
||||
page = 1;
|
||||
hasMore.value = true;
|
||||
getCustomerBytenantId.value = [];
|
||||
|
||||
|
||||
if(searchController.text.isEmpty){
|
||||
print("ifffffffffffffffffffffffffffffffffff");
|
||||
await getCustomerData();
|
||||
}
|
||||
}
|
||||
|
||||
Future getCustomerData() async {
|
||||
GetCustomerByTenantId? result = await getCustomersByTenantIdRepository.getCustomerByPageLimitTenantId(page,limit);
|
||||
|
||||
if (result?.code == 200) {
|
||||
if (result!.details!.length < limit) {
|
||||
hasMore.value = false;
|
||||
}
|
||||
// getCustomerBytenantId.clear();
|
||||
getCustomerBytenantId.addAll(result.details??[]);
|
||||
shimmer.value = false;
|
||||
page++;
|
||||
update();
|
||||
} else {
|
||||
// Toast.showToast(result?.message??"");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
26
lib/Controller/Dashboard/Tabs/Cancelledordercontroller.dart
Normal file
26
lib/Controller/Dashboard/Tabs/Cancelledordercontroller.dart
Normal file
@@ -0,0 +1,26 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../Data/Repository/Orders/Orderrepository.dart';
|
||||
import '../../../Model/Response/Orders/Getorderresponse.dart';
|
||||
|
||||
class CancelledOrderController extends GetxController{
|
||||
|
||||
RxBool shimmer = true.obs;
|
||||
|
||||
List <OrderDetails> getCancelledOrderList = [];
|
||||
|
||||
OrdersRepository ordersRepository = OrdersRepository();
|
||||
|
||||
getCancelledOrder()async{
|
||||
GetOrders? result = await ordersRepository.getCancelledOrder();
|
||||
getCancelledOrderList = result?.details??[];
|
||||
shimmer.value = false;
|
||||
update();
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
26
lib/Controller/Dashboard/Tabs/Completedordercontroller.dart
Normal file
26
lib/Controller/Dashboard/Tabs/Completedordercontroller.dart
Normal file
@@ -0,0 +1,26 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../Data/Repository/Orders/Orderrepository.dart';
|
||||
import '../../../Model/Response/Orders/Getorderresponse.dart';
|
||||
|
||||
class CompletedOrderController extends GetxController{
|
||||
|
||||
RxBool shimmer = true.obs;
|
||||
|
||||
List <OrderDetails> getCompletedOrderList = [];
|
||||
|
||||
OrdersRepository ordersRepository = OrdersRepository();
|
||||
|
||||
getCompletedOrder()async{
|
||||
GetOrders? result = await ordersRepository.getCompletedOrders();
|
||||
getCompletedOrderList = result?.details??[];
|
||||
shimmer.value = false;
|
||||
update();
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
27
lib/Controller/Dashboard/Tabs/Ongoingordercontroller.dart
Normal file
27
lib/Controller/Dashboard/Tabs/Ongoingordercontroller.dart
Normal file
@@ -0,0 +1,27 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../Data/Repository/Orders/Orderrepository.dart';
|
||||
import '../../../Model/Response/Orders/Getorderresponse.dart';
|
||||
|
||||
class OnGoingOrderController extends GetxController{
|
||||
|
||||
RxBool shimmer = true.obs;
|
||||
|
||||
List <OrderDetails> getCurrentOrderList = [];
|
||||
|
||||
OrdersRepository ordersRepository = OrdersRepository();
|
||||
|
||||
getCurrentOrder()async{
|
||||
GetOrders? result = await ordersRepository.getCurrentOrders();
|
||||
getCurrentOrderList = result?.details??[];
|
||||
shimmer.value = false;
|
||||
update();
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
getCurrentOrder();
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
256
lib/Controller/Dashboard/Tabs/Ordercontroller.dart
Normal file
256
lib/Controller/Dashboard/Tabs/Ordercontroller.dart
Normal file
@@ -0,0 +1,256 @@
|
||||
import 'dart:async'; // Add this import
|
||||
import 'package:get/get.dart' hide Response;
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:dio/dio.dart' as Response;
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../Data/Repository/Admintoken/Getadmintokenrepository.dart';
|
||||
import '../../../Data/Repository/Notification/Notificationrepository.dart';
|
||||
import '../../../Data/Repository/Orders/Orderrepository.dart';
|
||||
import '../../../Data/Repository/Summary/ordersrepository.dart';
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Request/Notification/Notification_request_rider.dart';
|
||||
import '../../../Model/Request/Notification/Notificationrequest.dart';
|
||||
import '../../../Model/Request/Orders/Cancelorderrequest.dart';
|
||||
import '../../../Model/Response/Admintoken/Admintokenresponse.dart';
|
||||
import '../../../Model/Response/Notification/Notificationresponse.dart';
|
||||
import '../../../Model/Response/Orders/Getorderresponse.dart';
|
||||
import '../../../Model/Response/Summary/Cancelorderresponse.dart';
|
||||
import '../../../View/Home/Homeview.dart';
|
||||
|
||||
class CurrentOrderController extends GetxController {
|
||||
String? currentTime;
|
||||
String? notificationDate;
|
||||
|
||||
// Separate lists for each tab
|
||||
RxList<OrderDetails> placedOrders = <OrderDetails>[].obs;
|
||||
RxList<OrderDetails> ongoingOrders = <OrderDetails>[].obs;
|
||||
RxList<OrderDetails> completedOrders = <OrderDetails>[].obs;
|
||||
RxList<OrderDetails> cancelledOrders = <OrderDetails>[].obs;
|
||||
|
||||
// Loading states
|
||||
RxBool loadingPlaced = false.obs;
|
||||
RxBool loadingOngoing = false.obs;
|
||||
RxBool loadingCompleted = false.obs;
|
||||
RxBool loadingCancelled = false.obs;
|
||||
|
||||
// Track first load per tab
|
||||
bool hasLoadedPlaced = false;
|
||||
bool hasLoadedOngoing = false;
|
||||
bool hasLoadedCompleted = false;
|
||||
bool hasLoadedCancelled = false;
|
||||
|
||||
DateTime? now;
|
||||
int? userId;
|
||||
var orderId;
|
||||
var orderHeaderId;
|
||||
|
||||
List<Applocationadmins> adminDetails = [];
|
||||
List<String> adminToken = [];
|
||||
|
||||
OrdersRepository ordersRepository = OrdersRepository();
|
||||
OrderSummaryRepository orderSummaryRepository = OrderSummaryRepository();
|
||||
NotificationRepository notificationRepository = NotificationRepository();
|
||||
GetAdminTokenRepository getAdminTokenRepository = GetAdminTokenRepository();
|
||||
|
||||
final RoundedLoadingButtonController cancelOrderButton = RoundedLoadingButtonController();
|
||||
final RoundedLoadingButtonController acceptOrderButton = RoundedLoadingButtonController();
|
||||
|
||||
// Timer for auto-refreshing 'created' tab
|
||||
Timer? _autoRefreshTimer;
|
||||
|
||||
getAdminToken() async {
|
||||
GetAdminToken? result = await getAdminTokenRepository.getAdminToken();
|
||||
if (result?.status == true) {
|
||||
adminDetails = result?.details?.applocationadmins ?? [];
|
||||
adminToken.clear();
|
||||
for (var adminDetail in adminDetails) {
|
||||
adminToken.add(adminDetail.userfcmtokem ?? '');
|
||||
}
|
||||
}
|
||||
logger.i('adminToken $adminToken');
|
||||
}
|
||||
|
||||
// Get orders list by status
|
||||
List<OrderDetails> getOrdersByStatus(String status) {
|
||||
switch (status) {
|
||||
case 'created':
|
||||
return placedOrders;
|
||||
case 'ongoing':
|
||||
return ongoingOrders;
|
||||
case 'delivered':
|
||||
return completedOrders;
|
||||
case 'cancelled':
|
||||
return cancelledOrders;
|
||||
default:
|
||||
return placedOrders;
|
||||
}
|
||||
}
|
||||
|
||||
// Get loading state by status
|
||||
RxBool getLoadingByStatus(String status) {
|
||||
switch (status) {
|
||||
case 'created':
|
||||
return loadingPlaced;
|
||||
case 'ongoing':
|
||||
return loadingOngoing;
|
||||
case 'delivered':
|
||||
return loadingCompleted;
|
||||
case 'cancelled':
|
||||
return loadingCancelled;
|
||||
default:
|
||||
return loadingPlaced;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if already loaded
|
||||
bool hasLoaded(String status) {
|
||||
switch (status) {
|
||||
case 'created': return hasLoadedPlaced;
|
||||
case 'ongoing': return hasLoadedOngoing;
|
||||
case 'delivered': return hasLoadedCompleted;
|
||||
case 'cancelled': return hasLoadedCancelled;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Mark as loaded
|
||||
void markAsLoaded(String status) {
|
||||
switch (status) {
|
||||
case 'created': hasLoadedPlaced = true; break;
|
||||
case 'ongoing': hasLoadedOngoing = true; break;
|
||||
case 'delivered': hasLoadedCompleted = true; break;
|
||||
case 'cancelled': hasLoadedCancelled = true; break;
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch orders for a specific status
|
||||
Future<void> getOrder(String status) async {
|
||||
final loadingObs = getLoadingByStatus(status);
|
||||
final ordersList = getOrdersByStatus(status);
|
||||
|
||||
// Show shimmer only on first load
|
||||
if (!hasLoaded(status)) {
|
||||
loadingObs.value = true;
|
||||
}
|
||||
|
||||
try {
|
||||
GetOrders? result = await ordersRepository.getOrders(status);
|
||||
ordersList.assignAll(result?.details ?? []);
|
||||
markAsLoaded(status);
|
||||
} catch (e) {
|
||||
logger.e("Error fetching $status orders: $e");
|
||||
} finally {
|
||||
loadingObs.value = false;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Start auto-refresh for 'created' tab only
|
||||
void startAutoRefresh() {
|
||||
_autoRefreshTimer?.cancel(); // Cancel any existing
|
||||
_autoRefreshTimer = Timer.periodic(Duration(seconds: 3), (timer) {
|
||||
// Only refresh 'created' tab
|
||||
getOrder('created');
|
||||
});
|
||||
}
|
||||
|
||||
// Stop auto-refresh
|
||||
void stopAutoRefresh() {
|
||||
_autoRefreshTimer?.cancel();
|
||||
_autoRefreshTimer = null;
|
||||
}
|
||||
|
||||
/// Decline Order in created State
|
||||
declineOrder(orderheaderId, orderId, customerToken, riderToken) async {
|
||||
now = DateTime.now();
|
||||
currentTime = DateFormat("yyyy-MM-dd HH:mm:ss").format(
|
||||
DateFormat("yyyy-MM-dd HH:mm:ss", "en_US").parse(now.toString()));
|
||||
declineOrderResult(
|
||||
CancelOrderRequest(
|
||||
orderheaderid: orderheaderId,
|
||||
orderstatus: "cancelled",
|
||||
cancelled: currentTime,
|
||||
),
|
||||
orderId,
|
||||
customerToken,
|
||||
riderToken
|
||||
);
|
||||
}
|
||||
|
||||
declineOrderResult(CancelOrderRequest data, orderId, customerToken, RiderToken) async {
|
||||
CancelOrderResponse? result = await orderSummaryRepository.updateOrders(data);
|
||||
logger.i('Update Order Result ${result!.toString()}');
|
||||
cancelOrderButton.reset();
|
||||
Get.to(() => HomeView(selectedIndex: 0));
|
||||
cancelOrderNotification(orderId, customerToken, RiderToken);
|
||||
}
|
||||
|
||||
cancelOrderNotification(orderId, customerToken, riderToken) async {
|
||||
logger.i('CustomerToken : ${customerToken}');
|
||||
logger.i('RiderToken : ${riderToken}');
|
||||
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
String tenantName = prefs.getString('tenantName') ?? '';
|
||||
now = DateTime.now();
|
||||
notificationDate = DateFormat("yyyy-MM-dd HH:mm:ss").format(
|
||||
DateFormat("yyyy-MM-dd HH:mm:ss", "en_US").parse(now.toString()));
|
||||
cancelCustomerOrderNotificationResult(
|
||||
RiderNotificationRequest(
|
||||
notification: NotificationRider(
|
||||
title: "Nearle Daily",
|
||||
image: "",
|
||||
body: "Your Order ${orderId} has been cancelled\nby ${tenantName} ",
|
||||
sound: "ring",
|
||||
),
|
||||
token: customerToken,
|
||||
)
|
||||
);
|
||||
|
||||
if (riderToken != '')
|
||||
cancelCustomerOrderNotificationResult(
|
||||
RiderNotificationRequest(
|
||||
notification: NotificationRider(
|
||||
title: "NearleXpress",
|
||||
image: "",
|
||||
body: "${orderId} order has been cancelled\nby ${tenantName} ",
|
||||
sound: "ring",
|
||||
),
|
||||
token: riderToken,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
cancelCustomerOrderNotificationResult(RiderNotificationRequest data) async {
|
||||
NotificationResponse? result = await notificationRepository.notifyRider(data);
|
||||
if (result?.status == true) {
|
||||
// Handle success if needed
|
||||
}
|
||||
}
|
||||
|
||||
cancelRiderOrderNotificationResult(RiderNotificationRequest data) async {
|
||||
NotificationResponse? result = await notificationRepository.notifyRider(data);
|
||||
if (result?.status == true) {
|
||||
// Handle success if needed
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
// Start auto-refresh when controller is initialized
|
||||
startAutoRefresh();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
// Stop timer when controller is disposed
|
||||
stopAutoRefresh();
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
132
lib/Controller/Directionmap/Directionmapcontroller.dart
Normal file
132
lib/Controller/Directionmap/Directionmapcontroller.dart
Normal file
@@ -0,0 +1,132 @@
|
||||
import 'package:flutter_polyline_points/flutter_polyline_points.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||
import 'package:http/http.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../Helper/Constants/Colorconstants.dart';
|
||||
|
||||
class DirectionMapController extends GetxController{
|
||||
|
||||
String? googleApiKey;
|
||||
|
||||
|
||||
late GoogleMapController mapController;
|
||||
// double _originLatitude = 6.5212402, _originLongitude = 3.3679965;
|
||||
// double _destLatitude = 6.849660, _destLongitude = 3.648190;
|
||||
double? originLatitude;
|
||||
double? originLongitude;
|
||||
double? destLatitude;
|
||||
double? destLongitude;
|
||||
|
||||
static LatLng? center;
|
||||
|
||||
|
||||
Map<MarkerId, Marker> markers = {};
|
||||
Map<PolylineId, Polyline> polylines = {};
|
||||
List<LatLng> polylineCoordinates = [];
|
||||
PolylinePoints polylinePoints = PolylinePoints();
|
||||
|
||||
|
||||
|
||||
|
||||
void onMapCreated(GoogleMapController controller) async {
|
||||
mapController = controller;
|
||||
}
|
||||
|
||||
addMarker(LatLng position, String id, BitmapDescriptor descriptor) {
|
||||
print('originLatitudeaddMarkercontroller $originLatitude');
|
||||
print('originLongitudeaddMarkercontroller $originLongitude');
|
||||
print('destLatitudeaddMarkercontroller $destLatitude');
|
||||
print('destLongitudeaddMarkercontroller $destLongitude');
|
||||
|
||||
MarkerId markerId = MarkerId(id);
|
||||
Marker marker =
|
||||
Marker(markerId: markerId, icon: descriptor, position: position);
|
||||
markers[markerId] = marker;
|
||||
}
|
||||
|
||||
addPolyLine() {
|
||||
PolylineId id = PolylineId("poly");
|
||||
Polyline polyline = Polyline(
|
||||
polylineId: id,
|
||||
color: ColorConstants.primaryColor,
|
||||
points: polylineCoordinates,
|
||||
jointType: JointType.mitered,
|
||||
geodesic: true,
|
||||
visible: true,
|
||||
width: 10
|
||||
|
||||
|
||||
|
||||
|
||||
);
|
||||
polylines[id] = polyline;
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
void setCameraPosition(List<LatLng> coordinates) {
|
||||
LatLngBounds bounds = boundsFromLatLngList(coordinates);
|
||||
CameraUpdate cameraUpdate = CameraUpdate.newLatLngBounds(bounds, 50); // Adjust padding as needed
|
||||
mapController.animateCamera(cameraUpdate);
|
||||
}
|
||||
|
||||
|
||||
LatLngBounds boundsFromLatLngList(List<LatLng> list) {
|
||||
double? x0, x1, y0, y1;
|
||||
|
||||
for (LatLng latLng in list) {
|
||||
if (x0 == null || latLng.latitude < x0) x0 = latLng.latitude;
|
||||
if (x1 == null || latLng.latitude > x1) x1 = latLng.latitude;
|
||||
if (y0 == null || latLng.longitude < y0) y0 = latLng.longitude;
|
||||
if (y1 == null || latLng.longitude > y1) y1 = latLng.longitude;
|
||||
}
|
||||
|
||||
return LatLngBounds(northeast: LatLng(x1!, y1!), southwest: LatLng(x0!, y0!));
|
||||
}
|
||||
|
||||
|
||||
|
||||
getPolyline() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
print('originLatitudegetPolylinecontroller $originLatitude');
|
||||
print('originLongitudegetPolylinecontroller $originLongitude');
|
||||
print('destLatitudegetPolylinecontroller $destLatitude');
|
||||
print('destLongitudegetPolylinecontroller $destLongitude');
|
||||
googleApiKey = prefs.getString('googleApiKey')??'AIzaSyBhkGfnq27sN0wV5y_S-M2KojpFTk_by-Q';
|
||||
PolylineResult result = await polylinePoints.getRouteBetweenCoordinates(
|
||||
request: PolylineRequest(
|
||||
origin: PointLatLng(originLatitude ?? 0.0, originLongitude ?? 0.0),
|
||||
destination: PointLatLng(destLatitude ?? 0.0, destLongitude ?? 0.0),
|
||||
mode: TravelMode.driving,
|
||||
// Optional:
|
||||
// wayPoints: [PolylineWayPoint(location: "Some location string")]
|
||||
),
|
||||
googleApiKey: googleApiKey ?? 'YOUR_API_KEY',
|
||||
);
|
||||
|
||||
|
||||
if (result.points.isNotEmpty) {
|
||||
// dropChangeZoom(13);
|
||||
polylineCoordinates.clear();
|
||||
|
||||
result.points.forEach((PointLatLng point) {
|
||||
polylineCoordinates.add(LatLng(point.latitude, point.longitude));
|
||||
|
||||
setCameraPosition(polylineCoordinates);
|
||||
|
||||
});
|
||||
}
|
||||
addPolyLine();
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
|
||||
|
||||
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
116
lib/Controller/Home/Homecontroller.dart
Normal file
116
lib/Controller/Home/Homecontroller.dart
Normal file
@@ -0,0 +1,116 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:pretty_qr_code/pretty_qr_code.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../Helper/Constants/Colorconstants.dart';
|
||||
import '../../Helper/Logger.dart';
|
||||
|
||||
class HomeController extends GetxController{
|
||||
|
||||
int selectedIndex = 0;
|
||||
int tenantId = 0;
|
||||
int locationId = 0;
|
||||
|
||||
|
||||
void onItemTapped(int index) {
|
||||
selectedIndex = index;
|
||||
update();
|
||||
}
|
||||
|
||||
void getTenantId() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = (await prefs.getInt('tenantId')) ?? 0;
|
||||
locationId = (await prefs.getInt('locationId')) ?? 0;
|
||||
logger.i('TenantId = ${tenantId}');
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
void showQRBottomSheet() {
|
||||
final Map<String, dynamic> qrMap = {
|
||||
'tenantid': tenantId, // 👈 lowercase key
|
||||
'locationid': locationId, // 👈 lowercase key
|
||||
};
|
||||
|
||||
final String qrData = jsonEncode(qrMap);
|
||||
logger.i("QR JSON Data: $qrData");
|
||||
|
||||
final qrCode = QrCode.fromData(
|
||||
data: qrData,
|
||||
errorCorrectLevel: QrErrorCorrectLevel.M,
|
||||
);
|
||||
|
||||
Get.bottomSheet(
|
||||
SafeArea(
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(24),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: const BorderRadius.vertical(top: Radius.circular(24)),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.black.withOpacity(0.1),
|
||||
blurRadius: 10,
|
||||
offset: const Offset(0, -2),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text(
|
||||
"Scan QR Code",
|
||||
style: TextStyle(
|
||||
fontSize: 22,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.black87,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
Center(
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
border: Border.all(color: Colors.grey.shade200, width: 1),
|
||||
),
|
||||
child: SizedBox(
|
||||
width: 220,
|
||||
height: 220,
|
||||
child: PrettyQrView(
|
||||
qrImage: QrImage(qrCode),
|
||||
decoration: const PrettyQrDecoration(
|
||||
shape: PrettyQrSmoothSymbol(
|
||||
roundFactor: 0.0,
|
||||
color: Colors.black,
|
||||
),
|
||||
quietZone: PrettyQrModulesQuietZone(2),
|
||||
background: Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
isScrollControlled: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
getTenantId();
|
||||
}
|
||||
}
|
||||
74
lib/Controller/Internetcheck/check_internet.dart
Normal file
74
lib/Controller/Internetcheck/check_internet.dart
Normal file
@@ -0,0 +1,74 @@
|
||||
import 'dart:async';
|
||||
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../Globalwidgets/textwidget.dart';
|
||||
import '../../Helper/Constants/Colorconstants.dart';
|
||||
|
||||
class ConnectivityController extends GetxController {
|
||||
final isOffline = false.obs;
|
||||
final Connectivity _connectivity = Connectivity();
|
||||
late StreamSubscription<List<ConnectivityResult>> _subscription;
|
||||
bool _wasOffline = false;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
_checkInitialConnection();
|
||||
_subscription = _connectivity.onConnectivityChanged.listen(_updateStatus);
|
||||
}
|
||||
|
||||
Future<void> _checkInitialConnection() async {
|
||||
final result = await _connectivity.checkConnectivity();
|
||||
_updateStatus([result.first]);
|
||||
}
|
||||
|
||||
void _updateStatus(List<ConnectivityResult> results) {
|
||||
final isCurrentlyOffline = !results.any((r) => r == ConnectivityResult.mobile || r == ConnectivityResult.wifi);
|
||||
|
||||
if (isCurrentlyOffline != isOffline.value) {
|
||||
isOffline.value = isCurrentlyOffline;
|
||||
|
||||
final context = Get.context!;
|
||||
|
||||
if (isCurrentlyOffline) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
|
||||
SnackBar(
|
||||
content: TextWidget(
|
||||
color: ColorConstants.secondaryColor,
|
||||
text: "You are currently offline",
|
||||
),
|
||||
backgroundColor: Theme.of(context).colorScheme.error,
|
||||
duration: Duration(days: 1), // Until dismissed or back online
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
if (_wasOffline) {
|
||||
ScaffoldMessenger.of(context).clearSnackBars();
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: TextWidget(
|
||||
text: "You are connected to the internet",
|
||||
color: ColorConstants.secondaryColor,
|
||||
),
|
||||
backgroundColor: Colors.green,
|
||||
behavior: SnackBarBehavior.floating,
|
||||
duration: const Duration(seconds: 3),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
_wasOffline = isCurrentlyOffline;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_subscription.cancel();
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
78
lib/Controller/Introscreen/Introscreencontroller.dart
Normal file
78
lib/Controller/Introscreen/Introscreencontroller.dart
Normal file
@@ -0,0 +1,78 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intro_slider/intro_slider.dart';
|
||||
import '../../Helper/Constants/AssetConstants.dart';
|
||||
import '../../Helper/Constants/Colorconstants.dart';
|
||||
import '../../View/Authentication/Logiview.dart';
|
||||
|
||||
|
||||
class IntroScreenController extends GetxController{
|
||||
|
||||
List<ContentConfig> listContentConfig = [];
|
||||
|
||||
void onDonePress() {
|
||||
Get.to(()=> LoginView());
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
|
||||
listContentConfig.add(
|
||||
ContentConfig(
|
||||
title: "Get Online",
|
||||
styleTitle: TextStyle(color: ColorConstants.blackColor,fontSize: 30,fontWeight: FontWeight.bold),
|
||||
maxLineTitle: 2,
|
||||
marginDescription: EdgeInsets.only(top: 0,left: 20,right: 20),
|
||||
description: "Bring your store online and connect with nearby customers.",
|
||||
styleDescription: TextStyle(color: ColorConstants.blackColor,fontSize: 18,fontWeight: FontWeight.normal),
|
||||
pathImage: AssetConstants.onBoarding1,
|
||||
heightImage:Get.height*0.40 ,
|
||||
widthImage: Get.width*0.40 ,
|
||||
backgroundColor: ColorConstants.secondaryColor,
|
||||
),
|
||||
);
|
||||
|
||||
listContentConfig.add(
|
||||
ContentConfig(
|
||||
title: "Get Noticed",
|
||||
maxLineTitle: 2,
|
||||
marginDescription: EdgeInsets.only(top: 0,left: 20,right: 20),
|
||||
styleTitle: TextStyle(
|
||||
color: ColorConstants.blackColor,
|
||||
fontSize: 30,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
description: "Showcase your products to people around you through the Nearle app.",
|
||||
styleDescription: TextStyle(color: ColorConstants.blackColor,fontSize: 18,fontWeight: FontWeight.normal),
|
||||
pathImage: AssetConstants.onBoarding2,
|
||||
heightImage:Get.height*0.40 ,
|
||||
widthImage: Get.width*0.40 ,
|
||||
backgroundColor: ColorConstants.secondaryColor,
|
||||
widgetDescription: Padding(
|
||||
padding: const EdgeInsets.only(top: 20),
|
||||
child: Text(
|
||||
'Showcase your products to people around you through the Nearle app.',
|
||||
style: TextStyle(color: ColorConstants.blackColor,fontSize: 18,fontWeight: FontWeight.normal),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
listContentConfig.add(
|
||||
ContentConfig(
|
||||
title: "Get Simplified",
|
||||
maxLineTitle: 2,
|
||||
marginDescription: EdgeInsets.only(top: 0,left: 20,right: 20),
|
||||
styleTitle: TextStyle(color: ColorConstants.blackColor,fontSize: 30,fontWeight: FontWeight.bold),
|
||||
description: "Delight the community with a personalized online experience. Grow your sales with smart platform.",
|
||||
styleDescription: TextStyle(color: ColorConstants.blackColor,fontSize: 18,fontWeight: FontWeight.normal),
|
||||
pathImage: AssetConstants.onBoarding3,
|
||||
heightImage:Get.height*0.40 ,
|
||||
widthImage: Get.width*0.40 ,
|
||||
backgroundColor: ColorConstants.secondaryColor,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
42
lib/Controller/Location/Locationpermissioncontroller.dart
Normal file
42
lib/Controller/Location/Locationpermissioncontroller.dart
Normal file
@@ -0,0 +1,42 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
|
||||
import '../../Helper/Locationservice/Locationservice.dart';
|
||||
import '../../View/Authentication/Logiview.dart';
|
||||
|
||||
class LocationPermissionController extends GetxController{
|
||||
|
||||
LocationService locationService = LocationService();
|
||||
Position? resultPosition;
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
|
||||
|
||||
getLatLong() async {
|
||||
resultPosition = await locationService.getLocation();
|
||||
// print('resultPosition$resultPosition');
|
||||
if (resultPosition != null) {
|
||||
btnController.reset();
|
||||
Get.to(()=>LoginView());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void doSomething() async {
|
||||
Timer(const Duration(seconds: 1), () async {
|
||||
btnController.success();
|
||||
|
||||
getLatLong();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
137
lib/Controller/More/Editprofile/Editprofilecontroller.dart
Normal file
137
lib/Controller/More/Editprofile/Editprofilecontroller.dart
Normal file
@@ -0,0 +1,137 @@
|
||||
import 'dart:async';
|
||||
import 'package:awesome_dialog/awesome_dialog.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../../Data/Repository/Users/user_repository.dart';
|
||||
import '../../../Helper/toast.dart';
|
||||
import '../../../Model/Request/User/Updateuser/Updateuserrequest.dart';
|
||||
import '../../../Model/Response/User/Updateuser/Updateuserresponse.dart';
|
||||
import '../../../Model/Response/User/Usermodelresponse.dart';
|
||||
import '../../../View/Authentication/Logiview.dart';
|
||||
import '../../Authentication/Authcontroller.dart';
|
||||
|
||||
class EditProfileController extends GetxController{
|
||||
|
||||
|
||||
TextEditingController firstNameController = TextEditingController();
|
||||
TextEditingController lastNameController = TextEditingController();
|
||||
TextEditingController emailController = TextEditingController();
|
||||
TextEditingController contactNoController = TextEditingController();
|
||||
|
||||
UserDetails? userInfo;
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
|
||||
UserRepository userRepository = UserRepository();
|
||||
|
||||
AuthController authController = Get.put(AuthController());
|
||||
|
||||
|
||||
// Future<String?> takePhoto() async {
|
||||
// final ImagePicker imagePicker = ImagePicker();
|
||||
// final XFile? photo = await imagePicker.pickImage(
|
||||
// source: ImageSource.camera,
|
||||
// imageQuality: 50,
|
||||
// );
|
||||
// if (photo == null) {
|
||||
// return null;
|
||||
// }
|
||||
// final imageBytes = await photo.readAsBytes();
|
||||
// String base64Image = base64Encode(imageBytes); // Convert image to base64
|
||||
// print("Base64 Image: $base64Image");
|
||||
// return base64Image;
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
getDetails()async{
|
||||
firstNameController.text = userInfo?.firstname??'';
|
||||
lastNameController.text = userInfo?.lastname??'';
|
||||
emailController.text = userInfo?.authname??'';
|
||||
contactNoController.text = userInfo?.contactno??'';
|
||||
// update();
|
||||
}
|
||||
|
||||
void doSomething() async {
|
||||
Timer(const Duration(seconds: 1), () {
|
||||
btnController.success();
|
||||
profileValidation();
|
||||
});
|
||||
}
|
||||
|
||||
profileValidation ()async{
|
||||
if (firstNameController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter Firstname");
|
||||
}
|
||||
else if (lastNameController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter Lastname");
|
||||
} else if(emailController.text.isEmpty){
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter Email");
|
||||
}
|
||||
else {
|
||||
btnController.reset();
|
||||
userUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
userUpdate()async{
|
||||
userUpdateResult(
|
||||
UserUpdateRequest(
|
||||
userid:userInfo?.userid??0,
|
||||
authname:emailController.text,
|
||||
configid: userInfo?.configid??0,
|
||||
contactno:contactNoController.text,
|
||||
firstname:firstNameController.text,
|
||||
lastname : lastNameController.text,
|
||||
email:emailController.text
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
userUpdateResult(UserUpdateRequest data)async{
|
||||
UserUpdateResponse? result = await userRepository.updateUser(data);
|
||||
if(result?.status == true){
|
||||
AwesomeDialog(
|
||||
context: Get.context!,
|
||||
dialogType: DialogType.warning,
|
||||
// animType: AnimType.BOTTOMSLIDE,
|
||||
descTextStyle: const TextStyle(fontSize: 16,),
|
||||
desc: 'Update successful, Kindly login to the app for the changes to take effect',
|
||||
dismissOnTouchOutside: false,
|
||||
btnOkText: 'Logout',
|
||||
// btnCancelOnPress: () {
|
||||
// Get.to(OrderDetails(data: data));
|
||||
// },
|
||||
btnOkOnPress: () async{
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
prefs.remove('token');
|
||||
prefs.remove('fcmToken');
|
||||
print('remove....fcmToken');
|
||||
prefs.clear();
|
||||
|
||||
prefs.remove('userMobile');
|
||||
authController.loginPhoneNumberController.clear();
|
||||
// authController.passwordController.clear();
|
||||
Get.offAll(()=>LoginView());
|
||||
},
|
||||
).show();
|
||||
|
||||
// Get.to(()=>HomePage(selectedIndex: 3,));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,470 @@
|
||||
import 'package:country_currency_pickers/country.dart';
|
||||
import 'package:country_currency_pickers/utils/utils.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:get/get.dart' hide Response;
|
||||
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../../Data/Repository/Applocation/Applocationrepository.dart';
|
||||
import '../../../../Data/Repository/Location/Addlocation/Addlocationrepository.dart';
|
||||
import '../../../../Data/Repository/Location/Updatelocation/Updatelocationrepository.dart';
|
||||
import '../../../../Globalwidgets/Googleplaces/Googleplaces.dart';
|
||||
import '../../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../../Helper/Constants/Colorconstants.dart';
|
||||
import '../../../../Helper/Locationservice/Locationservice.dart';
|
||||
import '../../../../Helper/location_service.dart';
|
||||
import '../../../../Helper/toast.dart';
|
||||
import '../../../../Model/Request/Location/Addlocation/Addlocationrequest.dart';
|
||||
import '../../../../Model/Request/Location/Updatelocation/Updatelocationrequest.dart';
|
||||
import '../../../../Model/Response/Applocations/Applocationresponse.dart';
|
||||
import '../../../../Model/Response/Location/Addlocation/Addlocationresponse.dart';
|
||||
import '../../../../Model/Response/Location/Updatelocation/Updatelocationresponse.dart';
|
||||
import '../../../../Model/Response/Tenantlocation/Getlocationbyidresponse.dart';
|
||||
import '../../../../View/More/Locations/Locationview.dart';
|
||||
|
||||
class AddLocationController extends GetxController{
|
||||
|
||||
String? dialCode;
|
||||
String? googleApiKey;
|
||||
String? initialCountry;
|
||||
String? addressField;
|
||||
String? latitude;
|
||||
String? longitude;
|
||||
String? city;
|
||||
String? state;
|
||||
String? suburb;
|
||||
String appLocationName = '';
|
||||
|
||||
|
||||
String? min1Label;
|
||||
String? min2Label;
|
||||
String? min3Label;
|
||||
|
||||
String describeAddLocationUrl = '${ApiConstants.describeUrl}/9/en_us';
|
||||
|
||||
|
||||
int deliveryMin = 30;
|
||||
int cancellationSec = 20;
|
||||
|
||||
int appLocationId = 0;
|
||||
int? moduleId;
|
||||
int? locationId;
|
||||
|
||||
|
||||
bool sec1 = true;
|
||||
bool sec2 = false;
|
||||
bool sec3 = false;
|
||||
|
||||
bool min1 = true;
|
||||
bool min2 = false;
|
||||
bool min3 = false;
|
||||
|
||||
bool editMode = false;
|
||||
bool shimmer = true;
|
||||
bool isEnterAddress = false;
|
||||
bool progress = false;
|
||||
|
||||
|
||||
List<AppLocationDetails> locations = [];
|
||||
|
||||
Position? resultPosition;
|
||||
|
||||
Country selectedDialogCountry = CountryPickerUtils.getCountryByIsoCode('IN');
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
|
||||
|
||||
TenantLocationDetails? locationInfo;
|
||||
|
||||
|
||||
var describeValue;
|
||||
|
||||
final searchText = ''.obs;
|
||||
final predictions = <Map<String, dynamic>>[].obs;
|
||||
final selectedPlace = {}.obs;
|
||||
|
||||
final GooglePlacesService placesService = GooglePlacesService();
|
||||
|
||||
LocationService locationService = LocationService();
|
||||
|
||||
|
||||
AppLocationRepository appLocationRepository = AppLocationRepository();
|
||||
|
||||
final GlobalKey<State> _keyLoader = new GlobalKey<State>();
|
||||
|
||||
|
||||
TextEditingController nameController = TextEditingController();
|
||||
TextEditingController emailController = TextEditingController();
|
||||
TextEditingController addressController = TextEditingController();
|
||||
TextEditingController phoneNoController = TextEditingController();
|
||||
TextEditingController postalCodeController = TextEditingController();
|
||||
TextEditingController stateController = new TextEditingController();
|
||||
TextEditingController cityController = new TextEditingController();
|
||||
TextEditingController suburbController = new TextEditingController();
|
||||
|
||||
UpdateLocationRepository updateLocationRepository = UpdateLocationRepository();
|
||||
AddLocationRepository addLocationRepository = AddLocationRepository();
|
||||
|
||||
|
||||
|
||||
onSearchTextChanged(String text) async {
|
||||
searchText.value = text;
|
||||
if (text.length > 2) {
|
||||
try {
|
||||
final places = await placesService.getPlacesPredictions(text);
|
||||
predictions.assignAll(places);
|
||||
update();
|
||||
|
||||
} catch (e) {
|
||||
print('Error fetching predictions: $e');
|
||||
}
|
||||
} else {
|
||||
predictions.clear();
|
||||
update();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
getPlaceDetails(String placeId,locationAddress) async {
|
||||
try {
|
||||
final details = await placesService.getPlaceDetails(placeId);
|
||||
selectedPlace.value = details;
|
||||
print('getPlaceDetailslatitude ${selectedPlace['geometry']['location']['lat']}');
|
||||
print('getPlaceDetailslongitude ${selectedPlace['geometry']['location']['lng']}');
|
||||
getAddressFromLatLng(selectedPlace['geometry']['location']['lat'],selectedPlace['geometry']['location']['lng'],locationAddress);
|
||||
} catch (e) {
|
||||
print('Error fetching place details: $e');
|
||||
}
|
||||
}
|
||||
|
||||
getAddressFromLatLng(double latitudes, double longitudes,locationAddress) async {
|
||||
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
|
||||
Placemark place = placemarks[0];
|
||||
latitude = double.parse(latitudes.toString()).toString();
|
||||
longitude = double.parse(longitudes.toString()).toString();
|
||||
city = '${place.locality}';
|
||||
cityController.text = '${place.locality}';
|
||||
stateController.text = '${place.administrativeArea}';
|
||||
state = '${place.administrativeArea}';
|
||||
suburbController.text = "${place.subLocality!.isNotEmpty?place.subLocality:place.street}" ;
|
||||
suburb = place.subLocality!.isNotEmpty?place.subLocality:place.street;
|
||||
postalCodeController.text = '${place.postalCode}';
|
||||
addressController.text = locationAddress??'${place.street}, ${place.subLocality},${place.locality},${place.administrativeArea} ${place.subAdministrativeArea},${place.country},${place.postalCode}.';
|
||||
isEnterAddress = true;
|
||||
|
||||
// address = locationAddress??'${place.street}, ${place.subLocality},${place.locality},${place.administrativeArea} ${place.subAdministrativeArea},${place.country},${place.postalCode}.';
|
||||
predictions.clear();
|
||||
update();
|
||||
|
||||
|
||||
|
||||
print('latitude $latitude');
|
||||
print('longitude $longitude');
|
||||
print('currentLocationSuburb $suburb');
|
||||
print('city $city');
|
||||
print('state $state');
|
||||
print('postalCode ${postalCodeController.text}');
|
||||
}).catchError((e) {
|
||||
debugPrint(e);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
getAppLocations() async{
|
||||
GetAppLocations? result = await appLocationRepository.getAppLocations();
|
||||
if(result?.code == 200){
|
||||
locations = result?.details??[];
|
||||
shimmer = false;
|
||||
setValues();
|
||||
update();
|
||||
}
|
||||
else{
|
||||
Toast.showToast("${result?.message}");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setValues() {
|
||||
print('setValueseditMode $editMode');
|
||||
// print('addlocationnamesssssss${locationInfo['locationName']}');
|
||||
if (editMode) {
|
||||
locationInfo = locationInfo;
|
||||
|
||||
// print(locationInfo);
|
||||
locationId = locationInfo?.locationid;
|
||||
nameController.text = locationInfo?.locationname??'';
|
||||
emailController.text = locationInfo?.locationemail??'';
|
||||
addressController.text = locationInfo?.locationaddress??'';
|
||||
postalCodeController.text = locationInfo?.locationpostcode??'';
|
||||
suburb = locationInfo?.locationsuburb??'';
|
||||
suburbController.text = locationInfo?.locationsuburb??'';
|
||||
cityController.text = locationInfo?.locationcity??'';
|
||||
city = locationInfo?.locationcity??'';
|
||||
// print('${locationInfo['openingtime'].toString()}open time');
|
||||
|
||||
state = locationInfo?.locationstate??'';
|
||||
stateController.text = locationInfo?.locationstate??'';
|
||||
latitude = locationInfo?.locationlatitude??'';
|
||||
longitude = locationInfo?.locationlong??'';
|
||||
|
||||
// countryCode = locationInfo['countrycode'];
|
||||
|
||||
phoneNoController.text = locationInfo?.locationcontact??'';
|
||||
// delivery = locationInfo['delivery'];
|
||||
// deliveryCharges = locationInfo['deliverycharges'] ?? [];
|
||||
cancellationSec = locationInfo?.cancelsecs??0;
|
||||
deliveryMin = locationInfo?.deliverymins??0;
|
||||
// deliveryType = locationInfo['deliverytype'];
|
||||
|
||||
|
||||
if (deliveryMin == 30) {
|
||||
min1 = true;
|
||||
min2 = false;
|
||||
min3 = false;
|
||||
} else if (deliveryMin == 60) {
|
||||
min1 = false;
|
||||
min2 = true;
|
||||
min3 = false;
|
||||
} else if (deliveryMin == 120) {
|
||||
min1 = false;
|
||||
min2 = false;
|
||||
min3 = true;
|
||||
}
|
||||
|
||||
if (cancellationSec == 20) {
|
||||
sec1 = true;
|
||||
sec2 = false;
|
||||
sec3 = false;
|
||||
} else if (cancellationSec == 30) {
|
||||
sec1 = false;
|
||||
sec2 = true;
|
||||
sec3 = false;
|
||||
} else if (cancellationSec == 40) {
|
||||
sec1 = false;
|
||||
sec2 = false;
|
||||
sec3 = true;
|
||||
}
|
||||
appLocationId = locationInfo?.applocationid??0;
|
||||
for (var loc in locations) {
|
||||
if (loc.applocationid == appLocationId) {
|
||||
appLocationName = loc.city??'';
|
||||
return;
|
||||
}
|
||||
}
|
||||
update();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
describeValidation() {
|
||||
if (nameController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please enter location name");
|
||||
} else if (emailController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
// Toast.showToast("Please enter email");
|
||||
Toast.showToast("Please enter email");
|
||||
} else if (RegExp(
|
||||
r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+")
|
||||
.hasMatch(emailController.text) ==
|
||||
false) {
|
||||
btnController.reset();
|
||||
// Toast.showToast("Enter valid email");
|
||||
Toast.showToast("Enter valid email");
|
||||
} else if (phoneNoController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please enter contact no");
|
||||
}
|
||||
else if (phoneNoController.text.length !=10) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Incorrect contact no");
|
||||
}
|
||||
// else if (appLocationId == 0) {
|
||||
// Toast.showToast("Please select your location");
|
||||
// progress = true;
|
||||
// update();
|
||||
//
|
||||
// }
|
||||
else if (addressController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please enter your location");
|
||||
} else if (suburbController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
isEnterAddress = true;
|
||||
update();
|
||||
Toast.showToast("Please enter suburb");
|
||||
} else if (cityController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
isEnterAddress = true;
|
||||
update();
|
||||
Toast.showToast("Please enter city");
|
||||
}
|
||||
// else if (city.toString().toLowerCase() !=
|
||||
// appLocationName.toString().toLowerCase()) {
|
||||
//
|
||||
// setState(() {
|
||||
// isEnterAddress = true;
|
||||
// });
|
||||
// Toast.showToast(
|
||||
// "Entered address and selected location varies please enter correct location");
|
||||
// }
|
||||
else if (stateController.text.isEmpty) {
|
||||
isEnterAddress = true;
|
||||
update();
|
||||
Toast.showToast("Please enter state");
|
||||
} else if (postalCodeController.text.isEmpty) {
|
||||
Toast.showToast("Please enter postcode");
|
||||
}
|
||||
// else if (deliveryMin == 0) {
|
||||
// Toast.showToast("Please select delivery mins ");
|
||||
// }
|
||||
else {
|
||||
if (editMode == false) {
|
||||
progress = true;
|
||||
update();
|
||||
addLocation();
|
||||
}
|
||||
else {
|
||||
updateLocation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> showLoader(BuildContext context, GlobalKey key) async {
|
||||
return showDialog<void>(
|
||||
|
||||
context: context,
|
||||
barrierDismissible: false, // user must tap button!
|
||||
builder: (BuildContext context) {
|
||||
return SimpleDialog(
|
||||
backgroundColor: Colors.white,
|
||||
|
||||
key: key,
|
||||
// title: Text('Warning'),
|
||||
children: [
|
||||
Center(
|
||||
child: Column(children: [
|
||||
CircularProgressIndicator(color: ColorConstants.primaryColor),
|
||||
SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
Text(
|
||||
"Please wait....",
|
||||
style: TextStyle(color: ColorConstants.primaryColor),
|
||||
)
|
||||
]),
|
||||
)
|
||||
]);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
addLocation()async{
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
var tenantId = prefs.getInt('tenantId');
|
||||
var moduleId = prefs.getInt('moduleId');
|
||||
var appLocationId = prefs.getInt('appLocationId');
|
||||
var partnerId = prefs.getInt('partnerId');
|
||||
addLocationResult(
|
||||
AddLocation(
|
||||
locationid:0,
|
||||
tenantid:tenantId,
|
||||
moduleid:moduleId,
|
||||
applocationid:appLocationId,
|
||||
locationname:"${nameController.text}",
|
||||
email:"${emailController.text}",
|
||||
contactno:"${phoneNoController.text}",
|
||||
address:"${addressController.text}",
|
||||
suburb:"${suburbController.text}",
|
||||
state:"${stateController.text}",
|
||||
city:"${cityController.text}",
|
||||
postcode:"${postalCodeController.text}",
|
||||
latitude:"$latitude",
|
||||
longitude:"$longitude",
|
||||
partnerid:partnerId,
|
||||
opentime:"9:00",
|
||||
closetime:"21:00",
|
||||
deliverytype:0,
|
||||
deliverymins:60,
|
||||
cancelsecs:20
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
addLocationResult(AddLocation data)async{
|
||||
AddLocationResponse? result = await addLocationRepository.addLocation(data);
|
||||
if(result?.status == true){
|
||||
locationId = 0;
|
||||
nameController.clear();
|
||||
emailController.clear();
|
||||
addressController.clear();
|
||||
postalCodeController.clear();
|
||||
suburb = '';
|
||||
suburbController.clear();
|
||||
cityController.clear();
|
||||
city = '';
|
||||
state = '';
|
||||
stateController.clear();
|
||||
latitude = '';
|
||||
longitude = '';
|
||||
phoneNoController.clear();
|
||||
isEnterAddress = false;
|
||||
Get.to(()=>LocationView());
|
||||
}
|
||||
else{
|
||||
Toast.showToast('Something went wrong');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
updateLocation()async{
|
||||
updateLocationResult(
|
||||
UpdateLocation(
|
||||
locationid:locationInfo?.locationid??0,
|
||||
tenantid:locationInfo?.tenantid??0,
|
||||
moduleid:locationInfo?.moduleid??0,
|
||||
applocationid:locationInfo?.applocationid??0,
|
||||
locationname:"${nameController.text}",
|
||||
email:"${emailController.text}",
|
||||
contactno:"${phoneNoController.text}",
|
||||
address:"${addressController.text}",
|
||||
suburb:"${suburbController.text}",
|
||||
state:"${stateController.text}",
|
||||
city:"${cityController.text}",
|
||||
postcode:"${postalCodeController.text}",
|
||||
latitude:"$latitude",
|
||||
longitude:"$longitude",
|
||||
partnerid:locationInfo?.partnerid??0,
|
||||
opentime:"9:00",
|
||||
closetime:"21:00",
|
||||
deliverytype:0,
|
||||
deliverymins:60,
|
||||
cancelsecs:20
|
||||
)
|
||||
|
||||
);
|
||||
}
|
||||
updateLocationResult(UpdateLocation data)async{
|
||||
UpdateLocationResponse? result = await updateLocationRepository.updateLocation(data);
|
||||
if(result?.status == true){
|
||||
Get.to(()=>LocationView());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
45
lib/Controller/More/Locations/Locationcontroller.dart
Normal file
45
lib/Controller/More/Locations/Locationcontroller.dart
Normal file
@@ -0,0 +1,45 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../Data/Repository/Location/GetLocation/getlocationrepository.dart';
|
||||
import '../../../Model/Response/Tenantlocation/Getlocationbyidresponse.dart';
|
||||
|
||||
class LocationController extends GetxController{
|
||||
|
||||
int? tenantId;
|
||||
int? moduleId;
|
||||
|
||||
List<TenantLocationDetails>locations = [];
|
||||
|
||||
bool shimmer = true;
|
||||
|
||||
|
||||
GetLocationsRepository getLocationsRepository= GetLocationsRepository();
|
||||
|
||||
|
||||
getLocation()async{
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId')??0;
|
||||
moduleId = prefs.getInt('moduleId')??0;
|
||||
GetLocationByTenantId? result = await getLocationsRepository.getLocationById();
|
||||
getLocationByIdResult(result!);
|
||||
}
|
||||
|
||||
getLocationByIdResult(GetLocationByTenantId data) async {
|
||||
print('location result');
|
||||
if (data.code == 200) {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
locations = data.details!;
|
||||
shimmer = false;
|
||||
update();
|
||||
print('usernamesss ${prefs.getString('userName')??''}');
|
||||
print('gettenantIdinset${prefs.getInt('tenantId')!}');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class StaffDetailsController extends GetxController{
|
||||
|
||||
bool shimmer = true;
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
206
lib/Controller/More/Morecontroller.dart
Normal file
206
lib/Controller/More/Morecontroller.dart
Normal file
@@ -0,0 +1,206 @@
|
||||
import 'package:awesome_snackbar_content/awesome_snackbar_content.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart' hide Response;
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
import '../../Data/Repository/Users/user_repository.dart';
|
||||
import '../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../Helper/Logger.dart';
|
||||
import '../../Model/Response/User/Usermodelresponse.dart';
|
||||
import '../../View/Authentication/Logiview.dart';
|
||||
import '../../View/More/Editprofile/Editprofileview.dart';
|
||||
import '../../View/More/Faqview/faqtabs.dart';
|
||||
import '../../View/More/Locations/Locationview.dart';
|
||||
import '../../View/More/Notification/Notificationview.dart';
|
||||
import '../../View/More/Staffs/Staffview.dart';
|
||||
import '../Authentication/Authcontroller.dart';
|
||||
|
||||
class MoreController extends GetxController{
|
||||
String? userName;
|
||||
String? userContact;
|
||||
String? version;
|
||||
String? token;
|
||||
String? dialCode;
|
||||
String? imageUrl;
|
||||
String? header;
|
||||
String? locationLabel;
|
||||
String? profileLabel;
|
||||
String? FAQLabel;
|
||||
String? logoutLabel;
|
||||
String? actionsLabel;
|
||||
String? subscriptionLabel;
|
||||
String? paymentsLabel;
|
||||
String? communityLabel;
|
||||
String? preferencesLabel;
|
||||
String? userLabel;
|
||||
String? settingsLabel;
|
||||
String? notificationsLabel;
|
||||
|
||||
int? versionValue;
|
||||
int? roleId;
|
||||
int? tenantId;
|
||||
int? userId;
|
||||
|
||||
UserDetails? userInfo;
|
||||
var describeValue;
|
||||
String? currentVersion;
|
||||
|
||||
|
||||
AuthController authController = Get.put(AuthController());
|
||||
|
||||
UserRepository userRepository = UserRepository();
|
||||
|
||||
String describeCompanyUrl = '${ApiConstants.describeUrl}/51/en_us';
|
||||
|
||||
toUser() {
|
||||
if(roleId ==1) {
|
||||
Get.to(() => StaffsView());
|
||||
}
|
||||
else{
|
||||
var snackBar = SnackBar(
|
||||
elevation: 0,
|
||||
behavior: SnackBarBehavior.floating,
|
||||
backgroundColor: Colors.transparent,
|
||||
content: AwesomeSnackbarContent(
|
||||
title: 'Support',
|
||||
message: 'Could not view staffs at this moment. Kindly contact app admin.',
|
||||
contentType: ContentType.warning,
|
||||
color: Colors.red.withAlpha(200),
|
||||
),
|
||||
);
|
||||
|
||||
ScaffoldMessenger.of(Get.context!).showSnackBar(snackBar);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
toFaq() {
|
||||
Get.to(()=>FaqTabs());
|
||||
}
|
||||
|
||||
toSettings() {
|
||||
|
||||
}
|
||||
|
||||
toLocation() {
|
||||
Get.to(()=>LocationView());
|
||||
}
|
||||
|
||||
toPayment() {}
|
||||
|
||||
toEditProfile() {
|
||||
Get.to(()=>EditProfile(data:userInfo,));
|
||||
|
||||
}
|
||||
|
||||
toNotification() {
|
||||
Get.to(()=>NotificationView());
|
||||
}
|
||||
|
||||
Future<void> confirmLogout(BuildContext context) async {
|
||||
final shouldLogout = await showDialog<bool>(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return AlertDialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
),
|
||||
title: const Text(
|
||||
'Confirm Logout',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
content: const Text('Are you sure you want to log out?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(context, false),
|
||||
child: const Text('Cancel'),
|
||||
),
|
||||
ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.redAccent,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
),
|
||||
onPressed: () => Navigator.pop(context, true),
|
||||
child: const Text('Logout'),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
if (shouldLogout == true) {
|
||||
await toLogin();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> toLogin() async {
|
||||
print('Logging out user...');
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
|
||||
await prefs.clear(); // Clears all stored keys and values
|
||||
authController.loginPhoneNumberController.clear();
|
||||
authController.termsChecking = false;
|
||||
|
||||
print('Redirecting to login view...');
|
||||
Get.offAll(() => LoginView());
|
||||
}
|
||||
|
||||
|
||||
|
||||
getToken() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
token = prefs.getString('tenantFcmToken');
|
||||
roleId = prefs.getInt('roleId');
|
||||
versionValue = prefs.getInt('versionValue');
|
||||
userName = prefs.getString('userName');
|
||||
userContact = '+91${prefs.getString('tenantContactNo')}';
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
userId = prefs.getInt('userId');
|
||||
update();
|
||||
get(token??'');
|
||||
}
|
||||
|
||||
|
||||
get(String token) async{
|
||||
|
||||
UserModelResponse? result = await userRepository.getUser(token);
|
||||
if(result?.status == true){
|
||||
getResults(result);
|
||||
print('resultprofilecontroller${result?.details?.toJson()}');
|
||||
}
|
||||
}
|
||||
|
||||
getResults(UserModelResponse? data) {
|
||||
// var data = json.encode(userData);
|
||||
userInfo = data?.details;
|
||||
print('userInfofullname ${userInfo?.fullname}');
|
||||
userContact = '+91${data?.details!.contactno}';
|
||||
userName = "${data?.details!.fullname.toString()}";
|
||||
// imageUrl = "${data.details!.profileimage.toString()}";
|
||||
roleId =data?.details!.roleid;
|
||||
update();
|
||||
if (roleId == 2) {
|
||||
// getWeekdayDetails();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Future<void> getAppVersion() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
PackageInfo packageInfo = await PackageInfo.fromPlatform();
|
||||
|
||||
String version = packageInfo.version;
|
||||
currentVersion = version;
|
||||
prefs.setString('CurrentVersion', currentVersion!);
|
||||
logger.i('Current version from main: $currentVersion');
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
getAppVersion();
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
77
lib/Controller/More/Notification/Notificationcontroller.dart
Normal file
77
lib/Controller/More/Notification/Notificationcontroller.dart
Normal file
@@ -0,0 +1,77 @@
|
||||
import 'dart:convert';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
|
||||
class NotificationController extends GetxController {
|
||||
RxBool isLoading = false.obs;
|
||||
RxList<NotificationModel> notifications = <NotificationModel>[].obs;
|
||||
|
||||
Future<void> fetchNotifications() async {
|
||||
isLoading.value = true;
|
||||
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
|
||||
// SAFE READ → Handles int or string
|
||||
dynamic t = prefs.get("tenantId");
|
||||
dynamic l = prefs.get("locationId");
|
||||
|
||||
String tenantId = t?.toString() ?? "";
|
||||
String locationId = l?.toString() ?? "";
|
||||
|
||||
final url =
|
||||
"https://jupiter.nearle.app/live/api/v1/utils/gettenantnotifications/?tenantid=$tenantId&locationid=$locationId";
|
||||
|
||||
try {
|
||||
var response = await http.get(Uri.parse(url));
|
||||
|
||||
print(url);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = jsonDecode(response.body);
|
||||
|
||||
if (data["status"] == true) {
|
||||
notifications.value = (data["details"] as List)
|
||||
.map((e) => NotificationModel.fromJson(e))
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
print("Notification API Error: $e");
|
||||
}
|
||||
|
||||
isLoading.value = false;
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
fetchNotifications(); // auto load on page open
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
class NotificationModel {
|
||||
final int notificationid;
|
||||
final String title;
|
||||
final String message;
|
||||
final String notificationdate;
|
||||
|
||||
NotificationModel({
|
||||
required this.notificationid,
|
||||
required this.title,
|
||||
required this.message,
|
||||
required this.notificationdate,
|
||||
});
|
||||
|
||||
factory NotificationModel.fromJson(Map<String, dynamic> json) {
|
||||
return NotificationModel(
|
||||
notificationid: json["notificationid"],
|
||||
title: json["title"] ?? "",
|
||||
message: json["message"] ?? "",
|
||||
notificationdate: json["notificationdate"] ?? "",
|
||||
);
|
||||
}
|
||||
}
|
||||
144
lib/Controller/More/Staffs/Addstaff/Addstaffcontroller.dart
Normal file
144
lib/Controller/More/Staffs/Addstaff/Addstaffcontroller.dart
Normal file
@@ -0,0 +1,144 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../../../Data/Repository/Staffs/Addstaff/Addstaffrepository.dart';
|
||||
import '../../../../Data/Repository/Tenantlocation/Getlocationrepository.dart';
|
||||
import '../../../../Helper/toast.dart';
|
||||
import '../../../../Model/Request/Staffs/Addstaffs/Addstaffsrequest.dart';
|
||||
import '../../../../Model/Response/Staffs/Addstaffs/Addstaffresponse.dart';
|
||||
import '../../../../Model/Response/Tenantlocation/Getlocationbyidresponse.dart';
|
||||
import '../../../../View/More/Staffs/Staffview.dart';
|
||||
|
||||
class AddStaffController extends GetxController{
|
||||
|
||||
String? locationName;
|
||||
String? locationAddress;
|
||||
String? locationSuburb;
|
||||
String? locationCity;
|
||||
String? locationState;
|
||||
String? locationPostcode;
|
||||
|
||||
int?tenantId;
|
||||
int?appLocationId;
|
||||
int?partnerId;
|
||||
|
||||
|
||||
RxInt locationId = 0.obs;
|
||||
|
||||
|
||||
RxBool isLocation = false.obs;
|
||||
RxBool progress = false.obs;
|
||||
|
||||
|
||||
List<TenantLocationDetails>? tenantLocation;
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
|
||||
|
||||
|
||||
|
||||
TextEditingController nameController = TextEditingController();
|
||||
TextEditingController lastNameController = TextEditingController();
|
||||
TextEditingController phoneNoController = TextEditingController();
|
||||
TextEditingController emailController = TextEditingController();
|
||||
|
||||
GetLocationsRepository getLocationsRepository= GetLocationsRepository();
|
||||
AddStaffRepository addStaffRepository = AddStaffRepository();
|
||||
|
||||
|
||||
getLocation()async {
|
||||
GetLocationByTenantId? result = await getLocationsRepository.getTenantLocationById();
|
||||
tenantLocation = result?.details??[];
|
||||
update();
|
||||
print('resultgetLocation${result?.toJson()}');
|
||||
}
|
||||
|
||||
|
||||
describeValidation({bool isUpdate = false}) {
|
||||
if (nameController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter first name");
|
||||
// AwesomeHelper.createAwesome(title: "title", message: "message");
|
||||
|
||||
} else if (lastNameController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter last name");
|
||||
} else if (phoneNoController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter contact no");
|
||||
} else if (emailController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
// Toast.showToast("Please enter email");
|
||||
Toast.showToast("Please Enter email");
|
||||
} else if (RegExp(
|
||||
r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+")
|
||||
.hasMatch(emailController.text) ==
|
||||
false) {
|
||||
btnController.reset();
|
||||
// Toast.showToast("Enter valid email");
|
||||
Toast.showToast("Please enter vaid email address");
|
||||
} else if (locationId.value ==0) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please select location");
|
||||
} else {
|
||||
|
||||
progress.value = true;
|
||||
addStaff();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
addStaff()async{
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
appLocationId = prefs.getInt('appLocationId');
|
||||
partnerId = prefs.getInt('partnerId');
|
||||
|
||||
addStaffsResult(
|
||||
CreateStaffRequest(
|
||||
userid:0,
|
||||
authname:"${emailController.text}",
|
||||
configid: 1,
|
||||
contactno:"${phoneNoController.text}",
|
||||
firstname:"${nameController.text}",
|
||||
lastrname:"${lastNameController.text}",
|
||||
email:"${emailController.text}",
|
||||
address:"$locationAddress",
|
||||
suburb:"$locationSuburb",
|
||||
city:"$locationCity",
|
||||
state:"$locationState",
|
||||
postcode:"$locationPostcode",
|
||||
roleid:2,
|
||||
applocationid:appLocationId,
|
||||
partnerid:partnerId,
|
||||
tenantid:tenantId,
|
||||
locationid:locationId.value
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
addStaffsResult(CreateStaffRequest data)async{
|
||||
CreateStaffResponse? result = await addStaffRepository.addStaff(data);
|
||||
if(result?.status == true){
|
||||
Get.to(()=>StaffsView());
|
||||
nameController.clear();
|
||||
lastNameController.clear();
|
||||
phoneNoController.clear();
|
||||
emailController.clear();
|
||||
locationId.value = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
29
lib/Controller/More/Staffs/Staffscontroller.dart
Normal file
29
lib/Controller/More/Staffs/Staffscontroller.dart
Normal file
@@ -0,0 +1,29 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../Data/Repository/Staffs/Getstaffsrepository.dart';
|
||||
import '../../../Model/Response/Staffs/Getstaffsresponse.dart';
|
||||
|
||||
class StaffsController extends GetxController{
|
||||
|
||||
bool shimmer = true;
|
||||
|
||||
List<StaffDetails>getStaff = [];
|
||||
|
||||
GetStaffsRepository getStaffsRepository = GetStaffsRepository();
|
||||
|
||||
|
||||
getStaffs()async{
|
||||
GetStaffsResponse? result = await getStaffsRepository.getStaffs();
|
||||
if(result?.status == true){
|
||||
getStaff = result?.details??[];
|
||||
shimmer = false;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import '../../../../Data/Repository/Staffs/Updatestaff/Updatestaffrepository.dart';
|
||||
import '../../../../Data/Repository/Tenantlocation/Getlocationrepository.dart';
|
||||
import '../../../../Helper/toast.dart';
|
||||
import '../../../../Model/Request/Staffs/UpdateStaff/Updatestaffrequest.dart';
|
||||
import '../../../../Model/Response/Staffs/Getstaffsresponse.dart';
|
||||
import '../../../../Model/Response/Staffs/Updatestaff/Updatestaffresponse.dart';
|
||||
import '../../../../Model/Response/Tenantlocation/Getlocationbyidresponse.dart';
|
||||
import '../../../../View/More/Staffs/Staffview.dart';
|
||||
|
||||
class UpdateStaffController extends GetxController{
|
||||
|
||||
String? locationName;
|
||||
String? locationAddress;
|
||||
String? locationSuburb;
|
||||
String? locationCity;
|
||||
String? locationState;
|
||||
String? locationPostcode;
|
||||
|
||||
int?tenantId;
|
||||
int?appLocationId;
|
||||
int?partnerId;
|
||||
int?userId;
|
||||
int?roleId;
|
||||
|
||||
|
||||
RxInt locationId = 0.obs;
|
||||
|
||||
|
||||
RxBool isLocation = false.obs;
|
||||
RxBool progress = false.obs;
|
||||
|
||||
StaffDetails? staffData;
|
||||
|
||||
List<TenantLocationDetails>? tenantLocation;
|
||||
|
||||
TextEditingController nameController = TextEditingController();
|
||||
TextEditingController lastNameController = TextEditingController();
|
||||
TextEditingController phoneNoController = TextEditingController();
|
||||
TextEditingController emailController = TextEditingController();
|
||||
|
||||
GetLocationsRepository getLocationsRepository= GetLocationsRepository();
|
||||
|
||||
UpdateStaffRepository updateStaffRepository = UpdateStaffRepository();
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
|
||||
|
||||
|
||||
setValues(){
|
||||
nameController.text = staffData?.firstname??'';
|
||||
lastNameController.text = staffData?.lastname??'';
|
||||
phoneNoController.text = staffData?.contactno??'';
|
||||
emailController.text = staffData?.email??'';
|
||||
locationId.value = staffData?.locationid??0;
|
||||
tenantId = staffData?.tenantid??0;
|
||||
appLocationId = staffData?.applocationid??0;
|
||||
partnerId = staffData?.partnerid??0;
|
||||
userId = staffData?.userid??0;
|
||||
roleId = staffData?.roleid??0;
|
||||
update();
|
||||
}
|
||||
|
||||
getLocation()async {
|
||||
GetLocationByTenantId? result = await getLocationsRepository.getTenantLocationById();
|
||||
tenantLocation = result?.details??[];
|
||||
update();
|
||||
print('resultgetLocation${result?.toJson()}');
|
||||
}
|
||||
|
||||
|
||||
describeValidation({bool isUpdate = false}) {
|
||||
if (nameController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter first name");
|
||||
// AwesomeHelper.createAwesome(title: "title", message: "message");
|
||||
|
||||
} else if (lastNameController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter last name");
|
||||
} else if (phoneNoController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please Enter contact no");
|
||||
} else if (emailController.text.isEmpty) {
|
||||
btnController.reset();
|
||||
// Toast.showToast("Please enter email");
|
||||
Toast.showToast("Please Enter email");
|
||||
} else if (RegExp(
|
||||
r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+")
|
||||
.hasMatch(emailController.text) ==
|
||||
false) {
|
||||
btnController.reset();
|
||||
// Toast.showToast("Enter valid email");
|
||||
Toast.showToast("Please enter vaid email address");
|
||||
} else if (locationId.value ==0) {
|
||||
btnController.reset();
|
||||
Toast.showToast("Please select location}");
|
||||
} else {
|
||||
|
||||
progress.value = true;
|
||||
updateStaff();
|
||||
}
|
||||
}
|
||||
|
||||
updateStaff()async {
|
||||
updateStaffResult(
|
||||
UpdateStaffRequest(
|
||||
userid:userId,
|
||||
authname:"${emailController.text}",
|
||||
configid: 1,
|
||||
contactno:"${phoneNoController.text}",
|
||||
firstname:"${nameController.text}",
|
||||
lastrname:"${lastNameController.text}",
|
||||
email:"${emailController.text}",
|
||||
address:"$locationAddress",
|
||||
suburb:"$locationSuburb",
|
||||
city:"$locationCity",
|
||||
state:"$locationState",
|
||||
postcode:"$locationPostcode",
|
||||
roleid:roleId,
|
||||
applocationid:appLocationId,
|
||||
partnerid:partnerId,
|
||||
tenantid:tenantId,
|
||||
locationid:locationId.value
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
updateStaffResult(UpdateStaffRequest data)async{
|
||||
UpdateStaffResponse? result = await updateStaffRepository.updateStaff(data);
|
||||
if(result?.status == true){
|
||||
Get.to(()=>StaffsView());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
26
lib/Controller/More/web_view_controller.dart
Normal file
26
lib/Controller/More/web_view_controller.dart
Normal file
@@ -0,0 +1,26 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
class WebViewAppController extends GetxController {
|
||||
late final WebViewController webViewController;
|
||||
final isLoading = true.obs;
|
||||
|
||||
|
||||
void initializeWebViewController(String url) {
|
||||
webViewController = WebViewController()
|
||||
..setJavaScriptMode(JavaScriptMode.unrestricted)
|
||||
..loadRequest(Uri.parse(url));
|
||||
|
||||
webViewController.setNavigationDelegate(
|
||||
NavigationDelegate(
|
||||
onPageStarted: (_) => setLoading(true),
|
||||
onPageFinished: (_) => setLoading(false),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
void setLoading(bool value) {
|
||||
isLoading.value = value;
|
||||
}
|
||||
}
|
||||
179
lib/Controller/Orders/Ordercontroller.dart
Normal file
179
lib/Controller/Orders/Ordercontroller.dart
Normal file
@@ -0,0 +1,179 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../Data/Repository/Summary/ordersrepository.dart';
|
||||
import '../../Helper/Logger.dart';
|
||||
import '../../Model/Response/Summary/Getsummarysresponse.dart';
|
||||
import '../../Model/Response/Summary/Ordersummaryresponse.dart';
|
||||
|
||||
class OrderController extends GetxController {
|
||||
String? currentTime;
|
||||
String? notificationDate;
|
||||
|
||||
RxBool shimmer = true.obs;
|
||||
bool filter2 = false;
|
||||
RxBool searchMode = false.obs;
|
||||
bool showOrder = false;
|
||||
|
||||
List<DeliveriesDetails> orderAllList = [];
|
||||
List<DeliveriesDetails> searchOrderList = [];
|
||||
|
||||
var orderId;
|
||||
var orderHeaderId;
|
||||
var userId;
|
||||
|
||||
OrderSummaryRepository orderSummaryRepository = OrderSummaryRepository();
|
||||
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
late OrderSummaryDetails orderSummaryDetails;
|
||||
|
||||
RxInt currentTabIndex = 0.obs;
|
||||
|
||||
RxBool isOrdersLoading = false.obs;
|
||||
|
||||
bool hasLoadedOrdersOnce = false;
|
||||
|
||||
Future<void> getOrders(String period) async {
|
||||
if (!hasLoadedOrdersOnce) {
|
||||
isOrdersLoading.value = true; // Show loader only on first call
|
||||
}
|
||||
|
||||
try {
|
||||
GetDeliveries? result;
|
||||
|
||||
switch (period) {
|
||||
case 'today':
|
||||
result = await orderSummaryRepository.getOrdersToday();
|
||||
break;
|
||||
case 'week':
|
||||
result = await orderSummaryRepository.getOrdersWeek();
|
||||
break;
|
||||
case 'month':
|
||||
result = await orderSummaryRepository.getOrdersMonth();
|
||||
break;
|
||||
default:
|
||||
isOrdersLoading.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (result != null) {
|
||||
await processOrderResult(result);
|
||||
logger.i('Result Json : ${result.toJson()}');
|
||||
}
|
||||
} catch (e) {
|
||||
print("Error fetching orders: $e");
|
||||
} finally {
|
||||
isOrdersLoading.value = false;
|
||||
hasLoadedOrdersOnce = true; // Set the flag after first successful call
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Future<void> search(String keyword) async {
|
||||
if (keyword.isEmpty) {
|
||||
searchMode.value = false;
|
||||
searchOrderList.clear();
|
||||
update();
|
||||
return;
|
||||
}
|
||||
|
||||
searchMode.value = true;
|
||||
isOrdersLoading.value = true;
|
||||
|
||||
try {
|
||||
GetDeliveries? result;
|
||||
switch (currentTabIndex.value) {
|
||||
case 0:
|
||||
result = await orderSummaryRepository.getOrdersToday(keyword: keyword);
|
||||
break;
|
||||
case 1:
|
||||
result = await orderSummaryRepository.getOrdersWeek(keyword: keyword);
|
||||
break;
|
||||
case 2:
|
||||
result = await orderSummaryRepository.getOrdersMonth(keyword: keyword);
|
||||
break;
|
||||
default:
|
||||
isOrdersLoading.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (result != null) {
|
||||
searchOrderList.clear();
|
||||
searchOrderList.addAll(result.details ?? []);
|
||||
logger.i('Search Result Json: ${result.toJson()}');
|
||||
}
|
||||
} catch (e) {
|
||||
print("Error searching orders: $e");
|
||||
} finally {
|
||||
isOrdersLoading.value = false;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
getSummary() async {
|
||||
final result = await orderSummaryRepository.getOrderSummary();
|
||||
if(result?.status == true) {
|
||||
orderSummaryDetails = result?.details ?? OrderSummaryDetails();
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Future<void> processOrderResult(GetDeliveries orderData) async {
|
||||
logger.i('orderresultss');
|
||||
orderAllList.clear();
|
||||
if (orderData.details != null) {
|
||||
print('dataDetailsif${orderData.details}');
|
||||
searchOrderList.clear();
|
||||
searchOrderList.addAll(orderData.details!);
|
||||
orderAllList.addAll(orderData.details!);
|
||||
print('orderalllistlengthincontroller ${orderAllList.length}');
|
||||
}
|
||||
for (var currentOrdersValue in orderAllList) {
|
||||
if (currentOrdersValue.orderstatus != 'created') {
|
||||
showOrder = true;
|
||||
print('showNoOrderssif $showOrder');
|
||||
break;
|
||||
} else {
|
||||
showOrder = false;
|
||||
print('showNoOrder $showOrder');
|
||||
}
|
||||
}
|
||||
shimmer.value = false;
|
||||
update();
|
||||
}
|
||||
|
||||
// void search(String searchData) {
|
||||
// print("datasearchData$searchData");
|
||||
// print("lenght${orderAllList.length}");
|
||||
// orderAllList.clear();
|
||||
// if (filter2) {
|
||||
// List<DeliveriesDetails> search = searchCompare
|
||||
// .where((value) =>
|
||||
// value.pickupcontactno!
|
||||
// .toLowerCase()
|
||||
// .contains(searchController.text.toLowerCase()))
|
||||
// .toList();
|
||||
// orderAllList = search;
|
||||
// } else {
|
||||
// List<DeliveriesDetails> search = searchCompare
|
||||
// .where((value) =>
|
||||
// value.pickupcontactno!
|
||||
// .toLowerCase()
|
||||
// .contains(searchController.text.toLowerCase()))
|
||||
// .toList();
|
||||
// orderAllList = search;
|
||||
// }
|
||||
// searchMode = true;
|
||||
// update();
|
||||
// }
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
orderSummaryDetails = OrderSummaryDetails();
|
||||
}
|
||||
}
|
||||
101
lib/Controller/Orders/Tabs/Monthcontroller.dart
Normal file
101
lib/Controller/Orders/Tabs/Monthcontroller.dart
Normal file
@@ -0,0 +1,101 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../Data/Repository/Summary/ordersrepository.dart';
|
||||
import '../../../Model/Response/Summary/Getsummarysresponse.dart';
|
||||
|
||||
class MonthOrderController extends GetxController{
|
||||
|
||||
String? currentTime;
|
||||
String? notificationDate;
|
||||
|
||||
|
||||
RxBool shimmer = true.obs;
|
||||
bool filter2 = false;
|
||||
bool searchMode = false;
|
||||
bool showOrder = false;
|
||||
|
||||
List<DeliveriesDetails> orderAllList = [];
|
||||
List<DeliveriesDetails> searchCompare = [];
|
||||
|
||||
var orderId;
|
||||
var orderHeaderId;
|
||||
var userId;
|
||||
|
||||
|
||||
OrderSummaryRepository orderSummaryRepository = OrderSummaryRepository();
|
||||
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
|
||||
getOrders() async{
|
||||
GetDeliveries? result = await orderSummaryRepository.getOrdersMonth();
|
||||
monthOrderResult(result!);
|
||||
print('printresultjson${result.toJson()}');
|
||||
}
|
||||
|
||||
monthOrderResult(GetDeliveries orderData) async{
|
||||
print('todayorderresultss');
|
||||
orderAllList.clear();
|
||||
if (orderData.details!= null) {
|
||||
print('dataDetailsif${orderData.details}');
|
||||
searchCompare.clear();
|
||||
searchCompare.addAll(orderData.details!);
|
||||
orderAllList.addAll(orderData.details!);
|
||||
print('orderalllistlengthincontroller${orderAllList.length}');
|
||||
|
||||
}
|
||||
for (var currentOrdersValue in orderAllList) {
|
||||
if ((currentOrdersValue.orderstatus != 'created')) {
|
||||
showOrder = true;
|
||||
print('showNoOrderssif$showOrder');
|
||||
break;
|
||||
} else {
|
||||
showOrder = false;
|
||||
print('showNoOrder$showOrder');
|
||||
}
|
||||
}
|
||||
shimmer.value = false;
|
||||
update();
|
||||
|
||||
}
|
||||
|
||||
|
||||
search(String searchData) {
|
||||
print("datasearchData$searchData");
|
||||
print("lenght${orderAllList.length}");
|
||||
orderAllList.clear();
|
||||
searchCompare.addAll(orderAllList);
|
||||
if (filter2 == true) {
|
||||
List<DeliveriesDetails> search = searchCompare
|
||||
.where((value) =>
|
||||
value.pickupcontactno!
|
||||
.toLowerCase()
|
||||
.contains(searchController.text.toLowerCase()) ==
|
||||
true)
|
||||
.toList();
|
||||
update();
|
||||
searchMode = true;
|
||||
orderAllList = search;
|
||||
} else {
|
||||
List<DeliveriesDetails>search = searchCompare
|
||||
.where((value) =>
|
||||
value.pickupcontactno!
|
||||
.toLowerCase()
|
||||
.contains(searchController.text.toLowerCase()) ==
|
||||
true)
|
||||
.toList();
|
||||
|
||||
update();
|
||||
searchMode = true;
|
||||
orderAllList = search;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
28
lib/Controller/Orders/Tabs/Summarycontroller.dart
Normal file
28
lib/Controller/Orders/Tabs/Summarycontroller.dart
Normal file
@@ -0,0 +1,28 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../Data/Repository/Summary/ordersrepository.dart';
|
||||
import '../../../Model/Response/Summary/Ordersummaryresponse.dart';
|
||||
|
||||
class OrderSummaryController extends GetxController{
|
||||
|
||||
RxBool shimmer = true.obs;
|
||||
|
||||
OrderSummaryDetails getOrderSummary = OrderSummaryDetails();
|
||||
|
||||
|
||||
OrderSummaryRepository orderSummaryRepository = OrderSummaryRepository();
|
||||
|
||||
|
||||
getOrdersSummary()async{
|
||||
OrderSummary? result = await orderSummaryRepository.getOrderSummary();
|
||||
getOrderSummary = result!.details!;
|
||||
shimmer.value = false;
|
||||
update();
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
104
lib/Controller/Orders/Tabs/Todaycontroller.dart
Normal file
104
lib/Controller/Orders/Tabs/Todaycontroller.dart
Normal file
@@ -0,0 +1,104 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get/get.dart' hide Response;
|
||||
import '../../../Data/Repository/Summary/ordersrepository.dart';
|
||||
import '../../../Model/Response/Summary/Getsummarysresponse.dart';
|
||||
|
||||
class TodayOrderController extends GetxController {
|
||||
String? currentTime;
|
||||
String? notificationDate;
|
||||
|
||||
RxBool shimmer = true.obs;
|
||||
bool filter2 = false;
|
||||
bool searchMode = false;
|
||||
bool showOrder = false;
|
||||
|
||||
List<DeliveriesDetails> orderAllList = [];
|
||||
List<DeliveriesDetails> searchCompare = [];
|
||||
|
||||
var orderId;
|
||||
var orderHeaderId;
|
||||
var userId;
|
||||
|
||||
OrderSummaryRepository orderSummaryRepository = OrderSummaryRepository();
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
Timer? _timer; // To hold the periodic timer
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
getOrders(); // Initial call
|
||||
startAutoRefresh(); // Start periodic refresh
|
||||
}
|
||||
|
||||
void startAutoRefresh() {
|
||||
_timer = Timer.periodic(const Duration(seconds: 3), (timer) {
|
||||
getOrders(); // Refresh every 3 seconds
|
||||
});
|
||||
}
|
||||
|
||||
getOrders() async {
|
||||
try {
|
||||
GetDeliveries? result = await orderSummaryRepository.getOrdersToday();
|
||||
if (result != null) {
|
||||
todayOrderResult(result);
|
||||
print('printresultjson${result.toJson()}');
|
||||
}
|
||||
} catch (e) {
|
||||
print("Error fetching orders: $e");
|
||||
// Optionally handle error (e.g., show snackbar)
|
||||
}
|
||||
}
|
||||
|
||||
todayOrderResult(GetDeliveries orderData) async {
|
||||
print('todayorderresultss');
|
||||
orderAllList.clear();
|
||||
if (orderData.details != null) {
|
||||
print('dataDetailsif${orderData.details}');
|
||||
searchCompare.clear();
|
||||
searchCompare.addAll(orderData.details!);
|
||||
orderAllList.addAll(orderData.details!);
|
||||
print('orderalllistlengthincontroller ${orderAllList.length}');
|
||||
}
|
||||
|
||||
showOrder = orderAllList.any((order) => order.orderstatus != 'created');
|
||||
print('showOrder: $showOrder');
|
||||
|
||||
shimmer.value = false;
|
||||
update();
|
||||
}
|
||||
|
||||
search(String searchData) {
|
||||
print("datasearchData$searchData");
|
||||
print("lenght${orderAllList.length}");
|
||||
|
||||
// Restore from searchCompare before filtering
|
||||
orderAllList = List.from(searchCompare);
|
||||
|
||||
if (searchData.isEmpty) {
|
||||
searchMode = false;
|
||||
update();
|
||||
return;
|
||||
}
|
||||
|
||||
List<DeliveriesDetails> searchResults = searchCompare
|
||||
.where((value) =>
|
||||
value.pickupcontactno!
|
||||
.toLowerCase()
|
||||
.contains(searchData.toLowerCase()))
|
||||
.toList();
|
||||
|
||||
orderAllList = searchResults;
|
||||
searchMode = true;
|
||||
update();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_timer?.cancel(); // Cancel timer to prevent memory leaks
|
||||
searchController.dispose();
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
101
lib/Controller/Orders/Tabs/Weekcontroller.dart
Normal file
101
lib/Controller/Orders/Tabs/Weekcontroller.dart
Normal file
@@ -0,0 +1,101 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../Data/Repository/Summary/ordersrepository.dart';
|
||||
import '../../../Model/Response/Summary/Getsummarysresponse.dart';
|
||||
|
||||
class WeekOrderController extends GetxController{
|
||||
|
||||
String? currentTime;
|
||||
String? notificationDate;
|
||||
|
||||
|
||||
RxBool shimmer = true.obs;
|
||||
bool filter2 = false;
|
||||
bool searchMode = false;
|
||||
bool showOrder = false;
|
||||
|
||||
List<DeliveriesDetails> orderAllList = [];
|
||||
List<DeliveriesDetails> searchCompare = [];
|
||||
|
||||
var orderId;
|
||||
var orderHeaderId;
|
||||
var userId;
|
||||
|
||||
|
||||
OrderSummaryRepository orderSummaryRepository = OrderSummaryRepository();
|
||||
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
|
||||
getOrders()async{
|
||||
GetDeliveries? result = await orderSummaryRepository.getOrdersWeek();
|
||||
weekOrderResult(result!);
|
||||
print('printresultjson${result.toJson()}');
|
||||
}
|
||||
|
||||
weekOrderResult(GetDeliveries orderData) async{
|
||||
print('todayorderresultss');
|
||||
orderAllList.clear();
|
||||
if (orderData.details!= null) {
|
||||
print('dataDetailsif${orderData.details}');
|
||||
searchCompare.clear();
|
||||
searchCompare.addAll(orderData.details!);
|
||||
orderAllList.addAll(orderData.details!);
|
||||
print('orderalllistlengthincontroller${orderAllList.length}');
|
||||
|
||||
}
|
||||
for (var currentOrdersValue in orderAllList) {
|
||||
if ((currentOrdersValue.orderstatus != 'created')) {
|
||||
showOrder = true;
|
||||
print('showNoOrderssif$showOrder');
|
||||
break;
|
||||
} else {
|
||||
showOrder = false;
|
||||
print('showNoOrder$showOrder');
|
||||
}
|
||||
}
|
||||
shimmer.value = false;
|
||||
update();
|
||||
|
||||
}
|
||||
|
||||
|
||||
search(String searchData) {
|
||||
print("datasearchData$searchData");
|
||||
print("lenght${orderAllList.length}");
|
||||
orderAllList.clear();
|
||||
searchCompare.addAll(orderAllList);
|
||||
if (filter2 == true) {
|
||||
List<DeliveriesDetails> search = searchCompare
|
||||
.where((value) =>
|
||||
value.pickupcontactno!
|
||||
.toLowerCase()
|
||||
.contains(searchController.text.toLowerCase()) ==
|
||||
true)
|
||||
.toList();
|
||||
update();
|
||||
searchMode = true;
|
||||
orderAllList = search;
|
||||
} else {
|
||||
List<DeliveriesDetails>search = searchCompare
|
||||
.where((value) =>
|
||||
value.pickupcontactno!
|
||||
.toLowerCase()
|
||||
.contains(searchController.text.toLowerCase()) ==
|
||||
true)
|
||||
.toList();
|
||||
|
||||
update();
|
||||
searchMode = true;
|
||||
orderAllList = search;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
0
lib/Controller/Orders/order_controller_2.dart
Normal file
0
lib/Controller/Orders/order_controller_2.dart
Normal file
220
lib/Controller/Rider_assign/rider_assign_controller.dart
Normal file
220
lib/Controller/Rider_assign/rider_assign_controller.dart
Normal file
@@ -0,0 +1,220 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import '../../Data/Repository/Notification/Notificationrepository.dart';
|
||||
import '../../Data/Repository/Rider/get_rider_repo.dart';
|
||||
import '../../Data/Repository/update_delivery/create_delivery.dart';
|
||||
import '../../Data/Repository/update_delivery/update_delivery.dart';
|
||||
import '../../Helper/Logger.dart';
|
||||
import '../../Helper/toast.dart';
|
||||
import '../../Model/Request/Notification/Notification_request_rider.dart';
|
||||
import '../../Model/Request/Notification/Notificationrequest.dart';
|
||||
import '../../Model/Request/create_delivery_request/create_delivery_request.dart';
|
||||
import '../../Model/Request/update_delivery/update_delivery.dart';
|
||||
import '../../Model/Response/Notification/Notificationresponse.dart';
|
||||
import '../../Model/Response/Orders/Getorderresponse.dart';
|
||||
import '../../Model/Response/Riders/get_rider_model.dart';
|
||||
import '../../Model/Response/Summary/Getsummarysresponse.dart';
|
||||
import '../../Model/Response/create_delivery_response/create_delivery_request.dart';
|
||||
import '../../Model/Response/update_delivery_response/update_delivery_response.dart';
|
||||
import '../../View/Home/Homeview.dart';
|
||||
|
||||
class RiderAssignController extends GetxController {
|
||||
|
||||
List <GetRiderDetails> riderDetails = [];
|
||||
|
||||
final RidersRepository ridersRepository = RidersRepository();
|
||||
|
||||
|
||||
getRiders(appLocationId) async {
|
||||
GetRiderPoolsModel? result = await ridersRepository.getRiders(1);
|
||||
getRidersResult(result!);
|
||||
}
|
||||
|
||||
bool isSelectAll = false;
|
||||
List riderFcmToken = [];
|
||||
int? riderUserIdList;
|
||||
int? partnerId;
|
||||
int? shiftId;
|
||||
String? riderStatus;
|
||||
RxBool shimmer = true.obs;
|
||||
String? assignTime;
|
||||
bool isIdle = false;
|
||||
|
||||
RoundedLoadingButtonController btnNotifyRiderController = RoundedLoadingButtonController();
|
||||
|
||||
|
||||
getRidersResult(GetRiderPoolsModel data) {
|
||||
if (data.code == 200) {
|
||||
logger.i('RiderPool ${data.details}');
|
||||
if (data.details!.isNotEmpty) {
|
||||
for (int i = 0; i < data.details!.length; i++) {
|
||||
var index = riderDetails.indexWhere(
|
||||
(element) =>
|
||||
element.userid == data.details![i].userid);
|
||||
if (index == -1) {
|
||||
riderDetails.add(data.details![i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
logger.i('riderDetails $riderDetails');
|
||||
if (isSelectAll == true) {
|
||||
riderFcmToken.clear();
|
||||
riderUserIdList = 0;
|
||||
partnerId = 0;
|
||||
shiftId = 0;
|
||||
riderStatus = '';
|
||||
|
||||
for (var riderDetail in riderDetails) {
|
||||
riderFcmToken.add(riderDetail.userfcmtoken);
|
||||
riderUserIdList = riderDetail.userid!;
|
||||
partnerId = riderDetail.partnerid!;
|
||||
shiftId = riderDetail.shiftid!;
|
||||
riderStatus = riderDetail.status;
|
||||
print('shiftId $shiftId');
|
||||
}
|
||||
} else {
|
||||
riderFcmToken.clear();
|
||||
riderUserIdList = 0;
|
||||
partnerId = 0;
|
||||
shiftId = 0;
|
||||
riderStatus = '';
|
||||
}
|
||||
logger.i('riderFcmToken $riderFcmToken');
|
||||
logger.i('partnerIdinprint $partnerId');
|
||||
logger.i('shiftId $shiftId');
|
||||
logger.i('riderStatus $riderStatus');
|
||||
shimmer.value = false;
|
||||
update();
|
||||
}
|
||||
else {
|
||||
shimmer.value = false;
|
||||
update();
|
||||
Toast.showToast("${data.message}");
|
||||
}
|
||||
}
|
||||
|
||||
updateDelivery(OrderDetails data) async {
|
||||
assignTime = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now());
|
||||
|
||||
|
||||
updateDeliveryResult(
|
||||
UpdateDeliveryRequest(
|
||||
deliveryid: data.deliveryid,
|
||||
userid: riderUserIdList,
|
||||
orderheaderid: data.orderheaderid,
|
||||
assigntime: assignTime,
|
||||
orderstatus: 'pending',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
UpdateDeliveryRepository updateDeliveryRepository = UpdateDeliveryRepository();
|
||||
|
||||
updateDeliveryResult(UpdateDeliveryRequest data) async {
|
||||
UpdateDeliveryResponse? result = await updateDeliveryRepository
|
||||
.updateDelivery(data);
|
||||
if (result?.status == true) {
|
||||
logger.i('UpdateDeliveyStatus ');
|
||||
Get.to(() => HomeView(selectedIndex: 1));
|
||||
sendRiderNotification();
|
||||
}
|
||||
}
|
||||
|
||||
final createDeliveryRepository createDeliveryRepo = createDeliveryRepository();
|
||||
|
||||
|
||||
Future<void> createDelivery(List<OrderDetails> orders) async {
|
||||
String assignTime = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now());
|
||||
|
||||
List<CreateDelivery> deliveries = orders.map((data) {
|
||||
DateTime parsedDate = DateTime.parse(data.deliverydate.toString());
|
||||
String formattedDeliveryDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(parsedDate);
|
||||
|
||||
return CreateDelivery(
|
||||
assigntime: assignTime,
|
||||
applocationid: data.applocationid,
|
||||
tenantid: data.tenantid,
|
||||
customerid: data.customerid,
|
||||
categoryid: data.categoryid,
|
||||
configid: data.configid,
|
||||
deliveryaddress: data.deliveryaddress,
|
||||
deliverycharges: data.deliverycharge?.toDouble(),
|
||||
deliverycontactno: data.deliverycontactno,
|
||||
deliverycustomer: data.deliverycustomer,
|
||||
deliverycustomerid: data.customerid,
|
||||
deliverydate: formattedDeliveryDate,
|
||||
deliveryid: data.deliveryid,
|
||||
deliverylocation: "",
|
||||
deliverylocationid: data.deliverylocationid,
|
||||
droplat: data.deliverylat,
|
||||
droplon: data.deliverylong,
|
||||
itemcount: data.itemcount,
|
||||
kms: "0.0",
|
||||
locationid: data.locationid,
|
||||
moduleid: data.moduleid,
|
||||
orderamount: 0,
|
||||
orderheaderid: data.orderheaderid,
|
||||
orderid: data.orderid,
|
||||
ordernotes: data.ordernotes,
|
||||
orderstatus: "pending",
|
||||
partnerid: data.partnerid,
|
||||
paymenttype: 42,
|
||||
pickupaddress: data.pickupaddress,
|
||||
pickupcontactno: data.pickupcontactno,
|
||||
pickupcustomer: data.pickupcustomer,
|
||||
pickuplat: data.pickuplat,
|
||||
pickuplocation: "",
|
||||
pickuplocationid: data.pickuplocationid,
|
||||
pickuplon: data.pickuplong,
|
||||
subcategoryid: data.subcategoryid,
|
||||
userid: riderUserIdList,
|
||||
);
|
||||
}).toList();
|
||||
|
||||
await createDeliveryResult(deliveries);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Future<void> createDeliveryResult(List<CreateDelivery> deliveries) async {
|
||||
for (CreateDelivery data in deliveries) {
|
||||
CreateDeliveryResponse? result = await createDeliveryRepo.createDelivery(deliveries);
|
||||
if (result?.status == true) {
|
||||
logger.i('UpdateDeliveryStatus for delivery ID: ${data.deliveryid}');
|
||||
}
|
||||
}
|
||||
btnNotifyRiderController.reset();
|
||||
/// Navigate to HomeView and send notification after processing all deliveries
|
||||
Get.to(() => HomeView(selectedIndex: 0));
|
||||
sendRiderNotification();
|
||||
}
|
||||
|
||||
|
||||
sendRiderNotification() async {
|
||||
sendRiderNotificationResult(
|
||||
RiderNotificationRequest(
|
||||
notification: NotificationRider(
|
||||
title: "NearleXpress",
|
||||
image: "",
|
||||
body: "Order have been placed for delivery",
|
||||
sound: "ring",
|
||||
),
|
||||
token: riderFcmToken.join(','),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
final NotificationRepository notificationRepository = NotificationRepository();
|
||||
|
||||
//
|
||||
sendRiderNotificationResult(RiderNotificationRequest data)async{
|
||||
NotificationResponse? result = await notificationRepository.notifyRider(data);
|
||||
if(result?.status == true){
|
||||
Toast.showToast('Notified Rider Successfully');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
24
lib/Controller/Sucessreview/Sucessscreencontroller.dart
Normal file
24
lib/Controller/Sucessreview/Sucessscreencontroller.dart
Normal file
@@ -0,0 +1,24 @@
|
||||
import 'package:confetti/confetti.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class SuccessScreenController extends GetxController{
|
||||
|
||||
late ConfettiController confettiController;
|
||||
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
confettiController = ConfettiController(duration: const Duration(seconds: 60));
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
super.dispose();
|
||||
confettiController.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
40
lib/Controller/Tenantlocation/Tenantlocationcontroller.dart
Normal file
40
lib/Controller/Tenantlocation/Tenantlocationcontroller.dart
Normal file
@@ -0,0 +1,40 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
|
||||
import '../../Data/Repository/Tenantlocation/Getlocationrepository.dart';
|
||||
import '../../Model/Response/Tenantlocation/Getlocationbyidresponse.dart';
|
||||
|
||||
class TenantLocationController extends GetxController{
|
||||
|
||||
String? latitude;
|
||||
String? longitude;
|
||||
String? address;
|
||||
|
||||
int selectedAddressIndex = -1;
|
||||
int locationId = 0;
|
||||
|
||||
List<TenantLocationDetails>getLocations = [];
|
||||
|
||||
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
|
||||
|
||||
|
||||
GetLocationsRepository getLocationsRepository= GetLocationsRepository();
|
||||
|
||||
|
||||
getTenantLocation()async {
|
||||
GetLocationByTenantId? result = await getLocationsRepository.getTenantLocationById();
|
||||
if (result?.code == 200) {
|
||||
getLocations = result?.details??[];
|
||||
update();
|
||||
}
|
||||
|
||||
print('resultgetLocation ${result?.toJson()}');
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
getTenantLocation();
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
}
|
||||
30
lib/Controller/map_controller.dart
Normal file
30
lib/Controller/map_controller.dart
Normal file
@@ -0,0 +1,30 @@
|
||||
import 'package:get/get_rx/src/rx_types/rx_types.dart';
|
||||
import 'package:get/get_state_manager/src/simple/get_controllers.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||
|
||||
class MapController extends GetxController {
|
||||
RxDouble zoom = 13.0.obs;
|
||||
GoogleMapController? googleMapController;
|
||||
|
||||
void setController(GoogleMapController controller) {
|
||||
googleMapController = controller;
|
||||
}
|
||||
|
||||
void zoomIn() {
|
||||
zoom.value++;
|
||||
if (googleMapController != null) {
|
||||
googleMapController!.animateCamera(
|
||||
CameraUpdate.zoomTo(zoom.value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void zoomOut() {
|
||||
zoom.value--;
|
||||
if (googleMapController != null) {
|
||||
googleMapController!.animateCamera(
|
||||
CameraUpdate.zoomTo(zoom.value),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
164
lib/Controller/products/product_controller.dart
Normal file
164
lib/Controller/products/product_controller.dart
Normal file
@@ -0,0 +1,164 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../Data/Repository/products_repo/get_products.dart';
|
||||
import '../../Helper/Logger.dart';
|
||||
import '../../Model/Request/products/update_product.dart';
|
||||
import '../../Model/Response/Orders/Getorderresponse.dart';
|
||||
import '../../Model/Response/products/product_info.dart';
|
||||
import '../../Model/Response/products/product_response.dart';
|
||||
import '../../Model/Response/products/product_update_response.dart';
|
||||
|
||||
class ProductController extends GetxController {
|
||||
final ProductsRepository productsRepository = ProductsRepository();
|
||||
|
||||
/// Main list used by UI
|
||||
RxList<ProductData> product = <ProductData>[].obs;
|
||||
|
||||
/// Backup full list for search restore
|
||||
RxList<ProductData> masterProductList = <ProductData>[].obs;
|
||||
|
||||
RxBool isProductLoading = true.obs;
|
||||
RxSet<int> loadingIndices = <int>{}.obs;
|
||||
RxBool isSearchModeEnable = false.obs;
|
||||
|
||||
var productDetail = <ProductDetails>[].obs;
|
||||
|
||||
TextEditingController productSearchController = TextEditingController();
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
productSearchController.dispose();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// Toggle Availability
|
||||
// ---------------------------------------------------------
|
||||
Future<void> toggleAvailability(int index) async {
|
||||
loadingIndices.add(index);
|
||||
update();
|
||||
|
||||
final oldProduct = product[index];
|
||||
final newStatus = oldProduct.status == 'Active' ? 'outofstock' : 'Active';
|
||||
|
||||
// Optimistic local update
|
||||
product[index] = oldProduct.copyWith(status: newStatus);
|
||||
update();
|
||||
|
||||
try {
|
||||
await updateProduct(oldProduct.productlocationid ?? 0, newStatus);
|
||||
} catch (e) {
|
||||
// API failed → revert UI
|
||||
product[index] = oldProduct;
|
||||
update();
|
||||
Get.snackbar('Error', 'Failed to update status');
|
||||
} finally {
|
||||
loadingIndices.remove(index);
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
bool hasLoadedOnce = false;
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// Fetch Products (API)
|
||||
// ---------------------------------------------------------
|
||||
Future<void> getProducts({String? keyword}) async {
|
||||
if (keyword == null || keyword.isEmpty) {
|
||||
isSearchModeEnable.value = false;
|
||||
} else {
|
||||
isSearchModeEnable.value = true;
|
||||
}
|
||||
|
||||
if (!isSearchModeEnable.value && !hasLoadedOnce) {
|
||||
isProductLoading.value = true;
|
||||
update();
|
||||
}
|
||||
|
||||
try {
|
||||
final result = await productsRepository.getProducts(
|
||||
subCategoryId: 0,
|
||||
keyword: keyword,
|
||||
);
|
||||
|
||||
// Store full list
|
||||
masterProductList.assignAll(result?.details ?? []);
|
||||
|
||||
// Show full list
|
||||
product.assignAll(masterProductList);
|
||||
|
||||
logger.i('Products Loaded : ${product.length}');
|
||||
} catch (e) {
|
||||
logger.e('Error loading products: $e');
|
||||
Get.snackbar('Error', 'Failed to load products');
|
||||
} finally {
|
||||
isProductLoading.value = false;
|
||||
hasLoadedOnce = true;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// Local Search Filter
|
||||
// ---------------------------------------------------------
|
||||
void applySearch(String keyword) {
|
||||
if (keyword.isEmpty) {
|
||||
product.assignAll(masterProductList);
|
||||
update();
|
||||
return;
|
||||
}
|
||||
|
||||
final filtered = masterProductList.where((p) {
|
||||
return (p.productname ?? "")
|
||||
.toLowerCase()
|
||||
.contains(keyword.toLowerCase());
|
||||
}).toList();
|
||||
|
||||
product.assignAll(filtered);
|
||||
update();
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// Update Product (API)
|
||||
// ---------------------------------------------------------
|
||||
Future<void> updateProductStatus(ProductUpdateRequest data) async {
|
||||
try {
|
||||
final result = await productsRepository.productUpdate(data);
|
||||
logger.i('Product Update: ${result?.message}');
|
||||
|
||||
if (result?.status != true) {
|
||||
Get.snackbar('Failed', result?.message ?? 'Update failed');
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e('Update Exception: $e');
|
||||
Get.snackbar('Error', 'Network error');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> updateProduct(int productlocationid, String status) async {
|
||||
await updateProductStatus(
|
||||
ProductUpdateRequest(
|
||||
productid: productlocationid,
|
||||
productstatus: status,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// Order → Product Details
|
||||
// ---------------------------------------------------------
|
||||
Future<void> getProductDetails(int orderHeaderId) async {
|
||||
productDetail.clear();
|
||||
|
||||
try {
|
||||
final result = await productsRepository.getProductDetail(orderHeaderId);
|
||||
productDetail.assignAll(result?.details ?? []);
|
||||
logger.i('Order ProductDetails loaded: ${productDetail.length}');
|
||||
} catch (e) {
|
||||
logger.e('Failed loading details: $e');
|
||||
Get.snackbar('Error', 'Could not load items');
|
||||
}
|
||||
}
|
||||
}
|
||||
33
lib/Data/Provider/Admintoken/Getadmintokenprovider.dart
Normal file
33
lib/Data/Provider/Admintoken/Getadmintokenprovider.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../Model/Response/Admintoken/Admintokenresponse.dart';
|
||||
|
||||
class GetAdminTokenProvider{
|
||||
|
||||
Future<GetAdminToken?> getAdminToken(String urldata,) async {
|
||||
GetAdminToken? getAdminToken;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await get(url, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
});
|
||||
print('GetAdminToken!!!!!!!!${response.body}');
|
||||
print('GetAdminTokenproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getAdminToken = GetAdminToken.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print('printinerrorcatch${e.toString()}');
|
||||
print("error");
|
||||
}
|
||||
return getAdminToken;
|
||||
}
|
||||
|
||||
}
|
||||
69
lib/Data/Provider/Appcategory/Appcategoryprovider.dart
Normal file
69
lib/Data/Provider/Appcategory/Appcategoryprovider.dart
Normal file
@@ -0,0 +1,69 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:logger/logger.dart';
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Response/Appcategory/Appcategoryresponse.dart';
|
||||
import '../../../Model/Response/Appcategory/app_category_response.dart';
|
||||
|
||||
|
||||
class AppCategoryProvider{
|
||||
|
||||
Future<GetAppCategories?> getAppCategory(String url) async {
|
||||
try {
|
||||
final response = await http.get(
|
||||
Uri.parse(url),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
);
|
||||
|
||||
logger.i('Category API URL: $url');
|
||||
logger.i('Status Code: ${response.statusCode}');
|
||||
logger.i('Response Body: ${response.body}');
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final Map<String, dynamic> json = jsonDecode(response.body);
|
||||
return GetAppCategories.fromJson(json);
|
||||
} else {
|
||||
logger.e('Failed to load categories: ${response.statusCode}');
|
||||
return null;
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e('Error in getAppCategory: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
class SubCategoryProvider {
|
||||
final logger = Logger();
|
||||
|
||||
Future<List<SubCategory>> fetchSubCategories() async {
|
||||
const url = 'https://fiesta.nearle.app/live/api/v1/mob/utils/getsubcategories';
|
||||
try {
|
||||
final response = await http.get(Uri.parse(url));
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = jsonDecode(response.body);
|
||||
if (data['status'] == true && data['details'] != null) {
|
||||
final List list = data['details'];
|
||||
return list.map((e) => SubCategory.fromJson(e)).toList();
|
||||
} else {
|
||||
logger.w('No subcategories found or invalid response');
|
||||
return [];
|
||||
}
|
||||
} else {
|
||||
logger.e('Failed with status: ${response.statusCode}');
|
||||
return [];
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e('Error fetching subcategories: $e');
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
29
lib/Data/Provider/Applocation/Applocationprovider.dart
Normal file
29
lib/Data/Provider/Applocation/Applocationprovider.dart
Normal file
@@ -0,0 +1,29 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import '../../../Model/Response/Applocations/Applocationresponse.dart';
|
||||
|
||||
|
||||
class AppLocationProvider{
|
||||
|
||||
Future<GetAppLocations?> getAppLocations(String urldata,) async {
|
||||
GetAppLocations? getAppLocations;
|
||||
try {
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await get(url,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
});
|
||||
print('getAppLocationsproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getAppLocations = GetAppLocations.fromJson(parsedJson);
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getAppLocations;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../../Model/Request/Authentication/Createuser/Createuserresponse.dart';
|
||||
import '../../../../Model/Response/Authentication/Createtenantuser/Createtenantuserresponse.dart';
|
||||
|
||||
|
||||
|
||||
class CreateTenantUserProviders{
|
||||
|
||||
Future<CreateTenantUserResponse?> createTenantUser(CreateTenantUser data,String urldata,) async {
|
||||
CreateTenantUserResponse? createTenantUserResponse;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await post(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('CreateTenantUserresponsebody ${response.body}');
|
||||
print('CreateTenantUserdata ${data.toJson()}');
|
||||
print('CreateTenantUserdatatenantlocations ${data.tenantlocations!.toJson()}');
|
||||
print('CreateTenantUserdatatenantsubscriptions ${data.tenantsubscriptions!.toJson()}');
|
||||
print('CreateTenantUserurlsssssssssss ${urldata.toString()}');
|
||||
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
|
||||
|
||||
|
||||
createTenantUserResponse = CreateTenantUserResponse.fromJson(parsedJson);
|
||||
print('createOrderinprovider${createTenantUserResponse}');
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return createTenantUserResponse;
|
||||
}
|
||||
|
||||
}
|
||||
43
lib/Data/Provider/Authentication/loginprovider.dart
Normal file
43
lib/Data/Provider/Authentication/loginprovider.dart
Normal file
@@ -0,0 +1,43 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../Model/Request/Authentication/Loginrequest.dart';
|
||||
import '../../../Model/Response/Authentication/Loginresponse.dart';
|
||||
|
||||
class LoginProvider{
|
||||
|
||||
Future<LoginResponse?> signIn(String urldata, LoginRequest data) async {
|
||||
LoginResponse? loginResponse;
|
||||
|
||||
try {
|
||||
final url = Uri.parse(urldata);
|
||||
final response = await post(url,
|
||||
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
}
|
||||
);
|
||||
print('urldatasssssssssssssss $urldata');
|
||||
print('LoginRequestdata ${data.toJson()}');
|
||||
print("signIncontactnosss${data.contactno}");
|
||||
print("signIndevicetype${data.devicetype}");
|
||||
print("signInconfigid${data.configid}");
|
||||
print("deviceidsssssssss${data.deviceid}");
|
||||
print("customertokensssss${data.userfcmtoken}");
|
||||
print("responseeeeeedata ${response.body}");
|
||||
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
loginResponse = LoginResponse.fromJson(parsedJson);
|
||||
print('provider result$loginResponse');
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("errr");
|
||||
}
|
||||
return loginResponse;
|
||||
}
|
||||
|
||||
}
|
||||
44
lib/Data/Provider/CreatOrder/CreateOrderProvider.dart
Normal file
44
lib/Data/Provider/CreatOrder/CreateOrderProvider.dart
Normal file
@@ -0,0 +1,44 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Request/Createorder/Createorderrequest.dart';
|
||||
import '../../../Model/Response/Createorder/CreateOrderResponsemodel.dart';
|
||||
|
||||
class CreateOrderProviders{
|
||||
Future<CreateOrderResponse?> createOrder(CreateOrder data,String urldata,) async {
|
||||
CreateOrderResponse? createOrder;
|
||||
try {
|
||||
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await post(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
print('CreateOrderresponsebody ${response.body}');
|
||||
print('CreateOrderdatatoJson ${data.toJson()}');
|
||||
print('pickuplocationid ${data.pickup?.customerid}');
|
||||
print('droplocationid ${data.drop?.customerid}');
|
||||
logger.i(json.encode(data.toJson()));
|
||||
|
||||
// print('headerssssssssss ${response.headers}');
|
||||
print('CreateOrderurlsssssssssss ${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
createOrder = CreateOrderResponse.fromJson(parsedJson);
|
||||
print('createOrderinprovider${createOrder}');
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return createOrder;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
69
lib/Data/Provider/Createcustomer/Createcustomerprovider.dart
Normal file
69
lib/Data/Provider/Createcustomer/Createcustomerprovider.dart
Normal file
@@ -0,0 +1,69 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import '../../../Model/Request/Authentication/Createuser/Createdeliveryaddress/Createdeliveryaddressrequest.dart';
|
||||
import '../../../Model/Request/Createcustomer/Createcustomerrequest.dart';
|
||||
import '../../../Model/Response/Createcustomer/Createcustomerresponse.dart';
|
||||
import '../../../Model/Response/Createcustomer/Createdeliveryaddress/Createdeliveryaddressresponsel.dart';
|
||||
|
||||
class CreateCustomerProvider{
|
||||
|
||||
Future<CreateCustomerResponse?> createCustomer(CreateCustomers data,String urldata,) async {
|
||||
CreateCustomerResponse? createCustomers;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await post(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('createCustomercontactno${data.firstname}');
|
||||
print('createCustomercontactno${data.contactno}');
|
||||
print('createCustomerapplocationid${data.applocationid}');
|
||||
print('createCustomercontactno${data}');
|
||||
|
||||
print('responsebodyincreatecustomer${response.body}');
|
||||
print('urldatacreatecustomer ${url}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
createCustomers = CreateCustomerResponse.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return createCustomers;
|
||||
}
|
||||
|
||||
Future<CreateDeliveryAddressResponse?> createDeliveryAddress(CreateDeliveryAddress data,String urldata,) async {
|
||||
CreateDeliveryAddressResponse? createDeliveryAddress;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await post(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('customeridinproviderdada${data.customerid}');
|
||||
print('responsebodyincreateDeliveryAddress ${response.body}');
|
||||
print('urldatacreateDeliveryAddress ${url}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
createDeliveryAddress = CreateDeliveryAddressResponse.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return createDeliveryAddress;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
142
lib/Data/Provider/Customers/getCustomerbytenantidprovider.dart
Normal file
142
lib/Data/Provider/Customers/getCustomerbytenantidprovider.dart
Normal file
@@ -0,0 +1,142 @@
|
||||
import 'dart:convert';
|
||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
||||
import 'package:http/http.dart';
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Response/Customers/GetCustomerById/GetCustomerByTenantId.dart';
|
||||
import '../../../Model/Response/Customers/GetCustomerById/Getdropcustomerbytenantid.dart';
|
||||
|
||||
|
||||
class GetCustomersByTenantIdProvider {
|
||||
|
||||
static const cacheKey = 'customerCache';
|
||||
final cacheManager = DefaultCacheManager();
|
||||
|
||||
Future<GetCustomerByTenantId?> getCustomerByTenantId(String urlData) async {
|
||||
GetCustomerByTenantId? getCustomerByTenantId;
|
||||
|
||||
logger.i('GetCustomerURL : ${urlData}');
|
||||
|
||||
try {
|
||||
/// 1. Attempt to load from cache first
|
||||
final fileInfo = await cacheManager.getFileFromCache(cacheKey);
|
||||
|
||||
String? cachedData;
|
||||
|
||||
if (fileInfo != null && fileInfo.file.existsSync()) {
|
||||
cachedData = await fileInfo.file.readAsString();
|
||||
final parsedJson = json.decode(cachedData);
|
||||
getCustomerByTenantId = GetCustomerByTenantId.fromJson(parsedJson);
|
||||
logger.i("......Customer data Loaded from cache......");
|
||||
}
|
||||
|
||||
/// 2.Always make a request to check for updates
|
||||
final response = await get(Uri.parse(urlData), headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
});
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final freshData = response.body;
|
||||
|
||||
/// Compare with cached data (optional optimization: hash/ETag/updatedAt)
|
||||
if (cachedData == null || freshData != cachedData) {
|
||||
logger.i("......Updating cache with fresh API data.......");
|
||||
|
||||
/// Update the cache with fresh data
|
||||
await cacheManager.putFile(
|
||||
cacheKey,
|
||||
response.bodyBytes,
|
||||
fileExtension: 'json',
|
||||
key: cacheKey,
|
||||
);
|
||||
|
||||
final parsedJson = json.decode(freshData);
|
||||
getCustomerByTenantId = GetCustomerByTenantId.fromJson(parsedJson);
|
||||
} else {
|
||||
logger.i(".........Customer API data is same as cache, no update required..........");
|
||||
}
|
||||
} else {
|
||||
logger.w("Customer API responded with status code: ${response.statusCode}");
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e("Error fetching customer deals: $e");
|
||||
}
|
||||
|
||||
return getCustomerByTenantId;
|
||||
}
|
||||
|
||||
|
||||
Future<GetCustomerByTenantId?> getTenantsByTenantId(String urldata,) async {
|
||||
GetCustomerByTenantId? getCustomerByTenantId;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await get(url, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('getCustomerByTenantId!!!!!!!!${response.body}');
|
||||
print('getCustomerByTenantIdproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getCustomerByTenantId = GetCustomerByTenantId.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getCustomerByTenantId;
|
||||
}
|
||||
|
||||
|
||||
Future<GetDropCustomerByTenantId?> getDropCustomerByTenantId(String urldata,) async {
|
||||
GetDropCustomerByTenantId? getDropCustomerByTenantId;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await get(url, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('getDropCustomerByTenantIdresponse!!!!!!!!${response.body}');
|
||||
print('getDropCustomerByTenantIdproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getDropCustomerByTenantId = GetDropCustomerByTenantId.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getDropCustomerByTenantId;
|
||||
}
|
||||
|
||||
Future<GetDropCustomerByTenantId?> getDropTenantByTenantId(String urldata,) async {
|
||||
GetDropCustomerByTenantId? getDropCustomerByTenantId;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await get(url, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('getDropCustomerByTenantIdresponse!!!!!!!!${response.body}');
|
||||
print('getDropCustomerByTenantIdproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getDropCustomerByTenantId = GetDropCustomerByTenantId.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getDropCustomerByTenantId;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import '../../../Model/Response/Getcustomeraddress/GetCustomerAddress.dart';
|
||||
|
||||
|
||||
class GetCustomersAddressProvider{
|
||||
|
||||
Future<GetCustomerAddress?> getCustomerAddress(String urldata,) async {
|
||||
GetCustomerAddress? getCustomerAddress;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await get(url, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('getCustomerAddress!!!!!!!!${response.body}');
|
||||
print('getCustomerAddressproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getCustomerAddress = GetCustomerAddress.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getCustomerAddress;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import '../../../Model/Response/Getcustomerbynumber/Getcustomerbynumberresponse.dart';
|
||||
|
||||
class GetCustomersByNumberProvider{
|
||||
|
||||
Future<GetCustomerByNumber?> getCustomerByNumber(String urldata,) async {
|
||||
GetCustomerByNumber? getCustomerByNumber;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await get(url, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('getCustomerByNumber!!!!!!!!${response.body}');
|
||||
print('getCustomerByNumberproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getCustomerByNumber = GetCustomerByNumber.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getCustomerByNumber;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../../Model/Request/Location/Addlocation/Addlocationrequest.dart';
|
||||
import '../../../../Model/Response/Location/Addlocation/Addlocationresponse.dart';
|
||||
|
||||
class AddLocationProvider{
|
||||
Future<AddLocationResponse?> addLocation(AddLocation data,String urldata,) async {
|
||||
AddLocationResponse? addLocationResponse;
|
||||
try {
|
||||
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await post(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
print('addLocationResponseresponsebody ${response.body}');
|
||||
print('addLocationResponsedatatoJson ${data.toJson()}');
|
||||
print('addLocationResponseresponseorderdate ${data.tenantid}');
|
||||
print('addLocationResponseresponsetenantid ${data.locationid}');
|
||||
print('addLocationResponseresponsemoduleid ${data.moduleid}');
|
||||
print('addLocationResponseresponsepartnerid ${data.partnerid}');
|
||||
|
||||
|
||||
|
||||
// print('headerssssssssss ${response.headers}');
|
||||
print('addLocationResponseurlsssssssssss ${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
addLocationResponse = AddLocationResponse.fromJson(parsedJson);
|
||||
print('createOrderinprovider $addLocationResponse');
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return addLocationResponse;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
import '../../../../Model/Response/Tenantlocation/Getlocationbyidresponse.dart';
|
||||
|
||||
|
||||
class GetLocationsProvider{
|
||||
|
||||
Future<GetLocationByTenantId?> getLocationById(String urldata) async {
|
||||
GetLocationByTenantId? getLocationById;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata',);
|
||||
|
||||
final response = await http.get(url,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
},
|
||||
);
|
||||
print('GetLocation!!!!!!!!${response.body}');
|
||||
print('GetLocationproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getLocationById = GetLocationByTenantId.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getLocationById;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../../Model/Request/Location/Updatelocation/Updatelocationrequest.dart';
|
||||
import '../../../../Model/Response/Location/Updatelocation/Updatelocationresponse.dart';
|
||||
|
||||
class UpdateLocationProvider{
|
||||
|
||||
Future<UpdateLocationResponse?> updateLocation(UpdateLocation data,String urldata,) async {
|
||||
UpdateLocationResponse? updateLocationResponse;
|
||||
try {
|
||||
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await put(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
print('updateLocationResponseresponsebody ${response.body}');
|
||||
print('updateLocationResponsedatatoJson ${data.toJson()}');
|
||||
print('updateLocationResponseresponseorderdate ${data.tenantid}');
|
||||
print('updateLocationResponseresponsetenantid ${data.locationid}');
|
||||
print('updateLocationResponseresponsemoduleid ${data.moduleid}');
|
||||
print('updateLocationResponseresponsepartnerid ${data.partnerid}');
|
||||
|
||||
|
||||
|
||||
// print('headerssssssssss ${response.headers}');
|
||||
print('CreateOrderurlsssssssssss ${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
updateLocationResponse = UpdateLocationResponse.fromJson(parsedJson);
|
||||
print('createOrderinprovider $updateLocationResponse');
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return updateLocationResponse;
|
||||
}
|
||||
|
||||
}
|
||||
85
lib/Data/Provider/Notification/Notificationprovider.dart
Normal file
85
lib/Data/Provider/Notification/Notificationprovider.dart
Normal file
@@ -0,0 +1,85 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Request/Notification/Notification_request_rider.dart';
|
||||
import '../../../Model/Request/Notification/Notificationrequest.dart';
|
||||
import '../../../Model/Response/Authentication/Sms/Smsresponse.dart';
|
||||
import '../../../Model/Response/Notification/Notificationresponse.dart';
|
||||
|
||||
class NotificationProvider{
|
||||
|
||||
|
||||
Future<NotificationResponse?> createNotification(NotificationRequest data,String urldata,) async {
|
||||
NotificationResponse? notificationResponse;
|
||||
try {
|
||||
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await post(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
logger.i(json.encode(data.toJson()));
|
||||
|
||||
print('notificationResponsebody ${response.body}');
|
||||
print('notificationdatatoJson ${data.toJson()}');
|
||||
|
||||
|
||||
print('CreateNotificationurlsssssssssss ${urldata.toString()}');
|
||||
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
notificationResponse = NotificationResponse.fromJson(parsedJson);
|
||||
|
||||
print('createOrderinprovider ${notificationResponse.toJson()}');
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return notificationResponse;
|
||||
}
|
||||
|
||||
|
||||
Future<NotificationResponse?> NotifyRider(RiderNotificationRequest data,String urldata,) async {
|
||||
NotificationResponse? notificationResponse;
|
||||
try {
|
||||
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await post(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
logger.i(json.encode(data.toJson()));
|
||||
|
||||
print('notificationResponsebody ${response.body}');
|
||||
print('notificationdatatoJson ${data.toJson()}');
|
||||
|
||||
|
||||
print('CreateNotificationurlsssssssssss ${urldata.toString()}');
|
||||
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
notificationResponse = NotificationResponse.fromJson(parsedJson);
|
||||
|
||||
print('createOrderinprovider ${notificationResponse.toJson()}');
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return notificationResponse;
|
||||
}
|
||||
|
||||
}
|
||||
32
lib/Data/Provider/Orders/Ordersprovider.dart
Normal file
32
lib/Data/Provider/Orders/Ordersprovider.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
import 'dart:convert';
|
||||
import 'package:NearleDailyBusiness/Helper/Logger.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
import '../../../Model/Response/Orders/Getorderresponse.dart';
|
||||
|
||||
|
||||
class OrdersProvider {
|
||||
Future<GetOrders?> getOrders(String url) async {
|
||||
try {
|
||||
print('🌐 GetOrderUrl : $url');
|
||||
final response = await http.get(Uri.parse(url));
|
||||
|
||||
print('📦 Response Status: ${response.statusCode}');
|
||||
print('📦 Response Body: ${response.body}');
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = jsonDecode(response.body);
|
||||
|
||||
logger.i("GetOrders Response: ${jsonEncode(data)}");
|
||||
|
||||
return GetOrders.fromJson(data);
|
||||
} else {
|
||||
print('❌ Failed to load orders: ${response.reasonPhrase}');
|
||||
return null;
|
||||
}
|
||||
} catch (e) {
|
||||
print('🚨 Exception in getOrders: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
136
lib/Data/Provider/Products_provider/get_products.dart
Normal file
136
lib/Data/Provider/Products_provider/get_products.dart
Normal file
@@ -0,0 +1,136 @@
|
||||
import 'dart:convert';
|
||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
||||
import 'package:http/http.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Request/products/update_product.dart';
|
||||
import '../../../Model/Response/products/product_info.dart';
|
||||
import '../../../Model/Response/products/product_response.dart';
|
||||
import '../../../Model/Response/products/product_update_response.dart';
|
||||
|
||||
|
||||
|
||||
class GetProductsProvider {
|
||||
|
||||
static const cacheKey = 'productCache';
|
||||
final cacheManager = DefaultCacheManager();
|
||||
|
||||
Future<GetProducts?> getProducts(String urlData) async {
|
||||
GetProducts? getProducts;
|
||||
logger.i('Get all products url data : $urlData');
|
||||
|
||||
try {
|
||||
// 1. Cache first
|
||||
final fileInfo = await cacheManager.getFileFromCache(cacheKey);
|
||||
String? cachedData;
|
||||
if (fileInfo != null && fileInfo.file.existsSync()) {
|
||||
cachedData = await fileInfo.file.readAsString();
|
||||
getProducts = GetProducts.fromJson(json.decode(cachedData));
|
||||
logger.i("Loaded data from cache");
|
||||
}
|
||||
|
||||
// 2. Always hit the network
|
||||
final response = await http.get(
|
||||
Uri.parse(urlData),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final freshData = response.body;
|
||||
|
||||
print(response);
|
||||
|
||||
if (cachedData == null || freshData != cachedData) {
|
||||
logger.i("Updating cache with fresh data");
|
||||
await cacheManager.putFile(
|
||||
cacheKey,
|
||||
response.bodyBytes,
|
||||
fileExtension: 'json',
|
||||
key: cacheKey,
|
||||
);
|
||||
getProducts = GetProducts.fromJson(json.decode(freshData));
|
||||
} else {
|
||||
logger.i("Cache and API data identical – no update");
|
||||
}
|
||||
} else {
|
||||
logger.w("API status: ${response.statusCode}");
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e("Error fetching products: $e");
|
||||
}
|
||||
|
||||
return getProducts;
|
||||
}
|
||||
|
||||
Future<ProductUpdateResponse?> updateProducts(
|
||||
ProductUpdateRequest data, String urldata) async {
|
||||
ProductUpdateResponse? productUpdateResponse;
|
||||
|
||||
try {
|
||||
final url = Uri.parse(urldata);
|
||||
final jsonBody = json.encode(data.toJson());
|
||||
|
||||
// 🔥 THIS IS WHAT YOU WANT TO SEE 🔥
|
||||
print('🚀 SENDING PUT REQUEST');
|
||||
print('URL: $url');
|
||||
print('HEADERS: ${{
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
}}');
|
||||
print('BODY → ${jsonBody}'); // ← Exact JSON being sent
|
||||
print('PRETTY BODY → ${const JsonEncoder.withIndent(' ').convert(data.toJson())}');
|
||||
|
||||
final response = await put(
|
||||
url,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
body: jsonBody,
|
||||
);
|
||||
|
||||
print('✅ RESPONSE: ${response.statusCode}');
|
||||
print('Response Body: ${response.body}');
|
||||
|
||||
final parsedJson = json.decode(response.body);
|
||||
productUpdateResponse = ProductUpdateResponse.fromJson(parsedJson);
|
||||
|
||||
print('Parsed → $productUpdateResponse');
|
||||
|
||||
} catch (e) {
|
||||
print('❌ ERROR: $e');
|
||||
}
|
||||
|
||||
return productUpdateResponse;
|
||||
}
|
||||
|
||||
|
||||
Future<ProductDetailResponse?> getProductDetail(String urldata,) async {
|
||||
logger.i('UrlData for product Details : ${urldata}');
|
||||
ProductDetailResponse? getProductDetailResponse;
|
||||
try {
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await get(url, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
});
|
||||
logger.i('Product Response ${response.body}');
|
||||
logger.i('Get product Details Response${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getProductDetailResponse = ProductDetailResponse.fromJson(parsedJson);
|
||||
} catch (e) {
|
||||
logger.i(e.toString());
|
||||
logger.i('error in productDetails${e.toString()}');
|
||||
logger.i("error");
|
||||
}
|
||||
return getProductDetailResponse;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
34
lib/Data/Provider/Riders/get_rider_provider.dart
Normal file
34
lib/Data/Provider/Riders/get_rider_provider.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Response/Riders/get_rider_model.dart';
|
||||
|
||||
class RidersProvider {
|
||||
|
||||
Future<GetRiderPoolsModel?> getRiders(String urldata,) async {
|
||||
GetRiderPoolsModel? getRiderPoolsModel;
|
||||
|
||||
logger.i('GetRiderURlData : ${urldata}');
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await get(url, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('getRiderPoolsModelresponsebody!!!!!!!!${response.body}');
|
||||
print('getRiderPoolsModelurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getRiderPoolsModel = GetRiderPoolsModel.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getRiderPoolsModel;
|
||||
}
|
||||
|
||||
}
|
||||
49
lib/Data/Provider/Staffs/Addstaffs/Addstaffprovider.dart
Normal file
49
lib/Data/Provider/Staffs/Addstaffs/Addstaffprovider.dart
Normal file
@@ -0,0 +1,49 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../../Helper/Logger.dart';
|
||||
import '../../../../Model/Request/Staffs/Addstaffs/Addstaffsrequest.dart';
|
||||
import '../../../../Model/Response/Staffs/Addstaffs/Addstaffresponse.dart';
|
||||
|
||||
class AddStaffProvider{
|
||||
|
||||
Future<CreateStaffResponse?> addStaff(CreateStaffRequest data,String urldata,) async {
|
||||
CreateStaffResponse? createStaffResponse;
|
||||
try {
|
||||
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await post(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
print('createStaffResponseresponsebody ${response.body}');
|
||||
print('createStaffResponsedatatoJson ${data.toJson()}');
|
||||
print('createStaffResponseresponseorderdate ${data.tenantid}');
|
||||
print('createStaffResponseresponsetenantid ${data.locationid}');
|
||||
print('createStaffResponseresponseconfigid ${data.configid}');
|
||||
print('createStaffResponseresponsepartnerid ${data.partnerid}');
|
||||
logger.i(json.encode(data.toJson()));
|
||||
|
||||
|
||||
|
||||
// print('headerssssssssss ${response.headers}');
|
||||
print('CreateOrderurlsssssssssss ${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
createStaffResponse = CreateStaffResponse.fromJson(parsedJson);
|
||||
print('createOrderinprovider${createStaffResponse}');
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return createStaffResponse;
|
||||
}
|
||||
|
||||
}
|
||||
34
lib/Data/Provider/Staffs/Staffsprovider.dart
Normal file
34
lib/Data/Provider/Staffs/Staffsprovider.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../Model/Response/Staffs/Getstaffsresponse.dart';
|
||||
|
||||
class GetStaffsProvider{
|
||||
|
||||
Future<GetStaffsResponse?> getStaffs(String urldata,) async {
|
||||
GetStaffsResponse? getStaffsResponse;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await get(url, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('getStaffsResponse!!!!!!!!${response.body}');
|
||||
print('getStaffsproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getStaffsResponse = GetStaffsResponse.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getStaffsResponse;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../../Model/Request/Staffs/UpdateStaff/Updatestaffrequest.dart';
|
||||
import '../../../../Model/Response/Staffs/Updatestaff/Updatestaffresponse.dart';
|
||||
|
||||
class UpdateStaffProvider{
|
||||
|
||||
Future<UpdateStaffResponse?> updateStaff(UpdateStaffRequest data,String urldata,) async {
|
||||
UpdateStaffResponse? updateStaffResponse;
|
||||
try {
|
||||
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await put(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
print('updateStaffResponseresponsebody ${response.body}');
|
||||
print('updateStaffResponsedatatoJson ${data.toJson()}');
|
||||
print('updateStaffResponseresponseorderdate ${data.tenantid}');
|
||||
print('updateStaffResponseresponsetenantid ${data.locationid}');
|
||||
print('updateStaffResponseresponsepartnerid ${data.partnerid}');
|
||||
|
||||
|
||||
|
||||
// print('headerssssssssss ${response.headers}');
|
||||
print('updateStaffssssssssss ${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
updateStaffResponse = UpdateStaffResponse.fromJson(parsedJson);
|
||||
print('updateStaffinprovider $updateStaffResponse');
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return updateStaffResponse;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
94
lib/Data/Provider/Summary/ordersprovider.dart
Normal file
94
lib/Data/Provider/Summary/ordersprovider.dart
Normal file
@@ -0,0 +1,94 @@
|
||||
import 'dart:convert';
|
||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Request/Orders/Cancelorderrequest.dart';
|
||||
import '../../../Model/Response/Summary/Cancelorderresponse.dart';
|
||||
import '../../../Model/Response/Summary/Getsummarysresponse.dart';
|
||||
import '../../../Model/Response/Summary/Ordersummaryresponse.dart';
|
||||
|
||||
|
||||
|
||||
class OrderSummaryProvider {
|
||||
|
||||
|
||||
|
||||
|
||||
// Fetch deliveries/orders from API
|
||||
Future<GetDeliveries?> getDelivery(String url) async {
|
||||
try {
|
||||
final response = await http.get(Uri.parse(url));
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
|
||||
print(url);
|
||||
print(response);
|
||||
final data = json.decode(response.body);
|
||||
return GetDeliveries.fromJson(data);
|
||||
} else {
|
||||
logger.e('Failed to load orders. Status code: ${response.statusCode}');
|
||||
return null;
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e('Error in getDelivery: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<OrderSummary?> getOrderSummary(String url) async {
|
||||
try {
|
||||
final response = await http.get(Uri.parse(url));
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
|
||||
print(url);
|
||||
print(response.body);
|
||||
final data = json.decode(response.body);
|
||||
return OrderSummary.fromJson(data);
|
||||
|
||||
} else {
|
||||
logger.e('Failed to load order summary. Status code: ${response.statusCode}');
|
||||
return null;
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e('Error in getOrderSummary: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<CancelOrderResponse?> updateOrders(CancelOrderRequest data,String urldata,) async {
|
||||
CancelOrderResponse? updateOrder;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
|
||||
final response = await put(url,
|
||||
body: json.encode({
|
||||
"orderheaderid": data.orderheaderid,
|
||||
"orderstatus": "${data.orderstatus}",
|
||||
"cancelled": "${data.cancelled}"
|
||||
}),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
print('updateOrderresponsebody ${response.body}');
|
||||
print('updateOrderurlsssssssssss ${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
updateOrder = CancelOrderResponse.fromJson(parsedJson);
|
||||
print('updateOrderinprovider${updateOrder}');
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return updateOrder;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
33
lib/Data/Provider/TenantPartner/Tenantpartnerprovider.dart
Normal file
33
lib/Data/Provider/TenantPartner/Tenantpartnerprovider.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import '../../../Model/Response/Partners/Getpartnerinforequest.dart';
|
||||
|
||||
class GetPartnersProvider{
|
||||
|
||||
Future<GetPartnersInfo?> getPartners(String urldata) async {
|
||||
GetPartnersInfo? getLocationById;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata',);
|
||||
|
||||
final response = await get(url,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
},
|
||||
);
|
||||
print('getPartners!!!!!!!!${response.body}');
|
||||
print('getPartnersproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getLocationById = GetPartnersInfo.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getLocationById;
|
||||
}
|
||||
|
||||
}
|
||||
63
lib/Data/Provider/Tenantlocation/Getlocationprovider.dart
Normal file
63
lib/Data/Provider/Tenantlocation/Getlocationprovider.dart
Normal file
@@ -0,0 +1,63 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../../../Model/Response/Tenantlocation/Getlocationbyidresponse.dart';
|
||||
import '../../../Model/Response/Tenantlocation/Locationbyid/Locationidresponse.dart';
|
||||
|
||||
|
||||
class GetLocationsProvider{
|
||||
|
||||
Future<GetLocationByTenantId?> getTenantLocationById(String urldata) async {
|
||||
GetLocationByTenantId? getLocationById;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata',);
|
||||
|
||||
final response = await http.get(url,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
},
|
||||
);
|
||||
print('GetLocation!!!!!!!!${response.body}');
|
||||
print('GetLocationproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getLocationById = GetLocationByTenantId.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getLocationById;
|
||||
}
|
||||
|
||||
Future<GetLocationByLocaionId?> getLocationById(String urldata) async {
|
||||
GetLocationByLocaionId? getLocationsById;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata',);
|
||||
|
||||
final response = await http.get(url,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
},
|
||||
);
|
||||
print('getLocationById!!!!!!!!${response.body}');
|
||||
print('getLocationByIdproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getLocationsById = GetLocationByLocaionId.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getLocationsById;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
31
lib/Data/Provider/Tenantmodulecategory/Categoryprovider.dart
Normal file
31
lib/Data/Provider/Tenantmodulecategory/Categoryprovider.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
import '../../../Model/Response/Appcategory/Appcategoryresponse.dart';
|
||||
|
||||
class GetTenantCategoriesProvider{
|
||||
|
||||
// Future<AppCategory?> getTenantCategory(String urldata,) async {
|
||||
// AppCategory? getCategories;
|
||||
// try {
|
||||
//
|
||||
// final url = Uri.parse('$urldata');
|
||||
//
|
||||
// final response = await http.get(url, headers: {
|
||||
// 'Content-Type': 'application/json',
|
||||
// 'Accept': 'application/json',
|
||||
// // 'Authorization': '$token',
|
||||
// });
|
||||
// print('getCategories!!!!!!!!${response.body}');
|
||||
// print('getCategoriesproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
// Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
//
|
||||
// // getCategories = AppCategory.fromJson(parsedJson);
|
||||
//
|
||||
// } catch (e) {
|
||||
// print(e.toString());
|
||||
// print("error");
|
||||
// }
|
||||
// return getCategories;
|
||||
// }
|
||||
}
|
||||
33
lib/Data/Provider/Tenantpricing/Tenantchargesprovider.dart
Normal file
33
lib/Data/Provider/Tenantpricing/Tenantchargesprovider.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import '../../../Model/Response/Tenantpricing/Tenantpricingresponse.dart';
|
||||
|
||||
|
||||
class TenantPricingProvider {
|
||||
Future<GetTenantPricing?> getTenantPricing(String urldata) async {
|
||||
GetTenantPricing? getTenantPricing;
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata',);
|
||||
|
||||
final response = await get(url,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
},
|
||||
);
|
||||
print('getTenantPricingresponse!!!!!!!!${response.body}');
|
||||
print('getTenantPricingproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
getTenantPricing = GetTenantPricing.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return getTenantPricing;
|
||||
}
|
||||
|
||||
}
|
||||
70
lib/Data/Provider/Tenants/Tenantsprovider.dart
Normal file
70
lib/Data/Provider/Tenants/Tenantsprovider.dart
Normal file
@@ -0,0 +1,70 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Response/Tenants/Tenantinforesponse.dart';
|
||||
|
||||
class TenantsProvider {
|
||||
static const cacheKey = 'TenantCache';
|
||||
final cacheManager = DefaultCacheManager();
|
||||
|
||||
Future<TenantInfo?> getTenantInfo(String urlData) async {
|
||||
TenantInfo? tenantInfo;
|
||||
|
||||
logger.i('TenantInfo URL data: ${urlData}');
|
||||
logger.i('TenantInfo URL data: $urlData'); // 👈 Add this here
|
||||
|
||||
|
||||
try {
|
||||
/// 1. Attempt to load from cache first
|
||||
final fileInfo = await cacheManager.getFileFromCache(cacheKey);
|
||||
|
||||
String? cachedData;
|
||||
|
||||
if (fileInfo != null && fileInfo.file.existsSync()) {
|
||||
cachedData = await fileInfo.file.readAsString();
|
||||
final parsedJson = json.decode(cachedData);
|
||||
tenantInfo = TenantInfo.fromJson(parsedJson);
|
||||
logger.i("......Loaded data from cache......");
|
||||
}
|
||||
|
||||
/// 2.Always make a request to check for updates
|
||||
final response = await get(Uri.parse(urlData), headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
});
|
||||
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final freshData = response.body;
|
||||
|
||||
/// Compare with cached data (optional optimization: hash/ETag/updatedAt)
|
||||
if (cachedData == null || freshData != cachedData) {
|
||||
logger.i("......Updating TenantDetails cache with fresh API data.......");
|
||||
|
||||
/// Update the cache with fresh data
|
||||
await cacheManager.putFile(
|
||||
cacheKey,
|
||||
response.bodyBytes,
|
||||
fileExtension: 'json',
|
||||
key: cacheKey,
|
||||
);
|
||||
final parsedJson = json.decode(freshData);
|
||||
tenantInfo = TenantInfo.fromJson(parsedJson);
|
||||
} else {
|
||||
logger.i(".........Tenant Details API data is same as cache, no update required..........");
|
||||
}
|
||||
} else {
|
||||
logger.w("Tenant Details API responded with status code: ${response.statusCode}");
|
||||
}
|
||||
} catch (e) {
|
||||
logger.e("Error fetching customer deals: $e");
|
||||
}
|
||||
|
||||
return tenantInfo;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
68
lib/Data/Provider/Users/user_provider.dart
Normal file
68
lib/Data/Provider/Users/user_provider.dart
Normal file
@@ -0,0 +1,68 @@
|
||||
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http/http.dart';
|
||||
|
||||
import '../../../Model/Request/User/Updateuser/Updateuserrequest.dart';
|
||||
import '../../../Model/Response/User/Updateuser/Updateuserresponse.dart';
|
||||
import '../../../Model/Response/User/Usermodelresponse.dart';
|
||||
|
||||
|
||||
|
||||
class UserProvider {
|
||||
Future<UserModelResponse?> getUser(String urldata, String token) async {
|
||||
UserModelResponse? userProfile;
|
||||
// LoginProvider();
|
||||
try {
|
||||
|
||||
final url = Uri.parse('$urldata');
|
||||
final response = await http.get(url, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
'token':'$token',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
print('userproviderresponsebody!!!!!!!!${response.body}');
|
||||
print('userproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
userProfile = UserModelResponse.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return userProfile;
|
||||
}
|
||||
|
||||
|
||||
Future<UserUpdateResponse?> updateUser(UserUpdateRequest data,String urldata) async {
|
||||
UserUpdateResponse? userUpdateResponse;
|
||||
// LoginProvider();
|
||||
try {
|
||||
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await put(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
print('userUpdateproviderresponsebody!!!!!!!!${response.body}');
|
||||
print('userUpdateproviderurldata!!!!!!!!${urldata.toString()}');
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body.toString());
|
||||
|
||||
userUpdateResponse = UserUpdateResponse.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return userUpdateResponse;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
43
lib/Data/Provider/deliveries/create_delivery.dart
Normal file
43
lib/Data/Provider/deliveries/create_delivery.dart
Normal file
@@ -0,0 +1,43 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Request/create_delivery_request/create_delivery_request.dart';
|
||||
import '../../../Model/Response/create_delivery_response/create_delivery_request.dart';
|
||||
|
||||
class CreateDeliveryProvider {
|
||||
|
||||
Future<CreateDeliveryResponse?> createDelivery(List<CreateDelivery> data,String urldata,) async {
|
||||
|
||||
CreateDeliveryResponse? createDeliveryResponse;
|
||||
logger.i('Url data for crate delivery : $urldata');
|
||||
logger.i('Json Encode : ${json.encode(data)}');
|
||||
try {
|
||||
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await post(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
logger.i('create Delivery : ${response.body}');
|
||||
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body);
|
||||
|
||||
createDeliveryResponse = CreateDeliveryResponse.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
logger.i(e.toString());
|
||||
logger.i("error");
|
||||
}
|
||||
return createDeliveryResponse;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
37
lib/Data/Provider/deliveries/update_delivery_provider.dart
Normal file
37
lib/Data/Provider/deliveries/update_delivery_provider.dart
Normal file
@@ -0,0 +1,37 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import '../../../Helper/Logger.dart';
|
||||
import '../../../Model/Request/update_delivery/update_delivery.dart';
|
||||
import '../../../Model/Response/update_delivery_response/update_delivery_response.dart';
|
||||
|
||||
class UpdateDeliveryProvider {
|
||||
|
||||
Future<UpdateDeliveryResponse?> updateDelivery (UpdateDeliveryRequest data,String urldata,) async {
|
||||
UpdateDeliveryResponse? updateDeliveryResponse;
|
||||
try {
|
||||
|
||||
final url = Uri.parse(urldata);
|
||||
|
||||
final response = await put(url,
|
||||
body: json.encode(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
// 'Authorization': '$token',
|
||||
});
|
||||
|
||||
logger.i('Update Delivery Response : ${response.body}');
|
||||
|
||||
Map<String, dynamic> parsedJson = json.decode(response.body);
|
||||
|
||||
updateDeliveryResponse = UpdateDeliveryResponse.fromJson(parsedJson);
|
||||
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
print("error");
|
||||
}
|
||||
return updateDeliveryResponse;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
21
lib/Data/Repository/Admintoken/Getadmintokenrepository.dart
Normal file
21
lib/Data/Repository/Admintoken/Getadmintokenrepository.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Admintoken/Admintokenresponse.dart';
|
||||
import '../../Provider/Admintoken/Getadmintokenprovider.dart';
|
||||
|
||||
class GetAdminTokenRepository{
|
||||
|
||||
GetAdminTokenProvider getAdminTokenProvider = GetAdminTokenProvider();
|
||||
|
||||
int? appLocationId;
|
||||
|
||||
Future<GetAdminToken?> getAdminToken() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
appLocationId = prefs.getInt('appLocationId');
|
||||
var result = await getAdminTokenProvider.getAdminToken('${ApiConstants.adminToken}/?applocationid=$appLocationId');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
17
lib/Data/Repository/Appcategory/Appcategoryrepository.dart
Normal file
17
lib/Data/Repository/Appcategory/Appcategoryrepository.dart
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Appcategory/app_category_response.dart';
|
||||
import '../../Provider/Appcategory/Appcategoryprovider.dart';
|
||||
|
||||
class AppCategoryRepository{
|
||||
AppCategoryProvider appCategoryProvider = AppCategoryProvider();
|
||||
|
||||
Future<GetAppCategories?> getAppCategory() async {
|
||||
|
||||
return await appCategoryProvider.getAppCategory('https://fiesta.nearle.app/live/api/v1/mob/utils/getsubcategories');
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
15
lib/Data/Repository/Applocation/Applocationrepository.dart
Normal file
15
lib/Data/Repository/Applocation/Applocationrepository.dart
Normal file
@@ -0,0 +1,15 @@
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Applocations/Applocationresponse.dart';
|
||||
import '../../Provider/Applocation/Applocationprovider.dart';
|
||||
|
||||
class AppLocationRepository{
|
||||
AppLocationProvider appLocationProvider = AppLocationProvider();
|
||||
|
||||
Future<GetAppLocations?> getAppLocations() async {
|
||||
|
||||
return await appLocationProvider.getAppLocations(ApiConstants.appLocations);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import '../../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../../Model/Request/Authentication/Createuser/Createuserresponse.dart';
|
||||
import '../../../../Model/Response/Authentication/Createtenantuser/Createtenantuserresponse.dart';
|
||||
import '../../../Provider/Authentication/Createtenantuser/Createtenantuserprovider.dart';
|
||||
|
||||
|
||||
class CreateTenantUserRepository{
|
||||
int? userId;
|
||||
CreateTenantUserProviders createTenantUserProviders =CreateTenantUserProviders();
|
||||
|
||||
Future<CreateTenantUserResponse?> createTenantUser(CreateTenantUser data) async {
|
||||
var result = await createTenantUserProviders.createTenantUser(data,'${ApiConstants.createTenantUser}');
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
15
lib/Data/Repository/Authentication/loginrepository.dart
Normal file
15
lib/Data/Repository/Authentication/loginrepository.dart
Normal file
@@ -0,0 +1,15 @@
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Request/Authentication/Loginrequest.dart';
|
||||
import '../../../Model/Response/Authentication/Loginresponse.dart';
|
||||
import '../../Provider/Authentication/loginprovider.dart';
|
||||
|
||||
class LoginRepository{
|
||||
LoginProvider loginProvider = LoginProvider();
|
||||
|
||||
Future<LoginResponse?> signIn(LoginRequest data) async {
|
||||
|
||||
return await loginProvider.signIn('https://fiesta.nearle.app/live/api/v1/mob/users/tenant/login',data);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
13
lib/Data/Repository/CreateOrder/CreateOrderRepository.dart
Normal file
13
lib/Data/Repository/CreateOrder/CreateOrderRepository.dart
Normal file
@@ -0,0 +1,13 @@
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Request/Createorder/Createorderrequest.dart';
|
||||
import '../../../Model/Response/Createorder/CreateOrderResponsemodel.dart';
|
||||
import '../../Provider/CreatOrder/CreateOrderProvider.dart';
|
||||
|
||||
class CreateOrderRepository{
|
||||
CreateOrderProviders createOrderProviders =CreateOrderProviders();
|
||||
Future<CreateOrderResponse?>createOrder(CreateOrder data) async {
|
||||
var result = await createOrderProviders.createOrder(data,ApiConstants.createOrder);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Request/Authentication/Createuser/Createdeliveryaddress/Createdeliveryaddressrequest.dart';
|
||||
import '../../../Model/Request/Createcustomer/Createcustomerrequest.dart';
|
||||
import '../../../Model/Response/Createcustomer/Createcustomerresponse.dart';
|
||||
import '../../../Model/Response/Createcustomer/Createdeliveryaddress/Createdeliveryaddressresponsel.dart';
|
||||
import '../../Provider/Createcustomer/Createcustomerprovider.dart';
|
||||
|
||||
class CreateCustomerRepository{
|
||||
CreateCustomerProvider createCustomerProvider = CreateCustomerProvider();
|
||||
|
||||
Future<CreateCustomerResponse?> createCustomer(CreateCustomers data) async {
|
||||
var result = await createCustomerProvider.createCustomer(data,'${ApiConstants.createCustomer}');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<CreateDeliveryAddressResponse?> createDeliveryAddress(CreateDeliveryAddress data) async {
|
||||
var result = await createCustomerProvider.createDeliveryAddress(data,'${ApiConstants.createDeliveryAddress}');
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Customers/GetCustomerById/GetCustomerByTenantId.dart';
|
||||
import '../../../Model/Response/Customers/GetCustomerById/Getdropcustomerbytenantid.dart';
|
||||
import '../../Provider/Customers/getCustomerbytenantidprovider.dart';
|
||||
|
||||
|
||||
class GetCustomersByTenantIdRepository{
|
||||
GetCustomersByTenantIdProvider getCustomersByTenantIdProvider = GetCustomersByTenantIdProvider();
|
||||
int? tenantId;
|
||||
|
||||
Future<GetCustomerByTenantId?> getCustomerByTenantId() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var result = await getCustomersByTenantIdProvider.getCustomerByTenantId('${ApiConstants.getCustomerByTenantId}/?tenantid=$tenantId&pageno=1&pagesize=20');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetCustomerByTenantId?> getCustomerKeywordByTenantId(keyword) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var result = await getCustomersByTenantIdProvider.getCustomerByTenantId('${ApiConstants.getCustomerSearchByTenantId}/?tenantid=$tenantId&keyword=$keyword');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetCustomerByTenantId?> getTenantsByTenantId() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var result = await getCustomersByTenantIdProvider.getTenantsByTenantId('${ApiConstants.getCustomerByTenantId}/?tenantid=$tenantId&locationid=1');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetCustomerByTenantId?> getCustomerByPageLimitTenantId(page,limit) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var result = await getCustomersByTenantIdProvider.getTenantsByTenantId('${ApiConstants.getCustomerByTenantId}/?tenantid=$tenantId&pageno=$page&pagesize=$limit');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Future<GetDropCustomerByTenantId?> getDropCustomerByTenantId() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var result = await getCustomersByTenantIdProvider.getDropCustomerByTenantId('${ApiConstants.getCustomerByTenantId}/?tenantid=$tenantId');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetDropCustomerByTenantId?> getDropCustomerKeywordByTenantId(keyword) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var result = await getCustomersByTenantIdProvider.getDropCustomerByTenantId('${ApiConstants.getCustomerSearchByTenantId}/?tenantid=$tenantId&keyword=$keyword');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetDropCustomerByTenantId?> getDropCustomerByPageLimitTenantId(page,limit) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var result = await getCustomersByTenantIdProvider.getDropCustomerByTenantId('${ApiConstants.getCustomerByTenantId}/?tenantid=$tenantId&pageno=$page&pagesize=$limit');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Future<GetDropCustomerByTenantId?> getDropTenantByTenantId() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var result = await getCustomersByTenantIdProvider.getDropTenantByTenantId('${ApiConstants.getCustomerByTenantId}/?tenantid=$tenantId&locationid=1');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
import '../../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../../Model/Request/Location/Addlocation/Addlocationrequest.dart';
|
||||
import '../../../../Model/Response/Location/Addlocation/Addlocationresponse.dart';
|
||||
import '../../../Provider/Location/Addlocation/Addlocationprovider.dart';
|
||||
|
||||
class AddLocationRepository{
|
||||
|
||||
AddLocationProvider addLocationProvider = AddLocationProvider();
|
||||
|
||||
Future<AddLocationResponse?>addLocation(AddLocation data) async {
|
||||
var result = await addLocationProvider.addLocation(data,'${ApiConstants.createLocation}');
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../../Model/Response/Tenantlocation/Getlocationbyidresponse.dart';
|
||||
import '../../../Provider/Location/GetLocation/getlocationprovider.dart';
|
||||
|
||||
|
||||
|
||||
class GetLocationsRepository{
|
||||
GetLocationsProvider getLocationsProvider = GetLocationsProvider();
|
||||
int tenantId = 0;
|
||||
int locationId = 0;
|
||||
|
||||
Future<GetLocationByTenantId?> getLocationById() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId')!;
|
||||
locationId = prefs.getInt('locationId')!;
|
||||
var result = await getLocationsProvider.getLocationById('${ApiConstants.getLocationById}?tenantid=$tenantId',);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
import '../../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../../Model/Request/Location/Updatelocation/Updatelocationrequest.dart';
|
||||
import '../../../../Model/Response/Location/Updatelocation/Updatelocationresponse.dart';
|
||||
import '../../../Provider/Location/Updatelocation/Updatelocationprovider.dart';
|
||||
|
||||
class UpdateLocationRepository{
|
||||
|
||||
UpdateLocationProvider updateLocationProvider =UpdateLocationProvider();
|
||||
|
||||
Future<UpdateLocationResponse?>updateLocation(UpdateLocation data) async {
|
||||
var result = await updateLocationProvider.updateLocation(data,ApiConstants.updateLocation);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
21
lib/Data/Repository/Notification/Notificationrepository.dart
Normal file
21
lib/Data/Repository/Notification/Notificationrepository.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Authentication/Sms/Smsresponse.dart';
|
||||
import '../../../Model/Response/Notification/Notificationresponse.dart';
|
||||
import '../../Provider/Notification/Notificationprovider.dart';
|
||||
|
||||
class NotificationRepository{
|
||||
NotificationProvider notificationProvider = NotificationProvider();
|
||||
|
||||
Future<NotificationResponse?> createNotification( data) async {
|
||||
var result = await notificationProvider.createNotification(data,ApiConstants.notifyUrl);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Future<NotificationResponse?> notifyRider( data) async {
|
||||
var result = await notificationProvider.NotifyRider(data,ApiConstants.notifyRider);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
61
lib/Data/Repository/Orders/Orderrepository.dart
Normal file
61
lib/Data/Repository/Orders/Orderrepository.dart
Normal file
@@ -0,0 +1,61 @@
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Orders/Getorderresponse.dart';
|
||||
import '../../Provider/Orders/Ordersprovider.dart';
|
||||
|
||||
class OrdersRepository {
|
||||
|
||||
int? tenantId;
|
||||
int? locationid;
|
||||
|
||||
OrdersProvider ordersProvider = OrdersProvider();
|
||||
|
||||
Future<GetOrders?> getOrders(String status) async {
|
||||
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
locationid = prefs.getInt('locationId');
|
||||
var fromDate = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
var toDate = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
|
||||
print('ddd $status');
|
||||
|
||||
// var fromDateTm = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
// var toDateTm = DateFormat("yyyy-MM-dd").format(DateTime.now().add(Duration(days: 1)));
|
||||
|
||||
var result = await ordersProvider.getOrders(
|
||||
'${ApiConstants.getOrders}/?tenantid=$tenantId&status=$status&fromdate=$fromDate&todate=$toDate&locationid=$locationid');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetOrders?> getCurrentOrders() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var fromDate = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
var toDate = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
var result = await ordersProvider.getOrders('${ApiConstants.getOrders}/?tenantid=$tenantId&status=ongoing&fromdate=$fromDate&todate=$toDate&locationid=$locationid');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetOrders?> getCompletedOrders() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var fromDate = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
var toDate = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
var result = await ordersProvider.getOrders('${ApiConstants.getOrders}/?tenantid=$tenantId&status=delivered&fromdate=$fromDate&todate=$toDate&locationid=$locationid');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetOrders?> getCancelledOrder() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
var fromDate = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
var toDate = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
var result = await ordersProvider.getOrders('${ApiConstants.getOrders}/?tenantid=$tenantId&status=cancelled&fromdate=$fromDate&todate=$toDate&locationid=$locationid');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
23
lib/Data/Repository/Rider/get_rider_repo.dart
Normal file
23
lib/Data/Repository/Rider/get_rider_repo.dart
Normal file
@@ -0,0 +1,23 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Riders/get_rider_model.dart';
|
||||
import '../../Provider/Riders/get_rider_provider.dart';
|
||||
|
||||
class RidersRepository{
|
||||
|
||||
RidersProvider ridersProvider = RidersProvider();
|
||||
|
||||
int? tenantId = 0;
|
||||
int? locationId = 0;
|
||||
|
||||
Future<GetRiderPoolsModel?> getRiders(appLocationId) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
locationId = prefs.getInt('locationId');
|
||||
var result = await ridersProvider.getRiders('${ApiConstants.getRiders}?tenantid=${tenantId}&location=$locationId');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
17
lib/Data/Repository/Staffs/Addstaff/Addstaffrepository.dart
Normal file
17
lib/Data/Repository/Staffs/Addstaff/Addstaffrepository.dart
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
import '../../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../../Model/Request/Staffs/Addstaffs/Addstaffsrequest.dart';
|
||||
import '../../../../Model/Response/Staffs/Addstaffs/Addstaffresponse.dart';
|
||||
import '../../../Provider/Staffs/Addstaffs/Addstaffprovider.dart';
|
||||
|
||||
class AddStaffRepository{
|
||||
AddStaffProvider addStaffProvider =AddStaffProvider();
|
||||
|
||||
Future<CreateStaffResponse?>addStaff(CreateStaffRequest data) async {
|
||||
var result = await addStaffProvider.addStaff(data,ApiConstants.createStaff);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
20
lib/Data/Repository/Staffs/Getstaffsrepository.dart
Normal file
20
lib/Data/Repository/Staffs/Getstaffsrepository.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Staffs/Getstaffsresponse.dart';
|
||||
import '../../Provider/Staffs/Staffsprovider.dart';
|
||||
|
||||
class GetStaffsRepository{
|
||||
|
||||
int? tenantId;
|
||||
|
||||
GetStaffsProvider getStaffsProvider = GetStaffsProvider();
|
||||
|
||||
Future<GetStaffsResponse?> getStaffs() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId')!;
|
||||
var result = await getStaffsProvider.getStaffs('${ApiConstants.getStaffs}/?tenantid=$tenantId',);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
import '../../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../../Model/Request/Staffs/UpdateStaff/Updatestaffrequest.dart';
|
||||
import '../../../../Model/Response/Staffs/Updatestaff/Updatestaffresponse.dart';
|
||||
import '../../../Provider/Staffs/Updatestaff/Updatestaffprovider.dart';
|
||||
|
||||
class UpdateStaffRepository{
|
||||
UpdateStaffProvider updateStaffProvider = UpdateStaffProvider();
|
||||
|
||||
Future<UpdateStaffResponse?> updateStaff(UpdateStaffRequest data) async {
|
||||
var result = await updateStaffProvider.updateStaff(data,ApiConstants.updateStaff,);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
92
lib/Data/Repository/Summary/ordersrepository.dart
Normal file
92
lib/Data/Repository/Summary/ordersrepository.dart
Normal file
@@ -0,0 +1,92 @@
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Request/Orders/Cancelorderrequest.dart';
|
||||
import '../../../Model/Response/Summary/Cancelorderresponse.dart';
|
||||
import '../../../Model/Response/Summary/Getsummarysresponse.dart';
|
||||
import '../../../Model/Response/Summary/Ordersummaryresponse.dart';
|
||||
import '../../Provider/Summary/ordersprovider.dart';
|
||||
|
||||
|
||||
|
||||
|
||||
class OrderSummaryRepository{
|
||||
OrderSummaryProvider orderSummaryProvider = OrderSummaryProvider();
|
||||
DateTime? now;
|
||||
int moduleId = 0;
|
||||
int tenantId = 0;
|
||||
int locationId = 0;
|
||||
int roleId = 0;
|
||||
int orderheaderId =0;
|
||||
|
||||
DateTime getDate(DateTime d) => DateTime(d.year, d.month, d.day);
|
||||
|
||||
|
||||
|
||||
Future<GetDeliveries?> getOrdersToday({String? keyword}) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
var keywordParam = keyword ?? '';
|
||||
roleId = prefs.getInt('roleId')??0;
|
||||
tenantId = prefs.getInt('tenantId')??0;
|
||||
locationId = prefs.getInt('locationId')??0;
|
||||
var fromdate = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
var todate = DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
var result = await orderSummaryProvider.getDelivery('${ApiConstants.getDeliveries}/?tenantid=$tenantId&fromdate=$fromdate&todate=$todate''&status=delivered&pageno=1&pagesize=30&keyword=$keywordParam&locationid=$locationId',);
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetDeliveries?> getOrdersWeek({String? keyword}) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
roleId = prefs.getInt('roleid')??0;
|
||||
tenantId = prefs.getInt('tenantId')??0;
|
||||
locationId = prefs.getInt('locationId')??0;
|
||||
final date = DateTime.now();
|
||||
var keywordParam = keyword ?? '';
|
||||
|
||||
DateTime start = getDate(date.subtract(Duration(days: date.weekday - 1,)));
|
||||
DateTime week = getDate(
|
||||
date.add(Duration(days: DateTime.daysPerWeek - date.weekday)));
|
||||
|
||||
|
||||
var fromdate = DateFormat("yyyy-MM-dd")
|
||||
.format(DateFormat("yyyy-MM-dd", "en_US").parse(start.toString()));
|
||||
var todate= DateFormat("yyyy-MM-dd")
|
||||
.format(DateFormat("yyyy-MM-dd", "en_US").parse(week.toString()));
|
||||
var result = await orderSummaryProvider.getDelivery('${ApiConstants.getDeliveries}/?tenantid=$tenantId&fromdate=$fromdate'
|
||||
'&todate=$todate&status=delivered&pageno=1&pagesize=30&keyword=$keywordParam&locationid=$locationId');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetDeliveries?> getOrdersMonth({String? keyword}) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
roleId = prefs.getInt('roleid')??0;
|
||||
tenantId = prefs.getInt('tenantId')??0;
|
||||
locationId = prefs.getInt('locationId')??0;
|
||||
now = DateTime.now();
|
||||
var keywordParam = keyword ?? '';
|
||||
DateTime lastDayOfMonth = new DateTime(now!.year, now!.month + 1, 0);
|
||||
DateTime firstDayOfMonth = new DateTime(now!.year, now!.month, 1);
|
||||
var fromdate = DateFormat("yyyy-MM-dd").format(
|
||||
DateFormat("yyyy-MM-dd", "en_US").parse(firstDayOfMonth.toString()));
|
||||
var todate = DateFormat("yyyy-MM-dd").format(
|
||||
DateFormat("yyyy-MM-dd", "en_US").parse(lastDayOfMonth.toString()));
|
||||
var result = await orderSummaryProvider.getDelivery('${ApiConstants.getDeliveries}/?tenantid=$tenantId&fromdate='
|
||||
'$fromdate&todate=$todate&status=delivered&pageno=1&pagesize=30&keyword=$keywordParam&locationid=$locationId');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Future<OrderSummary?> getOrderSummary() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId')!;
|
||||
locationId = prefs.getInt('locationId')??0;
|
||||
var result = await orderSummaryProvider.getOrderSummary('${ApiConstants.getOrderSummary}/?tenantid=$tenantId&locationid=$locationId');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<CancelOrderResponse?>updateOrders(CancelOrderRequest data) async {
|
||||
var result = await orderSummaryProvider.updateOrders(data,'${ApiConstants.updateOrderStatus}');
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Partners/Getpartnerinforequest.dart';
|
||||
import '../../Provider/TenantPartner/Tenantpartnerprovider.dart';
|
||||
|
||||
class GetPartnersRepository{
|
||||
GetPartnersProvider getPartnersProvider = GetPartnersProvider();
|
||||
|
||||
int tenantId = 0;
|
||||
|
||||
Future<GetPartnersInfo?> getPartners(locationId) async {
|
||||
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
locationId = prefs.getInt('locationId')??0;
|
||||
var result = await getPartnersProvider.getPartners("${ApiConstants.getPartnerInfo}?applocationid=$locationId",);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Tenantlocation/Getlocationbyidresponse.dart';
|
||||
import '../../../Model/Response/Tenantlocation/Locationbyid/Locationidresponse.dart';
|
||||
import '../../Provider/Tenantlocation/Getlocationprovider.dart';
|
||||
|
||||
|
||||
class GetLocationsRepository{
|
||||
GetLocationsProvider getLocationsProvider = GetLocationsProvider();
|
||||
int? tenantId;
|
||||
int? locationId;
|
||||
|
||||
Future<GetLocationByTenantId?> getTenantLocationById() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId')??0;
|
||||
locationId = prefs.getInt('locationId')??0;
|
||||
var result = await getLocationsProvider.getTenantLocationById('${ApiConstants.getTenantLocationById}?tenantid=$tenantId&locationid=$locationId');
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<GetLocationByLocaionId?> getLocationById() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId')??0;
|
||||
locationId = prefs.getInt('locationId')??0;
|
||||
var result = await getLocationsProvider.getLocationById('${ApiConstants.getLocationsById}?tenantid=$tenantId&locationid=$locationId',);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Appcategory/Appcategoryresponse.dart';
|
||||
import '../../Provider/Tenantmodulecategory/Categoryprovider.dart';
|
||||
|
||||
class GetTenantCategoriesRepository{
|
||||
|
||||
GetTenantCategoriesProvider getTenantCategoriesProvider = GetTenantCategoriesProvider();
|
||||
|
||||
// Future<AppCategory?> getTenantCategory() async {
|
||||
//
|
||||
// return await getTenantCategoriesProvider.getTenantCategory('${ApiConstants.appCategory}/?moduleid=6');
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Tenantpricing/Tenantpricingresponse.dart';
|
||||
import '../../Provider/Tenantpricing/Tenantchargesprovider.dart';
|
||||
|
||||
class TenantPricingRepository {
|
||||
TenantPricingProvider tenantChargesProvider =TenantPricingProvider();
|
||||
int tenantId = 0;
|
||||
|
||||
Future<GetTenantPricing?> getTenantPricing() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId')??0;
|
||||
var result = await tenantChargesProvider.getTenantPricing('${ApiConstants.getTenantPricing}/?tenantid=$tenantId',);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
27
lib/Data/Repository/Tenants/Tenantsrepository.dart
Normal file
27
lib/Data/Repository/Tenants/Tenantsrepository.dart
Normal file
@@ -0,0 +1,27 @@
|
||||
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Response/Tenants/Tenantinforesponse.dart';
|
||||
import '../../Provider/Tenants/Tenantsprovider.dart';
|
||||
|
||||
class TenantRepository{
|
||||
int? tenantId;
|
||||
int? locationId;
|
||||
|
||||
TenantsProvider tenantsProvider = TenantsProvider();
|
||||
|
||||
Future<TenantInfo?> getTenantInfo() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId') ?? 0;
|
||||
locationId = prefs.getInt('locationId')??0;
|
||||
print(tenantId);
|
||||
var result = await tenantsProvider.getTenantInfo('${ApiConstants.getTenantInfo}/?tenantid=$tenantId&locationid=$locationId');
|
||||
// var result = await tenantsProvider.getTenantInfo('${ApiConstants.tenantInfo}/?tenantid=$tenantId');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
31
lib/Data/Repository/Users/user_repository.dart
Normal file
31
lib/Data/Repository/Users/user_repository.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Request/User/Updateuser/Updateuserrequest.dart';
|
||||
import '../../../Model/Response/User/Updateuser/Updateuserresponse.dart';
|
||||
import '../../../Model/Response/User/Usermodelresponse.dart';
|
||||
import '../../Provider/Users/user_provider.dart';
|
||||
|
||||
|
||||
class UserRepository {
|
||||
UserProvider userProvider = UserProvider();
|
||||
int? userId;
|
||||
int? locationId;
|
||||
|
||||
Future<UserModelResponse?> getUser(token) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
userId = prefs.getInt('userId');
|
||||
locationId = prefs.getInt('locationId')??0;
|
||||
|
||||
return await userProvider.getUser('${ApiConstants.user}/getusers?userid=$userId&locationid=$locationId',token);
|
||||
}
|
||||
|
||||
Future<UserUpdateResponse?> updateUser(UserUpdateRequest data) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
|
||||
userId = prefs.getInt('userId');
|
||||
|
||||
return await userProvider.updateUser(data,ApiConstants.userUpdate,);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
46
lib/Data/Repository/products_repo/get_products.dart
Normal file
46
lib/Data/Repository/products_repo/get_products.dart
Normal file
@@ -0,0 +1,46 @@
|
||||
|
||||
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Request/products/update_product.dart';
|
||||
import '../../../Model/Response/products/product_info.dart';
|
||||
import '../../../Model/Response/products/product_response.dart';
|
||||
import '../../../Model/Response/products/product_update_response.dart';
|
||||
import '../../Provider/Products_provider/get_products.dart';
|
||||
|
||||
class ProductsRepository {
|
||||
|
||||
int? tenantId;
|
||||
int? locationId;
|
||||
|
||||
int? categoryId;
|
||||
|
||||
GetProductsProvider getProductsProvider = GetProductsProvider();
|
||||
|
||||
Future<GetProducts?> getProducts({int? subCategoryId, String? keyword}) async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
tenantId = prefs.getInt('tenantId');
|
||||
locationId = prefs.getInt('locationId');
|
||||
categoryId = prefs.getInt('categoryId');
|
||||
|
||||
var result = await getProductsProvider.getProducts('https://fiesta.nearle.app/live/api/v1/mob/products/getlocationproducts?tenantid=${tenantId}&page=1&pagesize=40&locationid=$locationId');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Future<ProductUpdateResponse?> productUpdate(ProductUpdateRequest data) async {
|
||||
var result = await getProductsProvider.updateProducts(data, 'https://fiesta.nearle.app/live/api/v1/mob/products/updateproductlocation');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
String productDetail = "https://fiesta.nearle.app/live/api/v1/mob/orders/getorderdetails";
|
||||
|
||||
Future<ProductDetailResponse?> getProductDetail(int orderheaderid) async {
|
||||
var result = await getProductsProvider.getProductDetail('$productDetail?orderheaderid=$orderheaderid');
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
18
lib/Data/Repository/update_delivery/create_delivery.dart
Normal file
18
lib/Data/Repository/update_delivery/create_delivery.dart
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
import '../../../Helper/Constants/Apiconstants.dart';
|
||||
import '../../../Model/Request/create_delivery_request/create_delivery_request.dart';
|
||||
import '../../../Model/Response/create_delivery_response/create_delivery_request.dart';
|
||||
import '../../Provider/deliveries/create_delivery.dart';
|
||||
|
||||
class createDeliveryRepository {
|
||||
|
||||
CreateDeliveryProvider createDeliveryProvider = CreateDeliveryProvider();
|
||||
|
||||
Future<CreateDeliveryResponse?> createDelivery(List<CreateDelivery> data) async {
|
||||
var result = await createDeliveryProvider.createDelivery(data, ApiConstants.createDelivery);
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user