From d3a4b456035b8c82b23d71fa6a2cfae5070022f4 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Fri, 14 Feb 2025 14:47:46 +0800 Subject: [PATCH] update --- lib/functions/checkresult_function.dart | 13 +++ lib/main.dart | 6 ++ lib/pages/add_generics.dart | 2 - lib/pages/add_medicine.dart | 3 - lib/pages/delete_stock.dart | 107 ++++++++++++++++++++++++ lib/pages/list_stocks.dart | 3 - lib/pages/main_page.dart | 13 ++- lib/tables/ref_medicines.dart | 3 +- lib/tables/stocks.dart | 53 +++++------- 9 files changed, 157 insertions(+), 46 deletions(-) create mode 100644 lib/functions/checkresult_function.dart create mode 100644 lib/pages/delete_stock.dart diff --git a/lib/functions/checkresult_function.dart b/lib/functions/checkresult_function.dart new file mode 100644 index 0000000..d074dc2 --- /dev/null +++ b/lib/functions/checkresult_function.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:pharmacy_mobile/widgets/snackbar_widget.dart'; + +Future checkResult(BuildContext context, List list, String name) async { + if (list.isEmpty) { + if (context.mounted) { + showNotification(context, 'Error: No $name Found', false); + } + return true; + } else { + return false; + } +} diff --git a/lib/main.dart b/lib/main.dart index 6c2ace2..65c0b55 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,6 +4,7 @@ import 'package:pharmacy_mobile/pages/add_generics.dart'; import 'package:pharmacy_mobile/pages/add_medicine.dart'; import 'package:pharmacy_mobile/pages/add_stock.dart'; import 'package:pharmacy_mobile/pages/add_type.dart'; +import 'package:pharmacy_mobile/pages/delete_stock.dart'; // import 'package:pharmacy_mobile/auth/auth_gate.dart'; import 'package:pharmacy_mobile/pages/index_page.dart'; import 'package:pharmacy_mobile/pages/list_stocks.dart'; @@ -85,6 +86,11 @@ final _router = GoRouter( path: '/liststocks', builder: (context, state) => ListStocksPage(), ), + GoRoute( + name: 'deletestock', + path: '/deletestock', + builder: (context, state) => DeleteStockPage(), + ), ], ); diff --git a/lib/pages/add_generics.dart b/lib/pages/add_generics.dart index e361891..d5cfabd 100644 --- a/lib/pages/add_generics.dart +++ b/lib/pages/add_generics.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:gap/gap.dart'; import 'package:flutter/material.dart'; import 'package:internet_connection_checker/internet_connection_checker.dart'; diff --git a/lib/pages/add_medicine.dart b/lib/pages/add_medicine.dart index a387776..93f750d 100644 --- a/lib/pages/add_medicine.dart +++ b/lib/pages/add_medicine.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:image_picker/image_picker.dart'; @@ -12,7 +10,6 @@ import 'package:pharmacy_mobile/tables/ref_types.dart'; import 'package:pharmacy_mobile/tables/storage.dart'; import 'package:pharmacy_mobile/widgets/button_widget.dart'; import 'package:pharmacy_mobile/widgets/dropdown_widget.dart'; -import 'package:pharmacy_mobile/widgets/dropdown_wrapper_widget.dart'; import 'package:pharmacy_mobile/widgets/dropdown_wrappermulti_widget.dart'; import 'package:pharmacy_mobile/widgets/form_border_widget.dart'; import 'package:pharmacy_mobile/widgets/input_widget.dart'; diff --git a/lib/pages/delete_stock.dart b/lib/pages/delete_stock.dart new file mode 100644 index 0000000..26a141b --- /dev/null +++ b/lib/pages/delete_stock.dart @@ -0,0 +1,107 @@ +import 'dart:developer'; + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:pharmacy_mobile/functions/checkresult_function.dart'; +import 'package:pharmacy_mobile/tables/stocks.dart'; +import 'package:pharmacy_mobile/widgets/button_widget.dart'; +import 'package:pharmacy_mobile/widgets/dropdown_widget.dart'; +import 'package:pharmacy_mobile/widgets/dropdown_wrappermulti_widget.dart'; +import 'package:pharmacy_mobile/widgets/form_border_widget.dart'; +import 'package:pharmacy_mobile/widgets/input_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:go_router/go_router.dart'; + +class DeleteStockPage extends StatefulWidget { + const DeleteStockPage({super.key}); + + @override + State createState() => _DeleteStockPageState(); +} + +class _DeleteStockPageState extends State { + final _formKey = GlobalKey(); + final _stocks = Stocks(); + final _quantityController = TextEditingController(); + + late List _stockList = []; + late String _selectedStock = ''; + + void _getStocks() async { + _stockList = await _stocks.getList(); + + if (mounted) { + final result = await checkResult(context, _stockList, 'Generics'); + if (result) { + if (mounted) { + context.push('/main'); + } + } else { + setState(() => {}); + } + } + } + + void _updateStock(dynamic stock) { + _selectedStock = stock; + _getQuantity(_selectedStock); + } + + // void _saveDeletion() async { + // _stocks.deleteStock('uuid'); + // } + + void _getQuantity(String name) async { + final uuid = await _stocks.getUUID(name); + final quantity = await _stocks.getQuantity(uuid); + log(quantity); + } + + @override + void initState() { + _getStocks(); + super.initState(); + } + + @override + void dispose() { + _stockList = []; + _selectedStock = ''; + _quantityController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: PageBackgroundWidget( + child: Center( + child: Column(children: [ + const Gap(96), + const TitleWidget(firstTextSize: 20, secondTextSize: 32), + const Gap(32), + const TextWidget(text: 'Remove Stock'), + const Gap(16), + FormBorderWidget( + color: 'red', + child: Form( + key: _formKey, + child: Center( + child: Column( + children: [ + DropdownWrapperMultiWidget(list: _stockList, text: 'Stocks', children: [ + DropDownWidget( + label: 'Stocks', list: _stockList, listTitle: 'medicine_name', onChanged: _updateStock), + const Gap(16), + InputWidget(label: 'Quantity', controller: _quantityController), + const Gap(32), + // ButtonWidget(text: 'Remove Stock', onPressed: (_) => {}) + ]) + ], + ), + ))) + ])))); + } +} diff --git a/lib/pages/list_stocks.dart b/lib/pages/list_stocks.dart index a53d04e..3ef1c15 100644 --- a/lib/pages/list_stocks.dart +++ b/lib/pages/list_stocks.dart @@ -1,6 +1,3 @@ -import 'dart:developer'; -import 'dart:io'; - import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:google_fonts/google_fonts.dart'; diff --git a/lib/pages/main_page.dart b/lib/pages/main_page.dart index debbe98..87c70ba 100644 --- a/lib/pages/main_page.dart +++ b/lib/pages/main_page.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:gap/gap.dart'; @@ -26,7 +24,9 @@ class _MainPageState extends State { bool userStatus = prefs.containsKey('user'); if (!userStatus) { - context.go('/'); + if (mounted) { + context.go('/'); + } } } @@ -51,6 +51,7 @@ class _MainPageState extends State { resizeToAvoidBottomInset: false, body: SingleChildScrollView( child: PageBackgroundWidget( + height: MediaQuery.of(context).size.height + 400, page: 'menu', child: Center( child: Column( @@ -90,6 +91,12 @@ class _MainPageState extends State { onPressed: () => {context.push('/addstock')}, color: 'green'), const Gap(32), + MenuWidget( + icon: FontAwesomeIcons.eraser, + text: 'Remove Stock', + onPressed: () => {context.push('/deletestock')}, + color: 'red'), + const Gap(32), MenuWidget( icon: FontAwesomeIcons.listCheck, text: 'List of Stocks', diff --git a/lib/tables/ref_medicines.dart b/lib/tables/ref_medicines.dart index 59d1d7e..8a2bb20 100644 --- a/lib/tables/ref_medicines.dart +++ b/lib/tables/ref_medicines.dart @@ -12,7 +12,8 @@ class RefMedicines { Future getList2() async { final data = await _supabase .from('ref_medicines') - .select('''medicine_name, ref_manufactorers(manufactorer_name)''').order('medicine_name', ascending: true); + .select('medicine_name, ref_manufactorers(manufactorer_name)') + .order('medicine_name', ascending: true); return data.toList(); } diff --git a/lib/tables/stocks.dart b/lib/tables/stocks.dart index 1ede3be..689bf1a 100644 --- a/lib/tables/stocks.dart +++ b/lib/tables/stocks.dart @@ -1,39 +1,11 @@ +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 { - // 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 getList() async { List> stockData = []; @@ -50,10 +22,14 @@ class Stocks { return stockData; } - // Future getUUID(String name) async { - // final data = await _supabase.from('ref_types').select('ref_types_uuid').eq('type_name', name); - // return data.first['ref_types_uuid'].toString(); - // } + Future getUUID(String name) async { + final medUUID = await _supabase.from('ref_medicines').select('ref_medicines_uuid').eq('medicine_name', name); + final data = await _supabase + .from('stocks') + .select('stocks_uuid') + .eq('ref_medicines_uuid', medUUID.first['ref_medicines_uuid']); + return data.first['stocks_uuid'].toString(); + } Future postStock(String muuid, String name, String quantity) async { final uuid = Uuid().v4(); @@ -67,4 +43,13 @@ class Stocks { await _supabase.from('stocks').insert(stock); } + + Future getQuantity(String uuid) async { + final data = await _supabase.from('stocks').select('quantity').eq('stocks_uuid', uuid); + return data.first['quantity'].toString(); + } + + Future updateStock(String uuid, String column) async { + await _supabase.from('stocks').update({'quantity': 12}).eq('stock_uuid', uuid); + } }