diff --git a/lib/models/SalesTaskResponse.dart b/lib/models/SalesTaskResponse.dart index 6f62f76..8333ac4 100644 --- a/lib/models/SalesTaskResponse.dart +++ b/lib/models/SalesTaskResponse.dart @@ -48,6 +48,7 @@ class SalesProduct { String? updatedAt; int? SalesAmount; int? QuantitySold; + String? comments; int? iV; SalesProduct( @@ -66,6 +67,7 @@ class SalesProduct { this.createdAt, this.updatedAt, this.QuantitySold, + this.comments, this.SalesAmount, this.iV}); @@ -89,6 +91,7 @@ class SalesProduct { iV = json['__v']; } + Map toJson() { final Map data = {}; data['_id'] = sId; diff --git a/lib/provider/add_sales_product_provider.dart b/lib/provider/add_sales_product_provider.dart index 986483e..c56cdcd 100644 --- a/lib/provider/add_sales_product_provider.dart +++ b/lib/provider/add_sales_product_provider.dart @@ -55,7 +55,6 @@ class AddSalesProvider with ChangeNotifier { {required String distributorType, required String pdRdId, required String date, - required String comments, String? inventoryId, required String tradeName}) async { setLoading(true); @@ -66,12 +65,13 @@ class AddSalesProvider with ChangeNotifier { "addedForId": pdRdId, "tradename": tradeName, "date": date, - "comments": comments, + "products": selectedProducts.map((product) { return { "SKU": product.SKU, "ProductName": product.ProductName, "QuantitySold": product.QuantitySold, + "comments": product.comments, "SalesAmount": product.SalesAmount }; }).toList() diff --git a/lib/screens/add_sales_product_screen.dart b/lib/screens/add_sales_product_screen.dart index 87fc116..8d980ac 100644 --- a/lib/screens/add_sales_product_screen.dart +++ b/lib/screens/add_sales_product_screen.dart @@ -30,7 +30,6 @@ class _AddSalesProductScreenState extends State { final searchController = TextEditingController(); late AddSalesProvider salesTaskProvider; final dateController = TextEditingController(); - final commentController = TextEditingController(); final formKey = GlobalKey(); @override @@ -198,10 +197,6 @@ class _AddSalesProductScreenState extends State { date: dateController .text .trim(), - comments: - commentController - .text - .trim(), tradeName: widget.tradeName); } else { @@ -251,17 +246,6 @@ class _AddSalesProductScreenState extends State { ), ), ), - Padding( - padding: const EdgeInsets.all(8.0), - child: TextField( - controller: commentController, - decoration: const InputDecoration( - fillColor: Colors.white, - filled: true, - border: InputBorder.none, - labelText: 'Comments'), - maxLines: 1), - ), if (value.selectedProducts.isNotEmpty) Expanded( child: ListView.builder( @@ -313,12 +297,14 @@ class ProductBlock extends StatefulWidget { class _ProductBlockState extends State { final saleAmountController = TextEditingController(); final quantitySoldController = TextEditingController(); + final commentController = TextEditingController(); String? errorMessage; @override void initState() { super.initState(); saleAmountController.text = (widget.product.SalesAmount ?? '').toString(); + commentController.text = (widget.product.comments?? '').toString(); quantitySoldController.text = (widget.product.QuantitySold ?? '').toString(); } @@ -340,12 +326,14 @@ class _ProductBlockState extends State { if (quantitySoldError == null && salesAmountError == null) { int quantitySold = int.parse(quantitySoldController.text); int salesAmount = int.parse(saleAmountController.text); + String comments =commentController.text; widget.onUpdate(SalesProduct( SKU: widget.product.SKU, ProductName: widget.product.ProductName, QuantitySold: quantitySold, SalesAmount: salesAmount, + comments: comments, )); } else { errorMessage = quantitySoldError ?? salesAmountError; @@ -392,6 +380,13 @@ class _ProductBlockState extends State { : null), keyboardType: TextInputType.number, enabled: true, + onChanged: (_) => validateInput()), + TextField( + controller: commentController, + onTapOutside: (event) => FocusScope.of(context).unfocus(), + decoration: const InputDecoration( + labelText: 'Comments',), + enabled: true, onChanged: (_) => validateInput()) ]), ]), diff --git a/lib/screens/daily_tasks_screen.dart b/lib/screens/daily_tasks_screen.dart index c14a332..13536b4 100644 --- a/lib/screens/daily_tasks_screen.dart +++ b/lib/screens/daily_tasks_screen.dart @@ -1,14 +1,12 @@ import 'package:cheminova/models/Daily_Task_Response.dart'; import 'package:cheminova/screens/Add_products_screen.dart'; -import 'package:cheminova/screens/sales_task_screen.dart'; -import 'package:flutter/material.dart'; -import 'package:cheminova/screens/visit_rd_pd_screen.dart'; -import 'package:cheminova/screens/update_sales_screen.dart'; -import 'package:cheminova/screens/update_inventory_screen.dart'; +import 'package:cheminova/screens/add_sales_product_screen.dart'; import 'package:cheminova/screens/collect_kyc_screen.dart'; +import 'package:cheminova/screens/visit_rd_pd_screen.dart'; import 'package:cheminova/widgets/common_app_bar.dart'; -import 'package:cheminova/widgets/common_drawer.dart'; import 'package:cheminova/widgets/common_background.dart'; +import 'package:cheminova/widgets/common_drawer.dart'; +import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; @@ -97,10 +95,10 @@ class _DailyTasksScreenState extends State { decoration: BoxDecoration( gradient: _selectedTabIndex == index ? const LinearGradient( - colors: [Color(0xff004791), Color(0xff1a73e8)], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ) + colors: [Color(0xff004791), Color(0xff1a73e8)], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ) : null, color: _selectedTabIndex == index ? Colors.transparent @@ -163,22 +161,22 @@ class _DailyTasksScreenState extends State { builder: (context, value, child) => value.isLoading ? const Center(child: CircularProgressIndicator()) : ListView.separated( - padding: const EdgeInsets.all(16), - itemCount: _selectedTabIndex == 0 - ? value.newTasksList.length - : _selectedTabIndex == 1 - ? value.pendingTasksList.length - : value.completedTasksList.length, - separatorBuilder: (context, index) => const SizedBox(height: 8), - itemBuilder: (context, index) { - final tasksList = tabIndex == 0 - ? value.newTasksList - : tabIndex == 1 - ? value.pendingTasksList - : value.completedTasksList; - return _buildTaskCard(tasksList[index]); - }, - ), + padding: const EdgeInsets.all(16), + itemCount: _selectedTabIndex == 0 + ? value.newTasksList.length + : _selectedTabIndex == 1 + ? value.pendingTasksList.length + : value.completedTasksList.length, + separatorBuilder: (context, index) => const SizedBox(height: 8), + itemBuilder: (context, index) { + final tasksList = tabIndex == 0 + ? value.newTasksList + : tabIndex == 1 + ? value.pendingTasksList + : value.completedTasksList; + return _buildTaskCard(tasksList[index]); + }, + ), ); } @@ -187,42 +185,47 @@ class _DailyTasksScreenState extends State { onTap: _selectedTabIndex == 2 ? null // Disable click when on the "COMPLETED" tab : () { - if (tasksList.task == 'Collect KYC') { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - CollectKycScreen(id: tasksList.taskId ?? ''))); - } else if (tasksList.task == 'REUPLOAD') { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - CollectKycScreen(id: tasksList.taskId ?? ''))); - } else if (tasksList.task == 'Update Inventory Data') { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => AddProductsScreen( - distributorType: tasksList.addedFor!, - tradeName: tasksList.tradeName ?? '', - pdRdId: tasksList.addedForId!, - inventoryId: tasksList.sId))); - } else if (tasksList.task == 'Update Sales Data') { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => UpdateSalesScreen(String: null,))); - } else if (tasksList.task == 'Visit RD/PD') { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => VisitDealersScreen( - tradeName: tasksList.tradeName ?? '', - id: tasksList.sId, - ))); - } - }, + if (tasksList.task == 'Collect KYC') { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + CollectKycScreen(id: tasksList.taskId ?? ''))); + } else if (tasksList.task == 'REUPLOAD') { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + CollectKycScreen(id: tasksList.taskId ?? ''))); + } else if (tasksList.task == 'Update Inventory Data') { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AddProductsScreen( + distributorType: tasksList.addedFor!, + tradeName: tasksList.tradeName ?? '', + pdRdId: tasksList.addedForId!, + inventoryId: tasksList.sId))); + } else if (tasksList.task == 'Update Sales Data') { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AddSalesProductScreen( + distributorType: tasksList.addedFor!, + tradeName: tasksList.tradeName!, + pdRdId: tasksList.addedForId!, + inventoryId:tasksList.sId, + ))); + } else if (tasksList.task == 'Visit RD/PD') { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => VisitDealersScreen( + tradeName: tasksList.tradeName ?? '', + id: tasksList.sId, + ))); + } + }, child: Card( color: Colors.white, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index 57d9f1c..97105ff 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -1,19 +1,15 @@ import 'package:cheminova/notification_services.dart'; import 'package:cheminova/provider/home_provider.dart'; import 'package:cheminova/screens/Update_inventorytask_screen.dart'; -import 'package:cheminova/screens/profile_screen.dart'; -import 'package:cheminova/screens/rejected_application_screen.dart'; import 'package:cheminova/screens/calendar_screen.dart'; -import 'package:cheminova/screens/collect_kyc_screen.dart'; import 'package:cheminova/screens/daily_tasks_screen.dart'; -import 'package:cheminova/screens/sales_task_screen.dart'; -import 'package:cheminova/screens/update_sales_screen.dart'; import 'package:cheminova/screens/mark_attendence_screen.dart'; import 'package:cheminova/screens/notification_screen.dart'; -import 'package:cheminova/screens/product_sales_data.dart'; +import 'package:cheminova/screens/product_purchase_data.dart'; import 'package:cheminova/screens/products_manual_screen.dart'; +import 'package:cheminova/screens/rejected_application_screen.dart'; +import 'package:cheminova/screens/sales_task_screen.dart'; import 'package:cheminova/screens/select_taskkyc_screen.dart'; -import 'package:cheminova/screens/update_inventory_screen.dart'; import 'package:cheminova/widgets/common_app_bar.dart'; import 'package:cheminova/widgets/common_background.dart'; import 'package:cheminova/widgets/common_drawer.dart'; @@ -171,7 +167,7 @@ class _HomePageState extends State { const SizedBox(width: 12), Expanded( child: _buildCustomCard( - 'Product\nSales Data Visibility', + 'Product\nPurchase Data Visibility', '', buttonWidth, onTap: () { @@ -179,7 +175,7 @@ class _HomePageState extends State { context, MaterialPageRoute( builder: (context) => - const ProductSalesData(), + const ProductPurchaseData(), ), ); }, diff --git a/lib/screens/product_sales_data.dart b/lib/screens/product_purchase_data.dart similarity index 93% rename from lib/screens/product_sales_data.dart rename to lib/screens/product_purchase_data.dart index d70cb8b..68a2fad 100644 --- a/lib/screens/product_sales_data.dart +++ b/lib/screens/product_purchase_data.dart @@ -7,14 +7,14 @@ import '../widgets/common_app_bar.dart'; import '../widgets/common_elevated_button.dart'; import '../widgets/common_text_form_field.dart'; -class ProductSalesData extends StatefulWidget { - const ProductSalesData({super.key}); +class ProductPurchaseData extends StatefulWidget { + const ProductPurchaseData({super.key}); @override - State createState() => ProductSalesDataState(); + State createState() => ProductPurchaseDataState(); } -class ProductSalesDataState extends State { +class ProductPurchaseDataState extends State { final dateController = TextEditingController( text: DateFormat('dd/MM/yyyy').format(DateTime.now())); @@ -44,7 +44,7 @@ class ProductSalesDataState extends State { icon: Image.asset('assets/Back_attendance.png'), padding: const EdgeInsets.only(right: 20), ), ], - title: const Text('Product Sales Data', + title: const Text('Product Purchase Data', style: TextStyle( fontSize: 20, color: Colors.black, diff --git a/lib/screens/update_sales_screen.dart b/lib/screens/update_sales_screen.dart deleted file mode 100644 index 42d6ce6..0000000 --- a/lib/screens/update_sales_screen.dart +++ /dev/null @@ -1,136 +0,0 @@ -import 'package:cheminova/screens/data_submit_successfull.dart'; -import 'package:cheminova/widgets/common_drawer.dart'; -import 'package:flutter/material.dart'; -import 'package:cheminova/widgets/common_background.dart'; -import 'package:intl/intl.dart'; -import '../widgets/common_app_bar.dart'; -import '../widgets/common_elevated_button.dart'; -import '../widgets/common_text_form_field.dart'; -class UpdateSalesScreen extends StatefulWidget { - const UpdateSalesScreen({super.key, required String}); - - @override - State createState() => UpdateSalesScreenState(); - -} - -class UpdateSalesScreenState extends State { - final dateController = TextEditingController( - text: DateFormat('dd/MM/yyyy').format(DateTime.now())); - - final timeController = - TextEditingController(text: DateFormat('hh:mm a').format(DateTime.now())); - - final locationController = TextEditingController(); - final notesController = TextEditingController(); - final dealercontroller = TextEditingController(); - final productController = TextEditingController(); - final qualityController = TextEditingController(); - final salesController = TextEditingController(); - final commentController = TextEditingController(); - - - @override - Widget build(BuildContext context) { - return CommonBackground( - child: Scaffold(backgroundColor: Colors.transparent, - appBar: CommonAppBar( - actions: [ - IconButton( - onPressed: () - { - Navigator.pop(context); - }, - icon: Image.asset('assets/Back_attendance.png'), padding: const EdgeInsets.only(right: 20), - ), - ], - title: const Text('Update Sales Data', - style: TextStyle( - fontSize: 20, - color: Colors.black, - fontWeight: FontWeight.w400, - fontFamily: 'Anek')), backgroundColor: Colors.transparent, elevation: 0, - ), - drawer: const CommonDrawer(), - body: Padding( - padding: const EdgeInsets.all(16.0), - child: SingleChildScrollView( - physics: const BouncingScrollPhysics(), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox(height: 16), - Container( - padding: - const EdgeInsets.all(20.0).copyWith(top: 30, bottom: 30), - // margin: const EdgeInsets.symmetric(horizontal: 30.0), - decoration: BoxDecoration( - border: Border.all(color: Colors.white), - color: const Color(0xffB4D1E5).withOpacity(0.9), - borderRadius: BorderRadius.circular(26.0)), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - CommonTextFormField( - title: 'Select Dealer: Dealer 1', - fillColor: Colors.white, - controller: dealercontroller), - const SizedBox(height: 15), - - CommonTextFormField( - title: 'Select Product: Product A', - fillColor: Colors.white, - controller: productController), - const SizedBox(height: 15), - - CommonTextFormField( - title: 'visit date', - readOnly: true, - fillColor: Colors.white, - controller: dateController), - const SizedBox(height: 15), - - CommonTextFormField( - title: 'Quantity Sold: 221', - fillColor: Colors.white, - controller: qualityController), - const SizedBox(height: 15), - - CommonTextFormField( - title: 'Sales Amount: 23,421', - fillColor: Colors.white, - controller: salesController), - const SizedBox(height: 15), - - CommonTextFormField( - title: 'Comments:', - fillColor: Colors.white, - maxLines: 4, - controller: commentController), - const SizedBox(height: 15), - - Align( - alignment: Alignment.center, - child: CommonElevatedButton( - borderRadius: 30, - width: double.infinity, - height: kToolbarHeight - 10, - text: 'SUBMIT', - backgroundColor: const Color(0xff004791), - onPressed: () { - Navigator.push(context, MaterialPageRoute(builder: (context) => const DataSubmitSuccessFullScreen())); - - }) - - ), - ], - ), - ), - ], - ), - ), - ),), - ); - } -} \ No newline at end of file