import 'dart:developer'; import 'package:data_channel/data_channel.dart'; import 'package:injectable/injectable.dart'; import '../../../common/api/api_client.dart'; import '../../../common/api/api_failure.dart'; import '../../../common/extension/extension.dart'; import '../../../common/function/app_function.dart'; import '../../../common/url/api_path.dart'; import '../../../domain/analytic/analytic.dart'; import '../analytic_dtos.dart'; @injectable class AnalyticRemoteDataProvider { final ApiClient _apiClient; final String _logName = "AnalyticRemoteDataProvider"; AnalyticRemoteDataProvider(this._apiClient); Future> fetchSales({ required DateTime dateFrom, required DateTime dateTo, }) async { try { final response = await _apiClient.get( ApiPath.salesAnalytic, params: { 'date_from': dateFrom.toServerDate, 'date_to': dateTo.toServerDate, }, headers: getAuthorizationHeader(), ); if (response.data['data'] == null) { return DC.error(AnalyticFailure.empty()); } final dto = SalesAnalyticDto.fromJson(response.data['data']); return DC.data(dto); } on ApiFailure catch (e, s) { log('fetchSalesError', name: _logName, error: e, stackTrace: s); return DC.error(AnalyticFailure.serverError(e)); } } Future> fetchProfitLoss({ required DateTime dateFrom, required DateTime dateTo, }) async { try { final response = await _apiClient.get( ApiPath.profitLossAnalytic, params: { 'date_from': dateFrom.toServerDate, 'date_to': dateTo.toServerDate, }, headers: getAuthorizationHeader(), ); if (response.data['data'] == null) { return DC.error(AnalyticFailure.empty()); } final dto = ProfitLossAnalyticDto.fromJson(response.data['data']); return DC.data(dto); } on ApiFailure catch (e, s) { log('fetchProfitLossError', name: _logName, error: e, stackTrace: s); return DC.error(AnalyticFailure.serverError(e)); } } Future> fetchCategory({ required DateTime dateFrom, required DateTime dateTo, }) async { try { final response = await _apiClient.get( ApiPath.categoryAnalytic, params: { 'date_from': dateFrom.toServerDate, 'date_to': dateTo.toServerDate, }, headers: getAuthorizationHeader(), ); if (response.data['data'] == null) { return DC.error(AnalyticFailure.empty()); } final dto = CategoryAnalyticDto.fromJson(response.data['data']); return DC.data(dto); } on ApiFailure catch (e, s) { log('fetchCategoryError', name: _logName, error: e, stackTrace: s); return DC.error(AnalyticFailure.serverError(e)); } } Future> fetchInventory({ required String outletId, required DateTime dateFrom, required DateTime dateTo, }) async { try { final response = await _apiClient.get( '${ApiPath.inventoryReportDetail}/$outletId', params: { 'date_from': dateFrom.toServerDate, 'date_to': dateTo.toServerDate, }, headers: getAuthorizationHeader(), ); if (response.data['data'] == null) { return DC.error(AnalyticFailure.empty()); } final dto = InventoryAnalyticDto.fromJson(response.data['data']); return DC.data(dto); } on ApiFailure catch (e, s) { log('fetchInventoryError', name: _logName, error: e, stackTrace: s); return DC.error(AnalyticFailure.serverError(e)); } } Future> fetchDashboard({ required String outletId, required DateTime dateFrom, required DateTime dateTo, }) async { try { final response = await _apiClient.get( ApiPath.dashboardAnalytic, params: { 'date_from': dateFrom.toServerDate, 'date_to': dateTo.toServerDate, }, headers: getAuthorizationHeader(), ); if (response.data['data'] == null) { return DC.error(AnalyticFailure.empty()); } final dto = DashboardAnalyticDto.fromJson(response.data['data']); return DC.data(dto); } on ApiFailure catch (e, s) { log('fetchDashboardError', name: _logName, error: e, stackTrace: s); return DC.error(AnalyticFailure.serverError(e)); } } }