193 lines
7.2 KiB
Dart
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(),
|
|
],
|
|
),
|
|
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|