You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pharmacy/lib/biddingrequests.dart

537 lines
26 KiB

import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:geolocator/geolocator.dart';
import 'package:healthcare_pharmacy/getmedicines.dart';
import 'package:healthcare_pharmacy/models/biddingrequest_model.dart';
import 'package:healthcare_pharmacy/models/getdeliveryboy_model.dart';
import 'package:healthcare_pharmacy/settings.dart';
import 'package:flutter_cupertino_datetime_picker/flutter_cupertino_datetime_picker.dart';
import 'package:intl/intl.dart';
import 'package:image_picker/image_picker.dart';
import 'package:photo_view/photo_view.dart';
class BiddingRequests extends StatefulWidget {
const BiddingRequests({Key? key}) : super(key: key);
@override
State<BiddingRequests> createState() => _BiddingRequestsState();
}
class _BiddingRequestsState extends State<BiddingRequests> {
String Url = '';
List<BiddingRequestsModel> prescriptionsList = [];
List<GetDeliveryboyDetailsModel> modeldeliveryboyList = [];
var dropdownAllDeliveryBoys;
TextEditingController dateController = TextEditingController();
var selIOS;
bool isPrescriptionsDataLoading = false;
bool isSereverIssue = false;
bool isLoading=false;
Future<void> getAllPrescriptions() async {
isPrescriptionsDataLoading=true;
try {
var response = await AppSettings.getAllBiddingRecords();
9 months ago
/*for (var item in data) {
BiddingRequestsModel biddingRequestsModel=new BiddingRequestsModel();
biddingRequestsModel.bidding_bookingid = item['bookingId']!;
biddingRequestsModel.pharmacyid_bidding = item['pharmacyId']!;
biddingRequestsModel.custumerid_bidding = item['customerId']!;
biddingRequestsModel.amount_bidding = item['biddingAmount']!.toString();
String? firstName = item['customerDetails']?['firstName'];
String? contactNumber = item['customerDetails']?['profile']?['contactNumber'];
print('First Name: $firstName');
biddingRequestsModel.bidding_firstName = firstName ; // Provide a default value if firstName is null
// biddingRequestsModel.bidding_contactNumber=contactNumber;
prescriptionsList.add(biddingRequestsModel);
}*/
setState(() {
prescriptionsList =
((jsonDecode(response)['data']) as List).map((dynamic model) {
return BiddingRequestsModel.fromJson(model);
}).toList();
//String customerId=prescriptionsList[0].customerId.toString();
9 months ago
isPrescriptionsDataLoading = false;
});
} catch (e) {
setState(() {
isLoading = false;
isPrescriptionsDataLoading = false;
});
}
}
Future<void> getAllDeliveryBoys() async {
var response1= await AppSettings.getAllDeliverboy();
print(response1);
setState(() {
modeldeliveryboyList =
((jsonDecode(response1)['deliveryBoys']) as List).map((dynamic model) {
return GetDeliveryboyDetailsModel.fromJson(model);
}).toList();
dropdownAllDeliveryBoys=modeldeliveryboyList[0];
});
}
9 months ago
@override
void initState() {
getAllPrescriptions();
getAllDeliveryBoys();
//getAllPharmaciesData(dropdownArea);
super.initState();
}
showPicDialog(List<PrescriptionPicture> prescriptionPictures) {
int currentIndex = 0;
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return Dialog(
// Your custom dialog design here
child: Container(
width: double.infinity,
height: MediaQuery.of(context).size.height * 0.6,
child: Column(
children: [
Expanded(
child: PageView.builder(
itemCount: prescriptionPictures.length,
controller: PageController(initialPage: currentIndex),
onPageChanged: (index) {
setState(() {
currentIndex = index;
});
},
itemBuilder: (BuildContext context, int index) {
return Container(
width: double.infinity,
height: double.infinity,
child: PhotoView(
imageProvider: NetworkImage(prescriptionPictures[index].url),
maxScale: PhotoViewComputedScale.contained * 4.0,
minScale: PhotoViewComputedScale.contained,
initialScale: PhotoViewComputedScale.contained,
basePosition: Alignment.center,
),
);
},
),
),
TextButton(
child: Text('Close'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
),
),
);
},
);
},
);
}
Widget _allPrescriptions(){
if (prescriptionsList.length != 0) {
return Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Expanded(child:ListView.builder(
padding: EdgeInsets.all(0),
itemCount: prescriptionsList.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {
// Your regular tap action logic goes here
Navigator.push(
context,
new MaterialPageRoute(
builder: (__) => new GetMedicines(medicinebookingid:prescriptionsList[index].bookingId)));
},
onLongPress: () {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return AlertDialog(
title: const Text('Assign'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
Container(
padding: const EdgeInsets.fromLTRB(10, 10, 10, 0),
child: DropdownButtonFormField<GetDeliveryboyDetailsModel>(
// Initial Value
value: dropdownAllDeliveryBoys,
isExpanded: true,
decoration: const InputDecoration(
prefixIcon: Icon(
Icons.water,
color: greyColor,
),
border: OutlineInputBorder(
borderSide: BorderSide(color: greyColor)),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: greyColor),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: greyColor),
),
labelText: 'Select delivery boy',
labelStyle: TextStyle(
color: greyColor, //<-- SEE HERE
),
),
hint: Text('Select delivery boy'),
// Down Arrow Icon
icon: const Icon(Icons.keyboard_arrow_down),
items: modeldeliveryboyList
.map<DropdownMenuItem<GetDeliveryboyDetailsModel>>(
(value) => new DropdownMenuItem<GetDeliveryboyDetailsModel>(
value: value,
child: new Text(value.deliveryboy_name),
))
.toList(),
onChanged: (GetDeliveryboyDetailsModel? newValue) {
setState(() {
dropdownAllDeliveryBoys = newValue;
});
},
),
),
SizedBox(
height: 05,
),
Container(
padding: const EdgeInsets.all(10),
child: TextFormField(
cursorColor: greyColor,
enabled: false,
controller: dateController,
textCapitalization: TextCapitalization.characters,
decoration: const InputDecoration(
prefixIcon: Icon(
Icons.date_range,
color: greyColor,
),
border: OutlineInputBorder(
borderSide: BorderSide(color: greyColor)),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: greyColor),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: greyColor),
),
labelText: 'Select date & time',
labelStyle: TextStyle(
color: greyColor, //<-- SEE HERE
),
),
),
),
SizedBox(
height: 05,
),
],
),
),
actions: <Widget>[
TextButton(
child: Text('cancel', style: textButtonStyle()),
onPressed: () {
Navigator.of(context).pop();
},
),
TextButton(
child: Text('Assign ', style: textButtonStyle()),
onPressed: () async{
var payload = new Map<String, dynamic>();
payload["pharmacyname"] =
AppSettings.pharmacyName;
payload["pharmacyId"] =
AppSettings.pharmacyId;
payload["customerId"] =
prescriptionsList[index].customerId;
payload["address"] =
prescriptionsList[index]
.address;
payload["dateOfOrder"] =
prescriptionsList[index].bookingId;
payload["action"] = "accept";
payload["price"] =
prescriptionsList[index].amount;
payload["delivery_agent"] = dropdownAllDeliveryBoys.deliveryboy_name;
payload["agent_mobile"] = dropdownAllDeliveryBoys.deliveryboy_phone;
payload["agent_alternative_mobile"] = dropdownAllDeliveryBoys.deliveryboy_alternativeContactNumber;
payload["expectedDateOfDelivery"] =dateController.text.toString();
bool requestStatus =
await AppSettings.assignDeliveryboyBookingRequests(
prescriptionsList[index].bookingId,
payload);
if (requestStatus) {
Navigator.of(context).pop();
AppSettings.longSuccessToast(
"Delivery Boy Assigned Successfully");
await getAllPrescriptions();
} else {}
},
),
IconButton(
onPressed: () async {
DatePicker.showDatePicker(
context,
dateFormat: 'dd MMMM yyyy HH:mm',
initialDateTime: DateTime.now(),
minDateTime:DateTime.now(),
maxDateTime: DateTime.now().add(Duration(days: 15)),
onMonthChangeStartWithFirstDate: true,
pickerMode: DateTimePickerMode.datetime,
pickerTheme: DateTimePickerTheme(
// backgroundColor: Colors.white,
cancelTextStyle: labelTextStyle(),
confirmTextStyle: labelTextStyle(),
// showTitle: true,
//title: Text('Pick date and time'),
itemTextStyle: valuesTextStyle(),
),
onConfirm: (dateTime, List<int> index)async {
DateTime selectdate = dateTime;
setState(() {
selIOS = DateFormat('dd-MMM-yyyy - HH:mm').format(selectdate);
});
if(selIOS!=''){
setState(() {
dateController.text=selIOS.toString();
});
}
else {
AppSettings.longFailedToast('please select date');
}
},
);
},
icon: Icon(
Icons.calendar_month,
color: primaryColor,
))
],
);
});
},
);
},
child: Card(
//color: prescriptionsList[index].cardColor,
child: Padding(
padding:EdgeInsets.all(8) ,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
GestureDetector(
child: Container(
width: MediaQuery.of(context).size.width * 0.18,
height: MediaQuery.of(context).size.height * 0.10,
decoration: BoxDecoration(
shape: BoxShape.circle,
image: DecorationImage(
image: NetworkImage(prescriptionsList[index].PrescriptionPictures[0].url ?? "images/logo.png"),
fit: BoxFit.cover,
),
),
),
onTap: () {
// Handle onTap event if needed
showPicDialog(prescriptionsList[index].PrescriptionPictures);
},
),
SizedBox(width:MediaQuery.of(context).size.width * .02,),
Container(
width: MediaQuery.of(context).size.width * .55,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(prescriptionsList[index].firstName.toString().toUpperCase(),style: valuesTextStyle()),
Text(prescriptionsList[index].bookingId.toString().toUpperCase(),style: valuesTextStyle()),
Text(prescriptionsList[index].address.toString().toUpperCase(),style: valuesTextStyle()),
Text(prescriptionsList[index].customerId.toString().toUpperCase(),style: valuesTextStyle()),
Text(prescriptionsList[index].pharmacyId.toString().toUpperCase(),style: valuesTextStyle()),
],
),
),
Visibility(
9 months ago
visible:true ,
child: prescriptionsList[index].status.toString().toLowerCase()=='pending'?Column(
children: [
TextButton(
child: Text(
'Accept',
style: TextStyle(
fontSize: 15,
color:
primaryColor /*FilteredList[index].text_color*/),
),
onPressed: () async {
var payload = new Map<String, dynamic>();
9 months ago
payload["pharmacyId"] =AppSettings.healthpharmaIdsign.toString();
payload["action"] = "accept";
bool requestStatus =
await AppSettings.getRequestBiddingDetails(
prescriptionsList[index].bookingId,
payload);
9 months ago
if (requestStatus) {
// Navigator.of(context).pop();
AppSettings.longSuccessToast(
"Booking Accepted");
await getAllPrescriptions();
9 months ago
} else {}
},
),
TextButton(
child: Text(
'Reject',
style: TextStyle(
fontSize: 15,
color:
primaryColor /*FilteredList[index].text_color*/),
),
onPressed: () async {
9 months ago
var payload = new Map<String, dynamic>();
payload["pharmacyId"] =AppSettings.healthpharmaIdsign.toString();
payload["action"] = "reject";
bool requestStatus =
await AppSettings.getRequestBiddingDetails(
prescriptionsList[index].bookingId,
9 months ago
payload);
9 months ago
if (requestStatus) {
// Navigator.of(context).pop();
AppSettings.longSuccessToast(
"Booking Rejected");
await getAllPrescriptions();
9 months ago
} else {}
},
),
],
9 months ago
):Text(prescriptionsList[index].status)),
],
),
/*TextButton(
child: const Text(
'Order Medicines',
style: TextStyle(color: primaryColor),
),
onPressed: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (__) => new OrderMedicines(prescriptionDetails:prescriptionsList[index])));
//signup screen
},
)*/
],
),
),
),
);
}) ),
]);
}
9 months ago
else {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'No Bidding Requests Available',
style: TextStyle(fontSize: 18),
),
9 months ago
],
),
);
}
}
/**/
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppSettings.appBar('BiddingRequests'),
body: isPrescriptionsDataLoading?Center(
child: CircularProgressIndicator(
color: primaryColor,
strokeWidth: 5.0,
),
): _allPrescriptions(),
);
}
}