diff --git a/backend/src/__tests__/order-for-site-manager.test.ts b/backend/src/__tests__/order-for-site-manager.test.ts index 794cb1d..4cdf6c8 100644 --- a/backend/src/__tests__/order-for-site-manager.test.ts +++ b/backend/src/__tests__/order-for-site-manager.test.ts @@ -189,7 +189,9 @@ describe("order for site manager", () => { describe("get all orders for site manager", () => { describe("given the user is not logged in", () => { it("should return a 403", async () => { - const { statusCode } = await supertest(app).get("/api/orders"); + const { statusCode } = await supertest(app).get( + "/api/orders/site-manager" + ); expect(statusCode).toBe(403); }); diff --git a/backend/src/controller/deliveries-for-site-manager.controller.ts b/backend/src/controller/deliveries-for-site-manager.controller.ts index 7ff61bc..d0db8d4 100644 --- a/backend/src/controller/deliveries-for-site-manager.controller.ts +++ b/backend/src/controller/deliveries-for-site-manager.controller.ts @@ -40,6 +40,20 @@ export async function markDeliveryAsReceivedHandler( } delivery.status = "received"; const updatedDelivery = await delivery.save(); + + //find all the deliveries with the order id + const deliveries = await getDeliveryList({ + order: delivery.order, + lean: false, + }); + //if all the deliveries are received, then change the order status to received + if ( + deliveries.every((delivery) => delivery.status === "received") && + delivery.order.status !== "received" + ) { + delivery.order.status = "received"; + await delivery.order.save(); + } return res.send(updatedDelivery); } catch (error: any) { logger.error(error); diff --git a/backend/src/service/deliver.service.ts b/backend/src/service/deliver.service.ts index fc87cad..b6015f0 100644 --- a/backend/src/service/deliver.service.ts +++ b/backend/src/service/deliver.service.ts @@ -17,6 +17,7 @@ export async function getDeliveryList( return GoodsReceiptModel.find(query, {}, options) .populate("items.item") .populate("order") + .populate("supplier") .exec(); } diff --git a/flutter_client/lib/blocs/goodReceipts/goods_receipt_bloc.dart b/flutter_client/lib/blocs/goodReceipts/goods_receipt_bloc.dart new file mode 100644 index 0000000..34c2046 --- /dev/null +++ b/flutter_client/lib/blocs/goodReceipts/goods_receipt_bloc.dart @@ -0,0 +1,37 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_client/models/goods_receipt.dart'; +import 'package:flutter_client/repositiories/goods_receipt/base_goods_receipt_repository.dart'; +import 'package:meta/meta.dart'; + +part 'goods_receipt_event.dart'; +part 'goods_receipt_state.dart'; + +class GoodsReceiptBloc extends Bloc { + final GoodsReceiptRepository _goodsReceiptRepository = + GoodsReceiptRepository(); + + GoodsReceiptBloc() : super(GoodsReceiptInitial()) { + on(_getGoodsReceiptsHandler); + } + + // Load products + void _getGoodsReceiptsHandler( + GetGoodsReceiptsEvent event, Emitter emit) async { + emit( + GoodsReceiptLoading(), + ); + + await _goodsReceiptRepository.getGoodsReceipts().then( + (goodsReceipts) { + emit(GoodsReceiptsLoaded(goodsReceipts: goodsReceipts)); + }, + ).catchError( + (error) { + emit( + const GoodsReceiptError( + message: "Error loading goods receipts. Please try again."), + ); + }, + ); + } +} diff --git a/flutter_client/lib/blocs/goodReceipts/goods_receipt_event.dart b/flutter_client/lib/blocs/goodReceipts/goods_receipt_event.dart new file mode 100644 index 0000000..ff3626c --- /dev/null +++ b/flutter_client/lib/blocs/goodReceipts/goods_receipt_event.dart @@ -0,0 +1,10 @@ +part of 'goods_receipt_bloc.dart'; + +@immutable +abstract class GoodsReceiptEvent { + const GoodsReceiptEvent(); +} + +class GetGoodsReceiptsEvent extends GoodsReceiptEvent { + const GetGoodsReceiptsEvent(); +} diff --git a/flutter_client/lib/blocs/goodReceipts/goods_receipt_state.dart b/flutter_client/lib/blocs/goodReceipts/goods_receipt_state.dart new file mode 100644 index 0000000..7f554d4 --- /dev/null +++ b/flutter_client/lib/blocs/goodReceipts/goods_receipt_state.dart @@ -0,0 +1,26 @@ +part of 'goods_receipt_bloc.dart'; + +@immutable +sealed class GoodsReceiptState { + const GoodsReceiptState(); +} + +final class GoodsReceiptInitial extends GoodsReceiptState {} + +final class GoodsReceiptLoading extends GoodsReceiptState {} + +final class GoodsReceiptError extends GoodsReceiptState { + final String message; + + const GoodsReceiptError({ + required this.message, + }); +} + +final class GoodsReceiptsLoaded extends GoodsReceiptState { + final List goodsReceipts; + + const GoodsReceiptsLoaded({ + required this.goodsReceipts, + }); +} diff --git a/flutter_client/lib/constants.dart b/flutter_client/lib/constants.dart index 8123609..4dd7868 100644 --- a/flutter_client/lib/constants.dart +++ b/flutter_client/lib/constants.dart @@ -8,16 +8,15 @@ const Color kSurfaceColor = Color(0xFFF4F4F4); //order status colors -const Color viewPending = Color(0xFFFFD700); +const Color kViewPendingColor = Color(0xFFFFD700); -const Color approvedAndOrderCompleted = Color(0xFF36CD1D); +const Color kApprovedAndOrderCompletedColor = Color(0xFF36CD1D); -const Color declined = Color(0xFFFF0000); +const Color kDeclined = Color(0xFFFF0000); -const Color placed = Color(0xFF0000FF); - -const Color partialyDelivered = Color(0xFFFFA500); +const Color kPlaced = Color(0xFF0000FF); +const Color kPartiallyDelivered = Color(0xFFFFA500); const String kLoginScreenTitle = 'Sign In'; diff --git a/flutter_client/lib/main.dart b/flutter_client/lib/main.dart index 283cb3d..02a1b28 100644 --- a/flutter_client/lib/main.dart +++ b/flutter_client/lib/main.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_client/blocs/auth/auth_bloc.dart'; import 'package:flutter_client/blocs/cart/cart_bloc.dart'; +import 'package:flutter_client/blocs/goodReceipts/goods_receipt_bloc.dart'; import 'package:flutter_client/blocs/order/order_bloc.dart'; import 'package:flutter_client/blocs/products/products_bloc.dart'; import 'package:flutter_client/blocs/site/site_bloc.dart'; @@ -30,6 +31,9 @@ void main() { ), RepositoryProvider( create: (context) => OrderBloc(), + ), + RepositoryProvider( + create: (contest) => GoodsReceiptBloc(), ) ], child: const ProcumentMobileApp(), diff --git a/flutter_client/lib/models/goods_receipt.dart b/flutter_client/lib/models/goods_receipt.dart new file mode 100644 index 0000000..b51c5f4 --- /dev/null +++ b/flutter_client/lib/models/goods_receipt.dart @@ -0,0 +1,57 @@ +import 'package:flutter_client/models/product_model.dart'; + +enum GoodsReceiptStatus { pendingShipping, received } + +class GoodsReceiptItem { + final Product item; + final int quantity; + + GoodsReceiptItem({ + required this.item, + required this.quantity, + }); +} + +class GoodsReceipt { + final String id; + final String supplier; + final String site; + final String siteManager; + final String goodsReceiptId; + final GoodsReceiptStatus status; + final List items; + final DateTime createdAt; + + GoodsReceipt({ + required this.id, + required this.supplier, + required this.site, + required this.siteManager, + required this.goodsReceiptId, + required this.status, + required this.items, + required this.createdAt, + }); + + factory GoodsReceipt.fromJson(Map json) { + return GoodsReceipt( + id: json['_id'], + supplier: json['supplier'], + site: json['site'], + siteManager: json['siteManager'], + goodsReceiptId: json['goodReceiptId'], + status: json['status'] == 'shipped' + ? GoodsReceiptStatus.received + : GoodsReceiptStatus.pendingShipping, + items: json['items'] + .map( + (item) => GoodsReceiptItem( + item: Product.fromJson(item['item']), + quantity: item['quantity'], + ), + ) + .toList(), + createdAt: DateTime.parse(json['createdAt']), + ); + } +} diff --git a/flutter_client/lib/repositiories/goods_receipt/base_goods_receipt_repository.dart b/flutter_client/lib/repositiories/goods_receipt/base_goods_receipt_repository.dart new file mode 100644 index 0000000..a5180ab --- /dev/null +++ b/flutter_client/lib/repositiories/goods_receipt/base_goods_receipt_repository.dart @@ -0,0 +1,52 @@ +import 'dart:convert'; +import 'dart:developer' as developer; +import 'package:flutter_client/repositiories/paths.dart'; +import 'package:http/http.dart' as http; +import 'package:shared_preferences/shared_preferences.dart'; + +import 'package:flutter_client/models/goods_receipt.dart'; +import 'package:flutter_client/repositiories/goods_receipt/goods_receipt_repository.dart'; + +class GoodsReceiptRepository extends BaseGoodsReceiptRepository { + @override + Future> getGoodsReceipts() async { + final List goodsReceiptList = []; + final Uri goodsReceiptURL = Uri.https(hostName, getGoodsReceiptPath); + + final sharedPreferences = await SharedPreferences.getInstance(); + final token = sharedPreferences.getString('jwt'); + + final headers = { + 'Authorization': 'Bearer $token', + }; + + // send request to get all GOODS RECEIPTS + final responseBody = await http + .get(goodsReceiptURL, headers: headers) + .then((response) => response.body) + .catchError((error) { + developer.log(error); + throw Exception(error); + }); + final decodedBody = jsonDecode(responseBody); + + // get all GOODS RECEIPTS and add to list + try { + for (var goodsReceiptJson in decodedBody) { + final goodsReceipt = GoodsReceipt.fromJson(goodsReceiptJson); + goodsReceiptList.add(goodsReceipt); + } + } on TypeError catch (e) { + developer.log('Error decoding json', stackTrace: e.stackTrace, error: e); + throw Exception(e); + } on Exception catch (e) { + developer.log(e.toString()); + throw Exception(e); + } catch (e) { + developer.log(e.toString()); + throw Exception(e); + } + + return goodsReceiptList; + } +} diff --git a/flutter_client/lib/repositiories/goods_receipt/goods_receipt_repository.dart b/flutter_client/lib/repositiories/goods_receipt/goods_receipt_repository.dart new file mode 100644 index 0000000..8c43abd --- /dev/null +++ b/flutter_client/lib/repositiories/goods_receipt/goods_receipt_repository.dart @@ -0,0 +1,5 @@ +import 'package:flutter_client/models/goods_receipt.dart'; + +abstract class BaseGoodsReceiptRepository { + Future> getGoodsReceipts(); +} diff --git a/flutter_client/lib/repositiories/paths.dart b/flutter_client/lib/repositiories/paths.dart index 9274417..835809b 100644 --- a/flutter_client/lib/repositiories/paths.dart +++ b/flutter_client/lib/repositiories/paths.dart @@ -3,3 +3,4 @@ const String supplierPath = 'api/suppliers'; const String orderPath = 'api/orders'; const String authPath = 'api/login'; const String sitePath = 'api/sites'; +const String getGoodsReceiptPath = '/api/site-manager/deliveries'; diff --git a/flutter_client/lib/screens/delivery_advice.dart b/flutter_client/lib/screens/delivery_advice.dart deleted file mode 100644 index dfd69c6..0000000 --- a/flutter_client/lib/screens/delivery_advice.dart +++ /dev/null @@ -1,167 +0,0 @@ -import 'package:flutter_client/constants.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_client/screens/delivery_confirmation.dart'; - -class OrderButtonProperties { - final Color color; - final String text; - - OrderButtonProperties(this.color, this.text); -} - -class Deliveryadvice extends StatelessWidget { - const Deliveryadvice({super.key}); - - final String orderState = ''; - - OrderButtonProperties getButtonProperties(String state) { - switch (state) { - case 'Completed': - return OrderButtonProperties(approvedAndOrderCompleted, 'Completed'); - // case 'Pending': - // return OrderButtonProperties(partialyDelivered, 'Pending'); - // case 'placed': - // return OrderButtonProperties(placed, 'Placed'); - // case 'partially delivered': - // return OrderButtonProperties(partialyDelivered, 'Partially delivered'); - default: - return OrderButtonProperties(declined, 'Not completed'); - } - } - - @override - Widget build(BuildContext context) { - final buttonProperties = getButtonProperties(orderState); - - return Scaffold( - appBar: AppBar( - title: const Text('Delivery Advices'), - ), - body: Center( - child: Padding( - padding: const EdgeInsets.all(25.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SearchBar( - padding: MaterialStatePropertyAll( - EdgeInsets.symmetric(horizontal: 16.0)), - leading: Icon(Icons.search), - shape: MaterialStatePropertyAll( - RoundedRectangleBorder( - borderRadius: BorderRadius.all( - Radius.circular(8), - ), - ), - ), - backgroundColor: MaterialStatePropertyAll( - Colors.white, - ), - surfaceTintColor: MaterialStatePropertyAll( - Colors.white, - ), - ), - const SizedBox( - height: 15, - ), - InkWell( - onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) => const DeliveryConfirm(), - ), - ); - }, - child: Card( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.zero), - ), - elevation: 8, - child: SizedBox( - width: double.infinity, - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Delivery Advice 1', - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith( - fontSize: 14, - fontWeight: FontWeight.bold, - ), - ), - const Spacer(), - Text( - 'Date', - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith( - fontSize: 12, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - const SizedBox(height: 20), - Text( - 'Supplier name', - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith( - fontSize: 12, - fontWeight: FontWeight.bold, - ), - ), - - // button -------------------->>>>>>>>>> - Row( - children: [ - Text( - 'Rs.25.000', - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith( - fontSize: 12, - fontWeight: FontWeight.normal, - ), - ), - const Spacer(), - Container( - decoration: BoxDecoration( - color: buttonProperties.color, - borderRadius: BorderRadius.circular(8), - ), - child: TextButton( - onPressed: null, - child: Text( - buttonProperties.text, - style: const TextStyle(color: Colors.white), - ), - ), - ), - ], - ), - ], - ), - ), - ), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/flutter_client/lib/screens/delivery_advices_list_screen.dart b/flutter_client/lib/screens/delivery_advices_list_screen.dart new file mode 100644 index 0000000..bd45483 --- /dev/null +++ b/flutter_client/lib/screens/delivery_advices_list_screen.dart @@ -0,0 +1,68 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_client/blocs/goodReceipts/goods_receipt_bloc.dart'; +import 'package:flutter_client/constants.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_client/models/goods_receipt.dart'; +import 'package:flutter_client/screens/delivery_confirmation.dart'; +import 'package:flutter_client/widgets/delivery_card.dart'; + +class Deliveryadvice extends StatefulWidget { + const Deliveryadvice({super.key}); + + @override + State createState() => _DeliveryadviceState(); +} + +class _DeliveryadviceState extends State { + @override + void initState() { + super.initState(); + BlocProvider.of(context).add( + const GetGoodsReceiptsEvent(), + ); + } + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) { + return Scaffold( + appBar: AppBar( + title: const Text('Delivery Advices'), + ), + body: state is GoodsReceiptLoading || state is GoodsReceiptInitial + ? const Center( + child: CircularProgressIndicator(), + ) + : + // state is GoodsReceiptsLoaded + state is GoodsReceiptsLoaded + ? Padding( + padding: const EdgeInsets.all(25.0), + child: SingleChildScrollView( + child: ListView.separated( + separatorBuilder: (context, index) => const SizedBox( + height: 10, + ), + shrinkWrap: true, + itemCount: state.goodsReceipts.length, + itemBuilder: (context, index) { + return DeliveryAdviceCard( + goodsReceipt: state.goodsReceipts[index], + ); + }, + ), + ), + ) + : state is GoodsReceiptError + ? const Center( + child: Text('Error'), + ) + : const Center( + child: Text('Error'), + ), + ); + }, + ); + } +} diff --git a/flutter_client/lib/screens/home_screen.dart b/flutter_client/lib/screens/home_screen.dart index 2087384..d91e2a7 100644 --- a/flutter_client/lib/screens/home_screen.dart +++ b/flutter_client/lib/screens/home_screen.dart @@ -4,7 +4,7 @@ import 'package:flutter_client/blocs/auth/auth_bloc.dart'; import 'package:flutter_client/screens/create_requisition_order_page.dart'; import 'package:flutter_client/constants.dart'; import 'package:flutter_client/screens/my_orders_screen.dart'; -import 'package:flutter_client/screens/delivery_advice.dart'; +import 'package:flutter_client/screens/delivery_advices_list_screen.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({super.key}); diff --git a/flutter_client/lib/screens/my_orders.dart b/flutter_client/lib/screens/my_orders.dart index 8462244..d80cd07 100644 --- a/flutter_client/lib/screens/my_orders.dart +++ b/flutter_client/lib/screens/my_orders.dart @@ -16,17 +16,20 @@ class MyOrders extends StatelessWidget { OrderButtonProperties getButtonProperties(String state) { switch (state) { case 'pending': - return OrderButtonProperties(viewPending, 'Pending'); + return OrderButtonProperties(kViewPendingColor, 'Pending'); case 'approved': - return OrderButtonProperties(approvedAndOrderCompleted, 'Approved'); + return OrderButtonProperties( + kApprovedAndOrderCompletedColor, 'Approved'); case 'declined': - return OrderButtonProperties(declined, 'Declined'); + return OrderButtonProperties(kDeclined, 'Declined'); case 'placed': - return OrderButtonProperties(placed, 'Placed'); + return OrderButtonProperties(kPlaced, 'Placed'); case 'partially delivered': - return OrderButtonProperties(partialyDelivered, 'Partially delivered'); + return OrderButtonProperties( + kPartiallyDelivered, 'Partially delivered'); default: - return OrderButtonProperties(approvedAndOrderCompleted, 'Completed'); + return OrderButtonProperties( + kApprovedAndOrderCompletedColor, 'Completed'); } } @@ -85,15 +88,13 @@ class MyOrders extends StatelessWidget { ), SizedBox(height: 20), Text( - 'Supplier name', - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith( + 'Supplier name', + style: + Theme.of(context).textTheme.bodyMedium!.copyWith( fontSize: 12, fontWeight: FontWeight.bold, ), - ), + ), Row( children: [ Text( diff --git a/flutter_client/lib/screens/my_orders_screen.dart b/flutter_client/lib/screens/my_orders_screen.dart index c952104..bffb554 100644 --- a/flutter_client/lib/screens/my_orders_screen.dart +++ b/flutter_client/lib/screens/my_orders_screen.dart @@ -17,17 +17,20 @@ class MyOrders extends StatelessWidget { OrderButtonProperties getButtonProperties(String state) { switch (state) { case 'pending': - return OrderButtonProperties(viewPending, 'Pending'); + return OrderButtonProperties(kViewPendingColor, 'Pending'); case 'approved': - return OrderButtonProperties(approvedAndOrderCompleted, 'Approved'); + return OrderButtonProperties( + kApprovedAndOrderCompletedColor, 'Approved'); case 'declined': - return OrderButtonProperties(declined, 'Declined'); + return OrderButtonProperties(kDeclined, 'Declined'); case 'placed': - return OrderButtonProperties(placed, 'Placed'); + return OrderButtonProperties(kPlaced, 'Placed'); case 'partially delivered': - return OrderButtonProperties(partialyDelivered, 'Partially delivered'); + return OrderButtonProperties( + kPartiallyDelivered, 'Partially delivered'); default: - return OrderButtonProperties(approvedAndOrderCompleted, 'Completed'); + return OrderButtonProperties( + kApprovedAndOrderCompletedColor, 'Completed'); } } diff --git a/flutter_client/lib/widgets/delivery_card.dart b/flutter_client/lib/widgets/delivery_card.dart new file mode 100644 index 0000000..08e45c7 --- /dev/null +++ b/flutter_client/lib/widgets/delivery_card.dart @@ -0,0 +1,125 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_client/constants.dart'; +import 'package:flutter_client/models/goods_receipt.dart'; +import 'package:flutter_client/screens/delivery_confirmation.dart'; +import 'package:intl/intl.dart'; + +class OrderButtonProperties { + final Color color; + final String text; + + OrderButtonProperties(this.color, this.text); +} + +//TODO changes this +OrderButtonProperties getButtonProperties(String state) { + switch (state) { + case 'Completed': + return OrderButtonProperties( + kApprovedAndOrderCompletedColor, 'Completed'); + // case 'Pending': + // return OrderButtonProperties(partialyDelivered, 'Pending'); + // case 'placed': + // return OrderButtonProperties(placed, 'Placed'); + // case 'partially delivered': + // return OrderButtonProperties(partialyDelivered, 'Partially delivered'); + default: + return OrderButtonProperties(kDeclined, 'Not completed'); + } +} + +class DeliveryAdviceCard extends StatelessWidget { + final GoodsReceipt goodsReceipt; + DeliveryAdviceCard({super.key, required this.goodsReceipt}); + + final buttonProperties = getButtonProperties('Completed'); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => const DeliveryConfirm(), + ), + ); + }, + child: Card( + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.zero), + ), + elevation: 8, + child: SizedBox( + width: double.infinity, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + goodsReceipt.goodsReceiptId, + style: Theme.of(context).textTheme.bodyMedium!.copyWith( + fontSize: 14, + fontWeight: FontWeight.bold, + ), + ), + const Spacer(), + Text( + //display date, + DateFormat('yyyy-MM-dd – kk:mm') + .format(goodsReceipt.createdAt), + style: Theme.of(context).textTheme.bodyMedium!.copyWith( + fontSize: 12, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + const SizedBox(height: 20), + Text( + 'Supplier name', + style: Theme.of(context).textTheme.bodyMedium!.copyWith( + fontSize: 12, + fontWeight: FontWeight.bold, + ), + ), + + // button -------------------->>>>>>>>>> + Row( + children: [ + Text( + 'Rs.25.000', + style: Theme.of(context).textTheme.bodyMedium!.copyWith( + fontSize: 12, + fontWeight: FontWeight.normal, + ), + ), + const Spacer(), + Container( + decoration: BoxDecoration( + color: buttonProperties.color, + borderRadius: BorderRadius.circular(8), + ), + child: TextButton( + onPressed: null, + child: Text( + buttonProperties.text, + style: const TextStyle(color: Colors.white), + ), + ), + ), + ], + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/flutter_client/lib/widgets/my_orders_card.dart b/flutter_client/lib/widgets/my_orders_card.dart index 7a72ce4..c37be00 100644 --- a/flutter_client/lib/widgets/my_orders_card.dart +++ b/flutter_client/lib/widgets/my_orders_card.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_client/models/user_model.dart'; -import 'package:flutter_client/screens/supplier_products_screen.dart'; +import 'package:flutter_client/screens/selected_products_screen.dart'; class MyOrdersCard extends StatelessWidget { const MyOrdersCard({required this.supplier, super.key}); @@ -11,7 +11,7 @@ class MyOrdersCard extends StatelessWidget { void ontapHandler() { Navigator.of(context).push( MaterialPageRoute( - builder: (context) => SupplierProductsScreen( + builder: (context) => SelectedProductsScreen( supplier: supplier, ), ), diff --git a/flutter_client/pubspec.lock b/flutter_client/pubspec.lock index 990f3c1..6a205ad 100644 --- a/flutter_client/pubspec.lock +++ b/flutter_client/pubspec.lock @@ -192,6 +192,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" js: dependency: transitive description: diff --git a/flutter_client/pubspec.yaml b/flutter_client/pubspec.yaml index 2757e51..5ffb94d 100644 --- a/flutter_client/pubspec.yaml +++ b/flutter_client/pubspec.yaml @@ -2,7 +2,7 @@ name: flutter_client description: A new Flutter project. # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev +publish_to: "none" # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: '>=3.1.1 <4.0.0' + sdk: ">=3.1.1 <4.0.0" # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 @@ -41,7 +40,7 @@ dependencies: http: ^1.1.0 dart_jsonwebtoken: ^2.12.0 flutter_gif: ^0.0.4 - + intl: ^0.18.1 dev_dependencies: flutter_test: sdk: flutter @@ -58,7 +57,6 @@ dev_dependencies: # The following section is specific to Flutter packages. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class.