From b5151a053d2127ae55ba1172d32f4af1f05d9f78 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Fri, 31 Jan 2025 16:35:10 +0800 Subject: [PATCH] update --- lib/pages/add_generics.dart | 16 ++++----- lib/pages/add_medicine.dart | 16 ++++----- lib/pages/add_stock.dart | 2 +- lib/pages/add_type.dart | 2 +- lib/pages/list_stocks.dart | 59 +++++++++++++++++++++++-------- lib/pages/login_page.dart | 2 +- lib/pages/main_page.dart | 2 +- lib/tables/stocks.dart | 35 +++++++++++++++--- lib/widgets/datatable_widget.dart | 23 ++++++++++++ 9 files changed, 118 insertions(+), 39 deletions(-) create mode 100644 lib/widgets/datatable_widget.dart diff --git a/lib/pages/add_generics.dart b/lib/pages/add_generics.dart index d148799..7fbe750 100644 --- a/lib/pages/add_generics.dart +++ b/lib/pages/add_generics.dart @@ -15,10 +15,10 @@ class AddGenericsPage extends StatefulWidget { const AddGenericsPage({super.key}); @override - AddGenericsPageState createState() => AddGenericsPageState(); + State createState() => _AddGenericsPageState(); } -class AddGenericsPageState extends State { +class _AddGenericsPageState extends State { // final _formKey = GlobalKey(); final _refCategories = RefCategories(); final _refGenericNames = RefGenericNames(); @@ -30,12 +30,6 @@ class AddGenericsPageState extends State { late String _selectedCategory = ''; late String _categoryUUID = ''; - @override - void initState() { - autoRun(); - super.initState(); - } - void autoRun() async { _categoryList = await _refCategories.getList(); } @@ -50,6 +44,12 @@ class AddGenericsPageState extends State { await _refGenericNames.postGeneric(_nameController.text, _categoryUUID); } + @override + void initState() { + autoRun(); + super.initState(); + } + @override void dispose() { _nameController.dispose(); diff --git a/lib/pages/add_medicine.dart b/lib/pages/add_medicine.dart index a11084c..bb1a0fd 100644 --- a/lib/pages/add_medicine.dart +++ b/lib/pages/add_medicine.dart @@ -17,10 +17,10 @@ class AddMedicinePage extends StatefulWidget { const AddMedicinePage({super.key}); @override - AddMedicinePageState createState() => AddMedicinePageState(); + State createState() => _AddMedicinePageState(); } -class AddMedicinePageState extends State { +class _AddMedicinePageState extends State { final _formKey = GlobalKey(); // final _authService = AuthService(); final _refGenericNames = RefGenericNames(); @@ -40,12 +40,6 @@ class AddMedicinePageState extends State { late List _manufactorerList = []; late String _selectedManufactorer = ''; - @override - void initState() { - autoRun(); - super.initState(); - } - void autoRun() async { _genericNameList = await _refGenericNames.getList(); _typeList = await _refTypes.getList(); @@ -79,6 +73,12 @@ class AddMedicinePageState extends State { await _refMedicines.postMedicine(medName, medGenericUUID, medManufactorerUUID, medTypeUUID); } + @override + void initState() { + autoRun(); + super.initState(); + } + @override void dispose() { _nameController.dispose(); diff --git a/lib/pages/add_stock.dart b/lib/pages/add_stock.dart index 5fee428..996c92d 100644 --- a/lib/pages/add_stock.dart +++ b/lib/pages/add_stock.dart @@ -17,7 +17,7 @@ class AddStockPage extends StatefulWidget { const AddStockPage({super.key}); @override - _AddStockPageState createState() => _AddStockPageState(); + State createState() => _AddStockPageState(); } class _AddStockPageState extends State { diff --git a/lib/pages/add_type.dart b/lib/pages/add_type.dart index 10a2932..d7198d6 100644 --- a/lib/pages/add_type.dart +++ b/lib/pages/add_type.dart @@ -16,7 +16,7 @@ class AddTypePage extends StatefulWidget { const AddTypePage({super.key}); @override - _AddTypePageState createState() => _AddTypePageState(); + State createState() => _AddTypePageState(); } class _AddTypePageState extends State { diff --git a/lib/pages/list_stocks.dart b/lib/pages/list_stocks.dart index 7bd95b6..abeead5 100644 --- a/lib/pages/list_stocks.dart +++ b/lib/pages/list_stocks.dart @@ -1,26 +1,63 @@ +import 'dart:developer'; + import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; +import 'package:pharmacy_mobile/tables/stocks.dart'; +import 'package:pharmacy_mobile/widgets/datatable_widget.dart'; import 'package:pharmacy_mobile/widgets/page_background_widget.dart'; import 'package:pharmacy_mobile/widgets/text_widget.dart'; import 'package:pharmacy_mobile/widgets/title_widget.dart'; +import 'package:intl/intl.dart'; class ListStocksPage extends StatefulWidget { const ListStocksPage({super.key}); @override - _ListStocksPageState createState() => _ListStocksPageState(); + State createState() => _ListStocksPageState(); } class _ListStocksPageState extends State { + final _stocks = Stocks(); + + late List _stockList = []; + List _createRows() { - return [ - DataRow(cells: [DataCell(Text('#100')), DataCell(Text('Flutter Basics')), DataCell(Text('David John'))]), - DataRow(cells: [DataCell(Text('#101')), DataCell(Text('Dart Internals')), DataCell(Text('Alex Wick'))]) - ]; + return _stockList.map((item) { + final dateString = item['expiration_date']; + final date = DateTime.parse(dateString); + final formattedDate = DateFormat('MMMM d, yyyy').format(date); + + return DataRow(cells: [ + DataCell(Text(item['medicine_name'])), + DataCell(Text(item['quantity'].toString())), + DataCell(Text(formattedDate)), + ]); + }).toList(); } List _createColumns() { - return [DataColumn(label: Text('ID')), DataColumn(label: Text('Book')), DataColumn(label: Text('Author'))]; + return [ + DataColumn(label: Text('Medicine')), + DataColumn(label: Text('Quantity')), + DataColumn(label: Text('Expiration')) + ]; + } + + void autoRun() async { + _stockList = await _stocks.getList(); + setState(() {}); + } + + @override + void initState() { + autoRun(); + super.initState(); + } + + @override + void dispose() { + _stockList = []; + super.dispose(); } @override @@ -33,15 +70,7 @@ class _ListStocksPageState extends State { const Gap(32), const TextWidget(text: 'List of Stocks'), const Gap(16), - DataTable( - decoration: BoxDecoration( - border: Border.all(color: Colors.black, width: 1.0), - borderRadius: BorderRadius.circular(8.0), - color: Color.fromARGB(255, 240, 240, 240), - ), - columns: _createColumns(), - rows: _createRows(), - ) + DataTableWidget(column: _createColumns(), row: _createRows()), ]))); } } diff --git a/lib/pages/login_page.dart b/lib/pages/login_page.dart index 94b5385..5d8a816 100644 --- a/lib/pages/login_page.dart +++ b/lib/pages/login_page.dart @@ -137,7 +137,7 @@ class _LoginPageState extends State { password: true, ), ), - const Gap(24), + const Gap(40), // TextButton(onPressed: () => {_signIn()}, child: const Text('Login')) if (_isLoading) Center(child: CircularProgressIndicator(color: Colors.white)) diff --git a/lib/pages/main_page.dart b/lib/pages/main_page.dart index 30203d2..ee55cf1 100644 --- a/lib/pages/main_page.dart +++ b/lib/pages/main_page.dart @@ -64,7 +64,7 @@ class MainPage extends StatelessWidget { icon: FontAwesomeIcons.listCheck, text: 'List of Stocks', onPressed: () => {context.push('/liststocks')}), - const Gap(32), + const Gap(40), // TextButton(onPressed: () => {_signOut()}, child: const Text('Logout')), ButtonWidget( text: 'Logout', diff --git a/lib/tables/stocks.dart b/lib/tables/stocks.dart index 5ac6e6d..a1f4ae3 100644 --- a/lib/tables/stocks.dart +++ b/lib/tables/stocks.dart @@ -1,13 +1,40 @@ +import 'dart:developer'; + import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:uuid/uuid.dart'; class Stocks { final SupabaseClient _supabase = Supabase.instance.client; - // Future getList() async { - // final data = await _supabase.from('stocks').select('type_name').order('type_name', ascending: true); - // return data.toList(); - // } + Future getList() async { + List> stockData = []; + + final data = await _supabase.from('stocks').select('*'); + stockData = data; + + List> result = []; + + for (var stock in stockData) { + final muuid = stock['ref_medicines_uuid']; + + try { + final medicineNameResult = + await _supabase.from('ref_medicines').select('medicine_name').eq('ref_medicines_uuid', muuid); + + if (medicineNameResult.isNotEmpty) { + final medicineName = medicineNameResult[0]['medicine_name']; + result.add({ + 'medicine_name': medicineName, + 'quantity': stock['quantity'], + 'expiration_date': stock['expiration_date'], + }); + } + } catch (e) { + return []; + } + } + return result; + } // Future getUUID(String name) async { // final data = await _supabase.from('ref_types').select('ref_types_uuid').eq('type_name', name); diff --git a/lib/widgets/datatable_widget.dart b/lib/widgets/datatable_widget.dart new file mode 100644 index 0000000..ab5c4b7 --- /dev/null +++ b/lib/widgets/datatable_widget.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; + +class DataTableWidget extends StatelessWidget { + final List column; + final List row; + const DataTableWidget({super.key, required this.column, required this.row}); + + @override + Widget build(BuildContext context) { + return DataTable( + decoration: BoxDecoration( + border: Border.all(color: Colors.black, width: 1.0), + borderRadius: BorderRadius.circular(12), + color: Color.fromARGB(255, 240, 240, 240), + ), + headingTextStyle: GoogleFonts.outfit(textStyle: const TextStyle(fontSize: 14, fontWeight: FontWeight.w500)), + dataTextStyle: GoogleFonts.outfit(textStyle: const TextStyle(fontSize: 14)), + columns: column, + rows: row, + ); + } +}