You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

247 lines
9.6KB

  1. import 'package:dio/dio.dart';
  2. import 'package:dio_http_cache/dio_http_cache.dart';
  3. import 'package:farm_tpf/custom_model/ActionType.dart';
  4. import 'package:farm_tpf/custom_model/CropPlot.dart';
  5. import 'package:farm_tpf/custom_model/Device.dart';
  6. import 'package:farm_tpf/custom_model/EnvironmentParameter.dart';
  7. import 'package:farm_tpf/custom_model/Harvest.dart';
  8. import 'package:farm_tpf/custom_model/LocationUnit.dart';
  9. import 'package:farm_tpf/custom_model/NotificationObjectDTO.dart';
  10. import 'package:farm_tpf/custom_model/Supply.dart';
  11. import 'package:farm_tpf/custom_model/TbCropDTO.dart';
  12. import 'package:farm_tpf/custom_model/UpdateNoti.dart';
  13. import 'package:farm_tpf/custom_model/WaterType.dart';
  14. import 'package:farm_tpf/custom_model/action_form/ActionUIForm.dart';
  15. import 'package:farm_tpf/custom_model/action_form/CommonData.dart';
  16. import 'package:farm_tpf/custom_model/action_form/RequestActivity.dart';
  17. import 'package:farm_tpf/custom_model/user.dart';
  18. import 'package:farm_tpf/custom_model/user_request.dart';
  19. import 'package:farm_tpf/data/api/dio_provider.dart';
  20. import 'package:farm_tpf/data/api/rest_client.dart';
  21. import 'package:farm_tpf/models/PagedResult.dart';
  22. import 'package:farm_tpf/utils/const_common.dart';
  23. import 'package:flutter/material.dart';
  24. class Repository {
  25. final dio = DioProvider.instance();
  26. Future<List<ActionType>> getActionTypes() {
  27. final client = RestClient(dio);
  28. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  29. return client.getActionTypes(options: op);
  30. }
  31. Future<List<Harvest>> getHarvests() {
  32. final client = RestClient(dio);
  33. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  34. return client.getHarvests(options: op);
  35. }
  36. Future<List<WaterType>> getWaterTypes() {
  37. final client = RestClient(dio);
  38. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  39. return client.getWaterTypes(options: op);
  40. }
  41. Future<CropPlot> getPlotDetail(int cropId, {int page, int size}) {
  42. final client = RestClient(dio);
  43. return client.getCropDetail(cropId, page: page, size: size);
  44. }
  45. Future<CropPlot> getPlotDetailByCode(String cropCode) {
  46. final client = RestClient(dio);
  47. return client.getCropDetailByCode(cropCode);
  48. }
  49. Future<List<TbCropDTO>> getPlots({int page, int size, String searchString}) {
  50. final client = RestClient(dio);
  51. return client.getPlots(page: page, size: size, query: searchString);
  52. }
  53. Future<void> updatePlot(TbCropDTO tbCropDTO) {
  54. final client = RestClient(dio);
  55. return client.updateCrop(tbCropDTO);
  56. }
  57. Future<User> signInWithCredentials(String username, String password) {
  58. final client = RestClient(dio);
  59. return client.login(UserRequest(username: username, password: password));
  60. }
  61. Future<PagedResult<T>> getInfinityList<T>(String url, {int page = 0, int size = 20}) async {
  62. var initUrl = "/api/activities/latest-env-by-activity-type/1/2";
  63. var url = ConstCommon.baseUrl + initUrl + "?page=$page&paged=true&size=$size";
  64. var response = await dio.get(url);
  65. final value = PagedResult<T>.fromJson(response.data, getInstanceClass());
  66. return value;
  67. }
  68. Future<List<Supply>> getSupplies(String type, {String query = ""}) async {
  69. final client = RestClient(dio);
  70. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  71. return client.getSupplies(type, query: query, options: op);
  72. }
  73. Future<List<Device>> getDeviceForActivity() async {
  74. final client = RestClient(dio);
  75. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  76. return client.getDeviceForActivity(options: op);
  77. }
  78. Future<void> updateAllNotification(String status) {
  79. final client = RestClient(dio);
  80. return client.updateAllNotification(status);
  81. }
  82. Future<void> updateNoti(UpdateNoti updateNoti) {
  83. final client = RestClient(dio);
  84. return client.updateNoti(updateNoti);
  85. }
  86. Future<NotificationObjectDTO> getNotifications({int page = 0, int size = 20}) async {
  87. var url = ConstCommon.baseUrl + "/api/notifications-current-user?page=$page&size=$size&sort=sendDate,DESC";
  88. var response = await dio.get(url);
  89. final value = NotificationObjectDTO.fromJson(response.data);
  90. return value;
  91. }
  92. Future<List<LocationUnit>> getLocationUnits({@required LocationType locationType, int filterId, int page = 0, int size = 500, String query = ''}) {
  93. final client = RestClient(dio);
  94. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  95. var response;
  96. switch (locationType) {
  97. case LocationType.province:
  98. response = client.getProvinces(filterId, options: op, page: page, size: size, query: query);
  99. break;
  100. case LocationType.district:
  101. response = client.getDistricts(filterId, options: op, page: page, size: size, query: query);
  102. break;
  103. case LocationType.ward:
  104. response = client.getWards(filterId, options: op, page: page, size: size, query: query);
  105. break;
  106. default:
  107. response = client.getCountries(query: query);
  108. }
  109. return response;
  110. }
  111. Object getInstanceClass() {
  112. var instanceClass;
  113. if (1 == 1) {
  114. instanceClass = new TbCropDTO();
  115. }
  116. return instanceClass;
  117. }
  118. //Action
  119. Future<void> createAction(Function(dynamic) onSuccess, Function(dynamic) onError,
  120. {String apiAddAction, String paramActivity, String activityAction, List<String> filePaths}) async {
  121. var formData = FormData();
  122. filePaths.forEach((f) {
  123. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  124. });
  125. formData.fields.add(MapEntry(paramActivity, activityAction));
  126. try {
  127. await dio.post("${ConstCommon.baseUrl}/$apiAddAction", data: formData).then((value) {
  128. onSuccess(value.data);
  129. });
  130. } on DioError catch (e) {
  131. onError(e);
  132. }
  133. }
  134. Future<void> updateAction(Function(dynamic) onSuccess, Function(dynamic) onError,
  135. {String apiUpdateAction, String paramActivity, String activityAction, List<String> filePaths}) async {
  136. var formData = FormData();
  137. filePaths.forEach((f) {
  138. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  139. });
  140. formData.fields.add(MapEntry(paramActivity, activityAction));
  141. try {
  142. await dio.post("${ConstCommon.baseUrl}/$apiUpdateAction", data: formData).then((value) {
  143. onSuccess(value.data);
  144. });
  145. } on DioError catch (e) {
  146. onError(e);
  147. }
  148. }
  149. //Device
  150. Future<List<Device>> getDevices(String query) {
  151. final client = RestClient(dio);
  152. return client.getDevices(query: query);
  153. }
  154. //Environment Parameter
  155. Future<List<EnvironmentParameter>> getEnvironmentParameters({@required int cropId, int page, int size}) {
  156. final client = RestClient(dio);
  157. return client.getEnvironmentParameters(cropId, page: page, size: size);
  158. }
  159. //NEW IMPLEMENT
  160. Future<void> allActionTypes(int cropTypeId, Function(List<ActionType>) onSuccess, Function(dynamic) onError) async {
  161. try {
  162. var url = '${ConstCommon.baseUrl}/api/listActivityTypesCulture/$cropTypeId';
  163. final Response<List<dynamic>> _result = await dio.get(url);
  164. var value = _result.data.map((dynamic i) => ActionType.fromJson(i as Map<String, dynamic>)).toList();
  165. onSuccess(value);
  166. } on DioError catch (e) {
  167. onError(e);
  168. }
  169. }
  170. Future<ActionUIForm> getActionUIForm({@required int idAction}) {
  171. final client = RestClient(dio);
  172. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  173. return client.getActionUIForm(idAction, op);
  174. }
  175. Future<List<CommonData>> getCommonData({String tableSupply, String condition}) async {
  176. var url = '${ConstCommon.baseUrl}/api/get-data-from-table-common?tableName=$tableSupply&condition=$condition';
  177. final Response<List<dynamic>> _result = await dio.get(url);
  178. var value = _result.data.map((dynamic i) => CommonData.fromJson(i as Map<String, dynamic>)).toList();
  179. return value;
  180. }
  181. Future<void> createActionCommon(Function(dynamic) onSuccess, Function(dynamic) onError,
  182. {@required String activityType, @required String activityData, List<String> filePaths}) async {
  183. var formData = FormData();
  184. filePaths.forEach((f) {
  185. formData.files.add(MapEntry('images', MultipartFile.fromFileSync(f)));
  186. });
  187. formData.fields.add(MapEntry('tbCommonActivityDTO', activityData));
  188. try {
  189. await dio.post("${ConstCommon.baseUrl}/api/create-common-activity/$activityType", data: formData).then((value) {
  190. onSuccess(value.data);
  191. });
  192. } on DioError catch (e) {
  193. onError(e);
  194. }
  195. }
  196. Future<void> updateActionCommon(Function(dynamic) onSuccess, Function(dynamic) onError,
  197. {@required String activityType, @required String activityData, List<String> filePaths}) async {
  198. var formData = FormData();
  199. filePaths.forEach((f) {
  200. formData.files.add(MapEntry('images', MultipartFile.fromFileSync(f)));
  201. });
  202. formData.fields.add(MapEntry('tbCommonActivityDTO', activityData));
  203. try {
  204. await dio.post("${ConstCommon.baseUrl}/api/update-common-activity/$activityType", data: formData).then((value) {
  205. onSuccess(value.data);
  206. });
  207. } on DioError catch (e) {
  208. onError(e);
  209. }
  210. }
  211. Future<RequestActivity> detailCommonAction({@required int activityId, @required String activityType}) async {
  212. final client = RestClient(dio);
  213. return client.getDetailActivityCommon(actionType: activityType, activityId: activityId);
  214. }
  215. }