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.

303 lines
10KB

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