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.

295 lines
9.7KB

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