tm-android-app/lib/provider/add_sales_provider.dart
2024-10-17 13:39:27 +05:30

130 lines
3.6 KiB
Dart

import 'dart:convert';
import 'package:cheminova/constants/constant.dart';
import 'package:cheminova/models/sales_task_response.dart';
import 'package:cheminova/screens/data_submit_successfull.dart';
import 'package:cheminova/services/api_client.dart';
import 'package:cheminova/services/api_urls.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
class AddSalesProvider with ChangeNotifier {
final _apiClient = ApiClient();
List<SalesProduct> tasksList = [];
List<SalesProduct> searchList = [];
bool _isLoading = false;
bool get isLoading => _isLoading;
List<SalesProduct> selectedProducts = [];
void setLoading(bool loading) {
_isLoading = loading;
notifyListeners();
}
Future<void> getTask() async {
setLoading(true);
try {
Response response = await _apiClient.get(ApiUrls.salesTaskUrl);
setLoading(false);
if (response.statusCode == 200) {
final data = SalesTaskResponse.fromJson(response.data);
tasksList = data.products ?? [];
notifyListeners();
}
} catch (e) {
String error = "Something went wrong";
if (e is DioException) {
error = e.response!.data['message'] ?? "Something went wrong";
}
ScaffoldMessenger.of(
navigatorKey.currentContext!,
).showSnackBar(
SnackBar(
content: Text(
error,
),
),
);
setLoading(false);
}
}
void filterProducts(String val) {
tasksList = tasksList.where((element) {
final productNameLower = element.ProductName!.toLowerCase();
final productSkuLower = element.SKU!.toLowerCase();
final searchLower = val.toLowerCase();
return productNameLower.contains(searchLower) ||
productSkuLower.contains(searchLower);
}).toList();
notifyListeners();
}
Future<void> submitProducts(
{required String distributorType,
required String pdRdId,
required String date,
String? inventoryId,
required String tradeName}) async {
setLoading(true);
try {
Response response = await _apiClient.post(ApiUrls.postSalesTaskUrl,
data: json.encode({
"addedFor": distributorType.replaceAll(' ', ''),
"addedForId": pdRdId,
"tradename": tradeName,
"date": date,
"products": selectedProducts.map((product) {
return {
"SKU": product.SKU,
"ProductName": product.ProductName,
"QuantitySold": product.QuantitySold,
"comments": product.comments,
"SalesAmount": product.SalesAmount
};
}).toList()
}));
setLoading(false);
if (response.statusCode == 201) {
ScaffoldMessenger.of(
navigatorKey.currentContext!,
).showSnackBar(
SnackBar(content: Text(response.data['message'])),
);
resetProducts();
Navigator.push(
navigatorKey.currentContext!,
MaterialPageRoute(
builder: (context) => const DataSubmitSuccessfull(),
),
);
}
} catch (e) {
setLoading(false);
String error = "Something went wrong";
if (e is DioException) {
error = e.response!.data['message'] ?? "Something went wrong";
}
ScaffoldMessenger.of(
navigatorKey.currentContext!,
).showSnackBar(
SnackBar(
content: Text(
error,
),
),
);
}
}
void resetProducts() {
selectedProducts.clear();
tasksList.clear();
notifyListeners();
}
}