QueueMgr/lib/new_service.dart
2023-08-21 08:24:26 +05:30

193 lines
7.2 KiB
Dart

import 'package:duration_picker/duration_picker.dart';
import 'package:flutter/material.dart';
import 'package:queue_mgr/backend/DataManager.dart';
import 'package:queue_mgr/backend/Dialogs.dart';
class NewService extends StatefulWidget {
NewService({Key? key,this.id}) : super(key: key);
String? id;
@override
State<NewService> createState() => _NewServiceState();
}
class _NewServiceState extends State<NewService> {
TextEditingController nameController = TextEditingController();
DateTime sDate = DateTime.now();
TimeOfDay sTime = TimeOfDay(hour: 2, minute: 2);
DateTime eDate = DateTime.now();
TimeOfDay eTime = TimeOfDay(hour: 2, minute: 2);
Duration duration = Duration(hours:0, minutes: 15);
@override
void initState() {
// TODO: implement initState
super.initState();
bool isEdit = widget.id != null;
if(isEdit){
Map<String, dynamic> service = DataManager.instance().GetServiceById(widget.id.toString());
nameController.text = service['name'];
sDate = DateTime.parse(service['start_time']);
sTime = TimeOfDay.fromDateTime(sDate);
eDate = DateTime.parse(service['end_time']);
eTime = TimeOfDay.fromDateTime(eDate);
duration = Helpers.ParseDuration(service['duration']);
setState(() {
});
}
}
@override
Widget build(BuildContext context) {
bool isEdit = widget.id != null;
return Scaffold(
appBar: AppBar(title: Text(isEdit? "Edit Service" :"New Service")),
body: Container(
padding: EdgeInsets.all(20),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
children: [
ListTile(
title: Text("Service Name"),
subtitle: TextField(
controller: nameController,
),
),
ListTile(
title: Text("Starting Time"),
subtitle: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text("${sDate.year}-${sDate.month}-${sDate.day}"),
),
onPressed: () async{
sDate = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime.now().subtract(const Duration(days: 350)), lastDate: DateTime.now().add(const Duration(days: 350))) ?? sDate;
setState(() {
});
},
),
SizedBox(width: 10,),
ElevatedButton(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(sTime.format(context)),
),
onPressed: () async{
sTime = await showTimePicker(context: context, initialTime: sTime) ?? sTime;
setState(() {
});
},
),
],
),
),
ListTile(
title: Text("Ending Time"),
subtitle: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text("${eDate.year}-${eDate.month}-${eDate.day}"),
),
onPressed: () async{
eDate = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime.now().subtract(const Duration(days: 350)), lastDate: DateTime.now().add(const Duration(days: 350))) ?? eDate;
setState(() {
});
},
),
SizedBox(width: 10,),
ElevatedButton(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(eTime.format(context)),
),
onPressed: () async{
eTime = await showTimePicker(context: context, initialTime: eTime) ?? eTime;
setState(() {
});
},
),
],
),
),
ListTile(
title:Text("Session Duration"),
subtitle: ElevatedButton(
child: Text("${duration.ToHoursAndMinutes()}"),
onPressed: () async{
// duration = await showTimePicker(context: context, initialTime: duration) ?? duration;
duration = await showDurationPicker(context: context, initialTime: duration) ?? Duration(minutes: 15);
setState(() {
});
},
),
)
],
),
Column(
children: [
Container(width:200,height:50,child: ElevatedButton(onPressed: () async{
Dialogs.waiting(context);
DateTime s_date = DateTime(sDate.year, sDate.month, sDate.day, sTime.hour, sTime.minute);
DateTime e_date = DateTime(eDate.year, eDate.month, eDate.day, eTime.hour, eTime.minute);
if(isEdit){
await DataManager.instance().EditService(widget.id.toString(),nameController.text, s_date, e_date,duration);
}else{
await DataManager.instance().AddService(nameController.text, s_date, e_date,duration);
}
setState(() {
});
Dialogs.hide(context);
Navigator.pop(context);
}, child: Text(isEdit ? "Save" : "Add"))),
(isEdit) ? Container(margin: EdgeInsets.all(20),width:200,height:50,child: ElevatedButton(onPressed: () async{
bool confirm = await Dialogs.AskQuestion(context, "CAUTION", "Are you sure to delete this service?");
if(!confirm){return;}
Dialogs.waiting(context);
await DataManager.instance().DeleteService(widget.id.toString());
setState(() {
});
Dialogs.hide(context);
Navigator.pop(context);
}, child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.delete),
Text(" Delete"),
],
),style: ElevatedButton.styleFrom(backgroundColor: Colors.redAccent, foregroundColor: Colors.white),)) : Container(),
],
),
],
),
),
);
}
}