This commit is contained in:
Patrick Alvin Alcala 2025-02-14 16:32:22 +08:00
parent d3a4b45603
commit 28cb4cac67
4 changed files with 101 additions and 9 deletions

View file

@ -10,9 +10,11 @@ import 'package:pharmacy_mobile/widgets/dropdown_wrappermulti_widget.dart';
import 'package:pharmacy_mobile/widgets/form_border_widget.dart'; import 'package:pharmacy_mobile/widgets/form_border_widget.dart';
import 'package:pharmacy_mobile/widgets/input_widget.dart'; import 'package:pharmacy_mobile/widgets/input_widget.dart';
import 'package:pharmacy_mobile/widgets/page_background_widget.dart'; import 'package:pharmacy_mobile/widgets/page_background_widget.dart';
import 'package:pharmacy_mobile/widgets/snackbar_widget.dart';
import 'package:pharmacy_mobile/widgets/text_widget.dart'; import 'package:pharmacy_mobile/widgets/text_widget.dart';
import 'package:pharmacy_mobile/widgets/title_widget.dart'; import 'package:pharmacy_mobile/widgets/title_widget.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:pharmacy_mobile/widgets/warning_widget.dart';
class DeleteStockPage extends StatefulWidget { class DeleteStockPage extends StatefulWidget {
const DeleteStockPage({super.key}); const DeleteStockPage({super.key});
@ -28,6 +30,10 @@ class _DeleteStockPageState extends State<DeleteStockPage> {
late List _stockList = []; late List _stockList = [];
late String _selectedStock = ''; late String _selectedStock = '';
late bool _aboveQuantity = false;
late bool _noStock = false;
late double _serverQuantity = 0;
late String _selectedUUID = '';
void _getStocks() async { void _getStocks() async {
_stockList = await _stocks.getList(); _stockList = await _stocks.getList();
@ -49,14 +55,49 @@ class _DeleteStockPageState extends State<DeleteStockPage> {
_getQuantity(_selectedStock); _getQuantity(_selectedStock);
} }
// void _saveDeletion() async { void _saveDeletion() async {
// _stocks.deleteStock('uuid'); final newQuantity = _serverQuantity - double.parse(_quantityController.text);
// } final newQuantityFixed = newQuantity.toStringAsFixed(0);
// log(newQuantityFixed);
try {
_stocks.updateStock(_selectedUUID, 'quantity', newQuantityFixed);
if (mounted) {
showNotification(context, '$_selectedStock updated', true);
WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) {
context.pop();
}
});
}
} catch (e) {
if (mounted) {
showNotification(context, 'Error: $e', false);
}
}
}
void _getQuantity(String name) async { void _getQuantity(String name) async {
final uuid = await _stocks.getUUID(name); final uuid = await _stocks.getUUID(name);
final quantity = await _stocks.getQuantity(uuid); final quantity = await _stocks.getQuantity(uuid);
log(quantity); _serverQuantity = double.parse(quantity);
_selectedUUID = uuid;
}
void _setQuantity(dynamic quantity) async {
if (_selectedStock.isEmpty) {
_noStock = true;
setState(() {});
} else {
_noStock = false;
if (double.parse(quantity) > _serverQuantity) {
_aboveQuantity = true;
setState(() {});
} else {
_aboveQuantity = false;
setState(() {});
}
}
} }
@override @override
@ -95,9 +136,20 @@ class _DeleteStockPageState extends State<DeleteStockPage> {
DropDownWidget( DropDownWidget(
label: 'Stocks', list: _stockList, listTitle: 'medicine_name', onChanged: _updateStock), label: 'Stocks', list: _stockList, listTitle: 'medicine_name', onChanged: _updateStock),
const Gap(16), const Gap(16),
InputWidget(label: 'Quantity', controller: _quantityController), InputWidget(label: 'Quantity', controller: _quantityController, onChanged: _setQuantity),
const Gap(32), const Gap(32),
// ButtonWidget(text: 'Remove Stock', onPressed: (_) => {}) if (_noStock)
WarningWidget(
text: 'Removing Disabled',
warning: 'Quantity is above sssss',
)
else if (_aboveQuantity)
WarningWidget(
text: 'Removing Disabled',
warning: 'Quantity is above stocked',
)
else
ButtonWidget(text: 'Remove Stock', onPressed: _saveDeletion)
]) ])
], ],
), ),

View file

@ -49,7 +49,7 @@ class Stocks {
return data.first['quantity'].toString(); return data.first['quantity'].toString();
} }
Future<void> updateStock(String uuid, String column) async { Future<void> updateStock(String uuid, String column, String value) async {
await _supabase.from('stocks').update({'quantity': 12}).eq('stock_uuid', uuid); await _supabase.from('stocks').update({column: value}).eq('stocks_uuid', uuid).select();
} }
} }

View file

@ -1,13 +1,15 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gap/gap.dart'; import 'package:gap/gap.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:pharmacy_mobile/widgets/dropdown_widget.dart';
class InputWidget extends StatelessWidget { class InputWidget extends StatelessWidget {
final String label; final String label;
final TextEditingController controller; final TextEditingController controller;
final bool? password; final bool? password;
final OnChangedCallback? onChanged;
const InputWidget({super.key, required this.label, required this.controller, this.password}); const InputWidget({super.key, required this.label, required this.controller, this.password, this.onChanged});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -29,6 +31,7 @@ class InputWidget extends StatelessWidget {
contentPadding: const EdgeInsets.symmetric(vertical: 10, horizontal: 24)), contentPadding: const EdgeInsets.symmetric(vertical: 10, horizontal: 24)),
style: GoogleFonts.outfit(textStyle: const TextStyle(color: Color.fromRGBO(0, 0, 0, 1), fontSize: 16)), style: GoogleFonts.outfit(textStyle: const TextStyle(color: Color.fromRGBO(0, 0, 0, 1), fontSize: 16)),
obscureText: password ?? false, obscureText: password ?? false,
onChanged: onChanged,
), ),
], ],
); );

View file

@ -0,0 +1,37 @@
import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:pharmacy_mobile/widgets/text_widget.dart';
class WarningWidget extends StatelessWidget {
final String text;
final String warning;
const WarningWidget({super.key, required this.text, required this.warning});
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
decoration: BoxDecoration(
color: const Color.fromARGB(102, 121, 15, 5),
borderRadius: BorderRadius.circular(12),
border: Border.all(width: 2, color: const Color.fromARGB(255, 42, 2, 2))),
// width: 200,
// height: 100,
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 16),
child: Center(
child: TextWidget(
text: text,
size: 14,
),
),
),
const Gap(16),
TextWidget(
text: warning,
size: 14,
)
],
);
}
}